60 lines
2.6 KiB
Bash
60 lines
2.6 KiB
Bash
#!/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
|