NAT i firewall (iptables)
Scenariusz z życia
Serwer Linux ma dwie sieci: wewnętrzną (pracownicy) i zewnętrzną (internet). Ma pełnić rolę bramy: ruch z sieci wewnętrznej na zewnątrz ma być przekładany na jeden adres publiczny (NAT), a z zewnątrz do wewnątrz tylko wybrane usługi (np. przekierowanie portu 443 na wewnętrzny serwer WWW). Dodatkowo firewall (iptables lub nftables) — które porty są otwarte, co blokować.
Co się dzieje w systemie
NAT: IP forwarding włączony (kernel), iptables/nftables — MASQUERADE lub SNAT dla ruchu z sieci wewnętrznej wychodzącego na zewnątrz; DNAT/PREROUTING dla przekierowania portów z zewnątrz do wewnętrznego hosta. Firewall: łańcuchy INPUT (ruch do samego serwera), FORWARD (ruch przez serwer), OUTPUT; reguły ACCEPT/DROP. Domyślna polityka: DROP na INPUT, dozwolić tylko SSH, HTTP/HTTPS, ewentualnie ping.
Co administrator zyskuje
Jedna brama z kontrolą: kto wychodzi do internetu (NAT), co jest wystawione do świata (port forwarding, firewall). Minimalna powierzchnia ataku — tylko potrzebne porty otwarte.
Typowy błąd
Zablokować port 22 (SSH) przed dopisaniem reguły zezwalającej — utrata dostępu. Albo: zapomnieć o IP forward (sysctl net.ipv4.ip_forward=1). Albo: reguły w złej kolejności (np. DROP wszystkiego przed ACCEPT dla SSH). Albo: nie zapisać reguł (iptables-save, persistencja przy starcie) — po restarcie firewall wraca do domyślnego.
Myślenie administratora
Firewall: najpierw zezwól to, co potrzebne (SSH!), potem ogranicz resztę. Zawsze test z drugiej sesji przed blokowaniem. NAT: forward włączony, MASQUERADE na interfejsie zewnętrznym; DNAT dla portów, które mają iść do hostów wewnętrznych. Zapis reguł do pliku i skrypt przy starcie.
Zapamiętaj – 4 fakty praktyczne
- iptables/nftables: INPUT (do serwera), FORWARD (przez serwer), OUTPUT; ACCEPT/DROP w odpowiedniej kolejności.
- NAT: ip_forward=1; MASQUERADE/SNAT dla ruchu na zewnątrz; DNAT dla port forwarding do wewnątrz.
- Nie blokuj SSH (22) zanim nie masz innej drogi dostępu; testuj reguły z drugiej sesji.
- Zapisz reguły (iptables-save, np. do /etc/iptables.rules) i ładuj przy starcie — inaczej restart je wyczyści.