From b4d992c7051fe887bd3b2c05292190e3fde17646 Mon Sep 17 00:00:00 2001 From: kimoi Date: Fri, 6 Nov 2026 16:18:09 +0500 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=203:?= =?UTF-8?q?=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D1=8B=20ISP,=20HQ-SRV,?= =?UTF-8?q?=20HQ-CLI,=20BR-SRV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zadanie3/br-srv.sh | 95 +++++++++++++++++++++++ zadanie3/hq-cli.sh | 87 ++++++++++++++++++++++ zadanie3/hq-srv.sh | 182 +++++++++++++++++++++++++++++++++++++++++++++ zadanie3/isp.sh | 155 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 519 insertions(+) create mode 100644 zadanie3/br-srv.sh create mode 100644 zadanie3/hq-cli.sh create mode 100644 zadanie3/hq-srv.sh create mode 100644 zadanie3/isp.sh diff --git a/zadanie3/br-srv.sh b/zadanie3/br-srv.sh new file mode 100644 index 0000000..de4108f --- /dev/null +++ b/zadanie3/br-srv.sh @@ -0,0 +1,95 @@ +#!/bin/bash +# ============================================================ +# ЗАДАНИЕ 3. Настройка BR-SRV (Linux / РЕД ОС 8) +# 1. Импорт пользователей: import.sh + users.csv из Additional.iso +# (import.sh сам запрашивает путь к файлу-источнику) +# 7. Инвентаризация через Ansible: плейбук из образа, отчёты в +# /etc/ansible/PC-INFO в формате .yml (имя файла = имя ПК) +# ============================================================ + +# --- Проверка прав root --- +if [[ $EUID -ne 0 ]]; then + echo "Запустите скрипт с правами root (sudo bash br-srv.sh)" + exit 1 +fi + +# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= +EXAM_TZ="Europe/Moscow" # проверить на экзамене +ISO_DIR="/mnt/iso" # точка монтирования Additional.iso + +# --- 1. Импорт пользователей --- +IMPORT_SCRIPT="$ISO_DIR/import.sh" # по заданию — в корне образа +USERS_CSV="$ISO_DIR/users.csv" # файл-источник по заданию + +# --- 7. Плейбук для инвентаризации --- +ANSIBLE_DIR="/etc/ansible" +PLAYBOOK_SRC="$ISO_DIR/playbook" # директория плейбука в образе +PLAYBOOK_DST="$ANSIBLE_DIR/playbook" # куда копируем на BR-SRV +REPORT_DIR="$ANSIBLE_DIR/PC-INFO" # отчёты .yml по имени ПК + +# ============ Проверка заполнения переменных ============ +MISSING=() +for NAME in EXAM_TZ; do + [[ -z "${!NAME}" ]] && MISSING+=("$NAME") +done +if [[ ${#MISSING[@]} -gt 0 ]]; then + echo "Заполните переменные в начале скрипта: ${MISSING[*]}" + exit 1 +fi + +echo "=== Настройка BR-SRV, задание 3 ===" + +# --- 1. Импорт пользователей (import.sh сам спрашивает путь) --- +echo "--- Импорт пользователей из $USERS_CSV ---" +if [[ -x "$IMPORT_SCRIPT" || -f "$IMPORT_SCRIPT" ]]; then + echo "Скрипт найден: $IMPORT_SCRIPT" + echo "Он интерактивно запрашивает файл-источник — запустите вручную:" + echo " bash $IMPORT_SCRIPT и в ответ на вопрос укажите $USERS_CSV" + echo "После импорта проверьте: samba-tool user list" + # Проверку запускаем только если обе вещи на месте: + bash "$IMPORT_SCRIPT" || echo "ЗАПУСТИТЕ ВРУЧНУЮ с указанием $USERS_CSV (см. выше)" +else + echo "ДЕЛАЕТСЯ ВРУЧНУЮ: $IMPORT_SCRIPT не найден — смонтируйте Additional.iso в $ISO_DIR" +fi + +# --- 2. Плейбук для инвентаризации машин HQ-SRV и HQ-CLI --- +echo "--- Плейбук инвентаризации ---" +if [[ -d "$PLAYBOOK_SRC" ]]; then + mkdir -p "$PLAYBOOK_DST" + cp -f "$PLAYBOOK_SRC"/* "$PLAYBOOK_DST/" 2>/dev/null \ + || echo "ПРОВЕРИТЬ: в $PLAYBOOK_SRC нет файлов?" + ls -l "$PLAYBOOK_DST" +else + echo "ДЕЛАЕТСЯ ВРУЧНУЮ: нет $PLAYBOOK_SRC — смонтируйте Additional.iso в $ISO_DIR" +fi +mkdir -p "$REPORT_DIR" +echo "Плейбуки в $PLAYBOOK_DST. Запуск (с BR-SRV, из задания 2 настроен ansible):" +# Запускаем первый найденный .yml (имя файла в образе нам неизвестно заранее) +PLAYBOOK_YML="" +shopt -s nullglob +for F in "$PLAYBOOK_DST"/*.yml "$PLAYBOOK_DST"/*.yaml; do + PLAYBOOK_YML="$F" + break +done +shopt -u nullglob +if [[ -n "$PLAYBOOK_YML" ]]; then + echo " ansible-playbook $PLAYBOOK_YML" + ansible-playbook "$PLAYBOOK_YML" \ + || echo "ПРОВЕРИТЬ: плейбук не отработал — посмотрите его содержимое и ошибки" +else + echo "ДЕЛАЕТСЯ ВРУЧНУЮ: .yml не найден в $PLAYBOOK_DST" +fi + +echo "" +echo "Отчёты должны появиться в $REPORT_DIR (имя файла = имя ПК):" +ls -l "$REPORT_DIR" || true + +timedatectl set-timezone "$EXAM_TZ" + +echo "" +echo "=== Самопроверка на BR-SRV ===" +echo "Импортированные пользователи (должны появиться из users.csv):" +samba-tool user list +echo "" +echo "Отчёты инвентаризации:" +ls -l "$REPORT_DIR" diff --git a/zadanie3/hq-cli.sh b/zadanie3/hq-cli.sh new file mode 100644 index 0000000..5421077 --- /dev/null +++ b/zadanie3/hq-cli.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# ============================================================ +# ЗАДАНИЕ 3. Настройка HQ-CLI (Linux / РЕД ОС 8) +# 4. Доверие корневому сертификату ЦС (HQ-SRV) +# 6. Подключение виртуального pdf-принтера как принтера по умолчанию +# 9. Агент Кибер Бэкап — ДЕЛАЕТСЯ ВРУЧНУЮ (MANUAL.md) +# ============================================================ + +# --- Проверка прав root --- +if [[ $EUID -ne 0 ]]; then + echo "Запустите скрипт с правами root (sudo bash hq-cli.sh)" + exit 1 +fi + +# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= +EXAM_TZ="Europe/Moscow" # проверить на экзамене + +# --- 4. Доверие корневому сертификату --- +CA_ROOT_FILE="" # путь к скопированному корневому сертификату + # (root.crt копируется с HQ-SRV вручную — MANUAL.md) +CA_ANCHORS_DIR="/etc/pki/ca-trust/source/anchors" # ПРОВЕРИТЬ на РЕД ОС 8 +CA_TRUST_CMD="update-ca-trust" # ПРОВЕРИТЬ команду обновления хранилища + +# --- 6. Принтер по умолчанию (виртуальный pdf с HQ-SRV) --- +CUPS_SERVER="" # адрес HQ-SRV (без префикса) +PRINTER_NAME="pdf" # имя принтера, как он опубликован на HQ-SRV +CLIENT_PRINTER="pdf_printer" # локальное имя подключения на HQ-CLI +CUPS_PACKAGE="cups" # клиенту нужны утилиты lpadmin/lpstat + +# ============ Проверка заполнения переменных ============ +MISSING=() +for NAME in CA_ROOT_FILE CUPS_SERVER EXAM_TZ; do + [[ -z "${!NAME}" ]] && MISSING+=("$NAME") +done +if [[ ${#MISSING[@]} -gt 0 ]]; then + echo "Заполните переменные в начале скрипта: ${MISSING[*]}" + exit 1 +fi + +echo "=== Настройка HQ-CLI, задание 3 ===" + +# --- 1. Доверие корневому сертификату ЦС --- +echo "--- Доверие CA ---" +if [[ ! -f "$CA_ROOT_FILE" ]]; then + echo "ДЕЛАЕТСЯ ВРУЧНУЮ: файла $CA_ROOT_FILE нет — скопируйте root.crt с HQ-SRV" + echo " scp root@<адрес HQ-SRV>:$CA_ROOT_FILE " + exit 1 +fi +cp "$CA_ROOT_FILE" "$CA_ANCHORS_DIR/" +"$CA_TRUST_CMD" && echo "Хранилище сертификатов обновлено" \ + || echo "ПРОВЕРИТЬ: $CA_TRUST_CMD не выполнился" +echo "Проверка: curl -I https://web.au-team.irpo (не должен писать про сертификат)" + +# --- 2. Принтер по умолчанию --- +echo "--- Подключение принтера — $CLIENT_PRINTER <- $CUPS_SERVER:$PRINTER_NAME ---" +dnf install -y "$CUPS_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $CUPS_PACKAGE не установился" +if lpstat -p 2>/dev/null | grep -qw "$CLIENT_PRINTER"; then + echo "Принтер $CLIENT_PRINTER уже подключён" +else + lpadmin -p "$CLIENT_PRINTER" \ + -v "ipp://$CUPS_SERVER:631/printers/$PRINTER_NAME" -E \ + && echo "Принтер добавлен" \ + || echo "ПРОВЕРИТЬ: lpadmin не смог добавить принтер (CUPS на HQ-SRV слушает 631?)" +fi +# Назначить принтер по умолчанию (повторно безопасно) +lpoptions -d "$CLIENT_PRINTER" >/dev/null && echo "Принтер по умолчанию: $CLIENT_PRINTER" +lpstat -p -d + +# --- 3. Агент Кибер Бэкап — вручную --- +echo "" +echo "ДЕЛАЕТСЯ ВРУЧНУЮ (MANUAL.md): установить агент с функциями узла" +echo "хранилища, подключить к серверу HQ-SRV, создать /backup и выбрать" +echo "её как устройство хранения. Директорию /backup можно создать сейчас:" +mkdir -p /backup && echo " Директория /backup создана" + +# --- 4. Часовой пояс --- +timedatectl set-timezone "$EXAM_TZ" + +echo "" +echo "=== Самопроверка на HQ-CLI ===" +lpstat -p -d +echo "" +echo "Дополнительные проверки вручную:" +echo " curl -I https://web.au-team.irpo (без предупреждений о сертификате)" +echo " curl -I https://docker.au-team.irpo (без предупреждений + логин WEB/P@ssw0rd на web)" +echo " echo test | lp -d $CLIENT_PRINTER (печать в pdf-принтер)" +echo " ls /var/spool/cups-pdf на HQ-SRV (pdf появился у принтера?)" diff --git a/zadanie3/hq-srv.sh b/zadanie3/hq-srv.sh new file mode 100644 index 0000000..1ddd7e5 --- /dev/null +++ b/zadanie3/hq-srv.sh @@ -0,0 +1,182 @@ +#!/bin/bash +# ============================================================ +# ЗАДАНИЕ 3. Настройка HQ-SRV (Linux / РЕД ОС 8) +# 4. Центр сертификации: root-CA, сертификаты веб-серверам на 30 дней +# (поставка на ISP и HQ-CLI — вручную, MANUAL.md) +# 5. atop: мониторинг с интервалом 7 минут (420 секунд) +# 6. Спринт-сервер cups: публикация виртуального pdf-принтера +# 8. fail2ban для ssh: порт 2027, 3 попытки, бан 1 минута +# 9. Кибер Бэкап — ДЕЛАЕТСЯ ВРУЧНУЮ (MANUAL.md) +# ============================================================ + +# --- Проверка прав root --- +if [[ $EUID -ne 0 ]]; then + echo "Запустите скрипт с правами root (sudo bash hq-srv.sh)" + exit 1 +fi + +# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= +EXAM_TZ="Europe/Moscow" # проверить на экзамене + +# --- 4. Центр сертификации (openssl; ПРОВЕРИТЬ: по заданию рекомендуются +# отечественные алгоритмы — стандартный openssl гост-подписи не умеет, +# обсудите требования и инструменты с экзаменатором, см. QUESTIONS.md) --- +CA_DIR="/etc/CA" # каталог ЦС (создаётся) +CA_CERT="root.crt" # публичный корневой сертификат +CA_KEY="root.key" # ключ корневого CA +CA_DAYS="3650" # срок корневого сертификата (срок выдачи задан ниже) +CA_SUBJECT="/CN=au-team-CA/O=AU-TEAM" # изменить при желании +CERT_DAYS="30" # срок сертификатов веб-серверов ПО ЗАДАНИЮ +CERT_NAMES="web.au-team.irpo docker.au-team.irpo" # домены по таблице 3 + +# --- 5. atop --- +ATOP_PACKAGE="atop" # ПРОВЕРИТЬ: пакет atop на РЕД ОС 8 +ATOP_SERVICE="atop" +ATOP_CONF="/etc/sysconfig/atop" # ПРОВЕРИТЬ путь конфига atop на РЕД ОС 8 +ATOP_INTERVAL="420" # 7 минут по заданию (в секундах) + +# --- 6. cups + pdf-принтер --- +CUPS_PACKAGE="cups" # ПРОВЕРИТЬ: пакет/служба CUPS на РЕД ОС 8 +CUPS_SERVICE="cups" +CUPS_PDF_PACKAGE="cups-pdf" # ПРОВЕРИТЬ: наличие пакета cups-pdf +PDF_PRINTER="pdf" # имя виртуального pdf-принтера + +# --- 8. fail2ban --- +F2B_PACKAGE="fail2ban" # ПРОВЕРИТЬ: пакет и репозиторий fail2ban на РЕД ОС 8 +F2B_SERVICE="fail2ban" +F2B_JAIL="/etc/fail2ban/jail.d/exam.local" # перезаписывается целиком +F2B_SSH_PORT="2027" # порт ssh (задание 1, п. 5) +F2B_MAXRETRY="3" # 3 неуспешные попытки по заданию +F2B_BANTIME="60" # бан 1 минута (60 с) по заданию + +# ============ Проверка заполнения переменных ============ +MISSING=() +for NAME in CA_DIR CA_CERT CA_KEY CA_SUBJECT CERT_NAMES EXAM_TZ; do + [[ -z "${!NAME}" ]] && MISSING+=("$NAME") +done +if [[ ${#MISSING[@]} -gt 0 ]]; then + echo "Заполните переменные в начале скрипта: ${MISSING[*]}" + exit 1 +fi + +echo "=== Настройка HQ-SRV, задание 3 ===" + +# --- 1. Центр сертификации --- +echo "--- ЦС (openssl) ---" +mkdir -p "$CA_DIR" || exit 1 +cd "$CA_DIR" || exit 1 +if [[ ! -f "$CA_CERT" ]]; then + openssl req -x509 -newkey rsa:2048 -nodes \ + -keyout "$CA_KEY" -out "$CA_CERT" -days "$CA_DAYS" \ + -subj "${CA_SUBJECT}" \ + && echo "Создан корневой сертификат: $CA_CERT" +else + echo "Корневой сертификат уже существует" +fi + +# Сертификаты веб-серверам (для каждого домена: ключ + сертификат со SAN) +for NAME in $CERT_NAMES; do + if [[ -f "$NAME.crt" ]]; then + echo "Сертификат $NAME.crt уже существует" + continue + fi + openssl req -newkey rsa:2048 -nodes -keyout "$NAME.key" \ + -out "$NAME.csr" -subj "/CN=$NAME/O=AU-TEAM" \ + -addext "subjectAltName=DNS:$NAME" + # Подписываем корневым CA на CERT_DAYS + if openssl x509 -req -in "$NAME.csr" \ + -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \ + -out "$NAME.crt" -days "$CERT_DAYS" \ + -extfile <(printf "subjectAltName=DNS:%s" "$NAME"); then + echo "Сертификат выдан: $NAME.crt (на $CERT_DAYS дней)" + else + echo "ПРОВЕРИТЬ: не удалось подписать сертификат $NAME" + fi +done +openssl x509 -in "$CA_CERT" -noout -subject -dates +echo "" +echo "ПРОВЕРИТЬ SAN и срок каждого сертификата:" +for NAME in $CERT_NAMES; do + openssl x509 -in "$NAME.crt" -noout -subject -ext subjectAltName -dates 2>/dev/null +done + +# --- 2. atop: интервал 420 с --- +echo "--- atop (интервал $ATOP_INTERVAL c) ---" +dnf install -y "$ATOP_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $ATOP_PACKAGE не установился" +if [[ -f "$ATOP_CONF" ]]; then + if grep -qE "^(LOG)?INTERVAL=" "$ATOP_CONF"; then + sed -ri "s/^(LOG)?INTERVAL=[0-9]+/INTERVAL=$ATOP_INTERVAL/" "$ATOP_CONF" + else + echo "INTERVAL=$ATOP_INTERVAL" >> "$ATOP_CONF" + fi + echo "Интервал задан в $ATOP_CONF" +else + echo "INTERVAL=$ATOP_INTERVAL" > "$ATOP_CONF" + echo "Создан $ATOP_CONF (ПРОВЕРИТЬ, подхватывается ли конфиг службой)" +fi +systemctl enable --now "$ATOP_SERVICE" \ + || { echo "ПРОВЕРИТЬ: служба $ATOP_SERVICE не запустилась"; systemctl status "$ATOP_SERVICE" --no-pager; } + +# --- 3. cups + виртуальный pdf-принтер --- +echo "--- cups / pdf-принтер ---" +dnf install -y "$CUPS_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $CUPS_PACKAGE не установился" +dnf install -y "$CUPS_PDF_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $CUPS_PDF_PACKAGE не установился (нет ли аналога в репозитории?)" +systemctl enable --now "$CUPS_SERVICE" \ + || { echo "ПРОВЕРИТЬ: служба $CUPS_SERVICE не запустилась"; systemctl status "$CUPS_SERVICE" --no-pager; } +# Публикация принтера (создание + включение как общий) — без дублей +if lpstat -p 2>/dev/null | grep -qw "$PDF_PRINTER"; then + echo "Принтер $PDF_PRINTER уже есть" +else + lpadmin -p "$PDF_PRINTER" -v cups-pdf:/ -E -o printer-is-shared=true \ + && echo "Публикуем принтер $PDF_PRINTER" \ + || echo "ПРОВЕРИТЬ: не удалось опубликовать принтер — сделать через веб-интерфейс CUPS вручную" +fi +# Слушать на всех интерфейсах, чтобы HQ-CLI подключился по сети (ПРОВЕРИТЬ) +if ! grep -qE "^Port 631|^Listen [^[:space:]]*:631" /etc/cups/cupsd.conf 2>/dev/null \ + || grep -qE "^Listen localhost:631" /etc/cups/cupsd.conf 2>/dev/null; then + sed -i "s/^Listen localhost:631/Port 631/" /etc/cups/cupsd.conf + if ! grep -qE "^Port 631|^Listen [^[:space:]]*:631" /etc/cups/cupsd.conf; then + echo "Port 631" >> /etc/cups/cupsd.conf + fi + systemctl restart "$CUPS_SERVICE" +fi +lpstat -p + +# --- 4. fail2ban для ssh --- +echo "--- fail2ban (порт $F2B_SSH_PORT, $F2B_MAXRETRY попыток, $F2B_BANTIME c) ---" +dnf install -y "$F2B_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $F2B_PACKAGE не установился (репозиторий EPEL?)" +mkdir -p /etc/fail2ban/jail.d +cat > "$F2B_JAIL" </dev/null || echo "ПРОВЕРИТЬ: fail2ban-client status sshd" +echo "" +echo "Дополнительные проверки вручную:" +echo " systemd-analyze verify atop 2>/dev/null; journalctl -u $ATOP_SERVICE --since -5min" +echo " cat $ATOP_CONF (INTERVAL=420?)" +echo " lpstat -p (принтер $PDF_PRINTER и активен?)" +echo " ssh -p $F2B_SSH_PORT wronguser@localhost (3 раза с неверным паролем -> fail2ban-client status sshd => banned)" diff --git a/zadanie3/isp.sh b/zadanie3/isp.sh new file mode 100644 index 0000000..8b8975e --- /dev/null +++ b/zadanie3/isp.sh @@ -0,0 +1,155 @@ +#!/bin/bash +# ============================================================ +# ЗАДАНИЕ 3. Обратный прокси-сервер на ISP (Linux / РЕД ОС 8) +# 2. Реверс-прокси на nginx: +# web.au-team.irpo -> веб-приложение на HQ-SRV +# docker.au-team.irpo -> testapp на BR-SRV +# 3. Web-based аутентификация на web.au-team.irpo (WEB / P@ssw0rd) +# 4. HTTPS: сертификаты выдаёт ЦС на HQ-SRV (zadanie3/hq-srv.sh) и +# доставляются вручную (MANUAL.md) — после этого задайте +# TLS_CERT_FILE/TLS_KEY_FILE и запустите скрипт повторно. +# ВНИМАНИЕ: проброс 8080 с роутеров (задание 2) больше не основной +# путь — клиенты заходят через ISP по доменному имени на 80/443. +# ============================================================ + +# --- Проверка прав root --- +if [[ $EUID -ne 0 ]]; then + echo "Запустите скрипт с правами root (sudo bash isp.sh)" + exit 1 +fi + +# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= +NGINX_PACKAGE="nginx" # ПРОВЕРИТЬ: пакет reverse-proxy на РЕД ОС 8 +NGINX_SERVICE="nginx" +PROXY_CONF="/etc/nginx/conf.d/exam-proxy.conf" # перезаписывается целиком + +WEB_DOMAIN="web.au-team.irpo" # из таблицы 3 +DOCKER_DOMAIN="docker.au-team.irpo" # из таблицы 3 + +HQ_SRV_WEB="" # адрес:порт веб-приложения HQ-SRV, формат IP:порт (apache:80) +BR_SRV_APP="" # адрес:порт testapp на BR-SRV, формат IP:порт (8080) + +WEB_LOGIN="WEB" # логин web-аутентификации по заданию +WEB_PASS="P@ssw0rd" # пароль web-аутентификации по заданию +HTPASSWD_FILE="/etc/nginx/exam-web.htpasswd" + +# --- HTTPS (п. 4 задания 3): после ручной доставки сертификатов — заполнить --- +TLS_CERT_FILE="" # путь к сертификату на этом ISP (web/docker domain, SAN) +TLS_KEY_FILE="" # путь к связанному ключу + +EXAM_TZ="Europe/Moscow" # проверить на экзамене + +# ============ Проверка заполнения переменных ============ +MISSING=() +for NAME in HQ_SRV_WEB BR_SRV_APP EXAM_TZ; do + [[ -z "${!NAME}" ]] && MISSING+=("$NAME") +done +if [[ ${#MISSING[@]} -gt 0 ]]; then + echo "Заполните переменные в начале скрипта: ${MISSING[*]}" + exit 1 +fi + +echo "=== Обратный прокси на ISP ===" + +dnf install -y "$NGINX_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $NGINX_PACKAGE не установился" + +# --- 1. Файл с паролем web-аутентификации (htpasswd через openssl) --- +echo "--- Базовая аутентификация ($WEB_DOMAIN) ---" +PASS_HASH=$(openssl passwd -apr1 "$WEB_PASS") +printf "%s:%s\n" "$WEB_LOGIN" "$PASS_HASH" > "$HTPASSWD_FILE" +chmod 640 "$HTPASSWD_FILE" +echo "Записан $HTPASSWD_FILE (логин $WEB_LOGIN)" + +# --- 2. Конфигурация прокси --- +echo "--- Конфиг прокси ---" +if [[ -n "$TLS_CERT_FILE" && -n "$TLS_KEY_FILE" ]]; then + if [[ ! -f "$TLS_CERT_FILE" || ! -f "$TLS_KEY_FILE" ]]; then + echo "Ошибка: TLS_CERT_FILE/TLS_KEY_FILE указаны, но файлов нет!" + exit 1 + fi + cat > "$PROXY_CONF" < "$PROXY_CONF" < via <адрес HQ-RTR на линке>" +echo " ip route add <сеть офиса BR а/п> via <адрес BR-RTR на линке>" + +# --- 4. Часовой пояс --- +timedatectl set-timezone "$EXAM_TZ" + +echo "" +echo "=== Самопроверка на ISP ===" +echo "curl для проверки прокси (HTTP-режим, с аутентификацией):" +echo " curl -u $WEB_LOGIN:$WEB_PASS http://$WEB_DOMAIN -I" +echo " curl http://$DOCKER_DOMAIN -I" +echo "curl для режима HTTPS: замените http на https"