#!/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"