# ПРОВЕРКА ЗАДАНИЕ 3 — ISP: реверс-прокси, web-аутентификация # Проверяем через curl на самом ISP (nginx слушает 80/443 на всех # интерфейсах; доменные имена подставляем HOST-заголовком, т.к. # собственный DNS ISP про локальные записи не знает). # ============================================================ NAME="isp" LOG="check_${NAME}_z3.txt" OK=0; FAIL=0; SKIP=0 ok() { echo "[OK] $1"; OK=$((OK+1)); } fail() { echo "[FAIL] $1 — $2"; FAIL=$((FAIL+1)); } skip() { echo "[ПРОПУЩЕНО] $1"; SKIP=$((SKIP+1)); } check_var() { if [[ -z "${!2}" ]]; then skip "$1 — не задано $2"; return 1; fi; return 0; } expect_eq() { if [[ "$3" == "$2" ]]; then ok "$1"; else fail "$1" "ожидалось '$2', получено '$3'"; fi; } # ================= ПЕРЕМЕННЫЕ (заполните для проверки) ================= WEB_DOMAIN="web.au-team.irpo" # таблица 3 DOCKER_DOMAIN="docker.au-team.irpo" # таблица 3 WEB_LOGIN="WEB" # по заданию WEB_PASS="P@ssw0rd" # по заданию TLS_MODE="" # "https" — если прокси уже на 443, иначе пусто TLS_CERT_FILE="" # путь к сертификату на ISP (для пункта 4) main () { echo "=== Проверка задания 3: ISP (реверс-прокси) ===" # --- 1. Служба прокси --- if [[ "$TLS_MODE" == "https" ]]; then EXPECT_PORT="443" else EXPECT_PORT="80" fi if ss -tln 2>/dev/null | grep -q "80 "; then ok "сервер слушает порт 80" else fail "порт 80" "не слушает (nginx?)"; fi if [[ "$TLS_MODE" == "https" ]]; then if ss -tln 2>/dev/null | grep -q "443 "; then ok "сервер слушает порт 443 (TLS)" else fail "порт 443" "не слушает — TLS не настроен"; fi fi # --- 2. docker.au-team.irpo — открывается testapp (без пароля) --- check_var "docker-домен" DOCKER_DOMAIN && { CODE=$(curl -s -o /dev/null -w "%{http_code}" -H "Host: $DOCKER_DOMAIN" "http://127.0.0.1/" 2>/dev/null) if grep -qE "^(200|301|302)$" <<<"$CODE"; then ok "$DOCKER_DOMAIN: testapp отвечает ($CODE)" else fail "$DOCKER_DOMAIN" "ожидалось 200/301/302, получено '$CODE'"; fi; } # --- 3. web.au-team.irpo — аутентификация: 401 без пароля, 200 с паролем --- check_var "web-домен" WEB_DOMAIN && { CODE=$(curl -s -o /dev/null -w "%{http_code}" -H "Host: $WEB_DOMAIN" "http://127.0.0.1/" 2>/dev/null) if [[ "$CODE" == "401" ]]; then ok "$WEB_DOMAIN без пароля: 401 (требует аутентификации)" else fail "$WEB_DOMAIN без пароля" "ожидалось 401, получено '$CODE'"; fi CODE=$(curl -s -o /dev/null -w "%{http_code}" -u "$WEB_LOGIN:$WEB_PASS" -H "Host: $WEB_DOMAIN" "http://127.0.0.1/" 2>/dev/null) if grep -qE "^(200|301|302)$" <<<"$CODE"; then ok "$WEB_DOMAIN c $WEB_LOGIN:$WEB_PASS: $CODE" else fail "$WEB_DOMAIN с паролем" "ожидалось 200/301/302, получено '$CODE'"; fi; } # --- 4. TLS-сертификаты (для режима https) --- check_var "сертификат TLS" TLS_CERT_FILE && { if openssl x509 -in "$TLS_CERT_FILE" -noout 2>/dev/null; then ok "tls cert поднят: $TLS_CERT_FILE" else fail "TLS сертификат" "файл не читается: $TLS_CERT_FILE"; fi; } echo "" echo "=== Проверить вручную ===" echo " — браузер клиента: https://web.au-team.irpo (без предупреждений, ввод логина)" echo " — https://docker.au-team.irpo без предупреждений (снято на HQ-CLI/hq-cli.sh)" echo "" echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ===" [[ $FAIL -eq 0 ]] } main 2>&1 | tee "$LOG" STATUS=${PIPESTATUS[0]} echo "Лог сохранён: $LOG" exit $STATUS