#!/bin/bash # ============================================================ # ПРОВЕРКА ЗАДАНИЯ 2 — HQ-RTR: статический проброс портов (DNAT) # 8080 -> веб-приложение на HQ-SRV, 2027 -> SSH HQ-SRV # (только читает состояние; iptables требует root) # ============================================================ NAME="hq-rtr" LOG="check_${NAME}_z2.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)); } root_or_skip() { if [[ $EUID -ne 0 ]]; then skip "$1 (нужен root)"; return 1; fi; return 0; } check_var() { if [[ -z "${!2}" ]]; then skip "$1 — не задано $2"; return 1; fi; return 0; } # ================= ПЕРЕМЕННЫЕ (заполните для проверки) ================= HQ_SRV_IP="" # адрес HQ-SRV (без префикса) WEB_APP_PORT="80" # порт apache на HQ-SRV (как в настройке) SSH_PORT="2027" # порт ssh на HQ-SRV main () { echo "=== Проверка задания 2: HQ-RTR (DNAT) ===" if root_or_skip "правила DNAT (iptables)"; then NAT=$(iptables -t nat -S PREROUTING 2>/dev/null) check_var "адрес HQ-SRV" HQ_SRV_IP && { if grep -qF "DNAT --to-destination $HQ_SRV_IP:$WEB_APP_PORT" <<<"$NAT" \ || grep -qF "DNAT --to $HQ_SRV_IP:$WEB_APP_PORT" <<<"$NAT"; then ok "проброс 8080 -> $HQ_SRV_IP:$WEB_APP_PORT" else fail "проброс 8080" "нет DNAT строки в: $NAT"; fi } check_var "адрес HQ-SRV" HQ_SRV_IP && { if grep -qF "DNAT --to-destination $HQ_SRV_IP:$SSH_PORT" <<<"$NAT" \ || grep -qF "DNAT --to $HQ_SRV_IP:$SSH_PORT" <<<"$NAT"; then ok "проброс 2027 -> $HQ_SRV_IP:$SSH_PORT" else fail "проброс 2027" "нет DNAT строки в: $NAT"; fi } POLICY=$(iptables -S FORWARD 2>/dev/null | head -1) if grep -q "policy" <<<"$POLICY"; then echo "[ИНФО] $POLICY" SKIP=$((SKIP+1)) fi fi echo "" echo "=== Проверить вручную ===" echo " — с ISP: curl -I http://<адрес HQ-RTR на линке>:8080 (доступ к веб-приложению извне)" echo " — с ISP: nc -zv <адрес HQ-RTR на линке> 2027" echo "" echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ===" [[ $FAIL -eq 0 ]] } main 2>&1 | tee "$LOG" STATUS=${PIPESTATUS[0]} echo "Лог сохранён: $LOG" exit $STATUS