net/check/zadanie2/hq-rtr.sh

60 lines
2.6 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.

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