net/check/zadanie3/isp.sh

74 lines
4.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ПРОВЕРКА ЗАДАНИЕ 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