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