iptables to klasyczne narzędzie do konfiguracji firewalla w Linuksie, działające w przestrzeni jądra na frameworku netfilter. Decyduje, które pakiety wpuścić, które odrzucić, a które przepisać (NAT). Reguły układasz w łańcuchach (INPUT, OUTPUT, FORWARD) wewnątrz tabel (filter, nat, mangle). Jeśli kiedykolwiek blokowałeś port, ustawiałeś przekierowanie portu albo zastanawiałeś się, czemu nagle nie wchodzisz na serwer po SSH, to właśnie tutaj zaczyna się zabawa.
Składnia i najważniejsze opcje
Podstawowy schemat polecenia wygląda tak:
iptables [-t tabela] -A ŁAŃCUCH -p proto --dport port -j AKCJA
-L— wypisuje reguły w łańcuchu (lub wszystkie). Dodaj-n, żeby nie czekać na rozwijanie nazw, i-vdla szczegółów.-A— dopisuje regułę na koniec łańcucha (append).-I— wstawia regułę na początek lub na podaną pozycję (-I INPUT 1). Kolejność ma znaczenie, bo pierwsza pasująca wygrywa.-D— usuwa regułę (przez jej treść albo numer).-p— protokół:tcp,udp,icmp.--dport— port docelowy (wymaga-p tcplub-p udp).-j— cel (jump):ACCEPT,DROP,REJECT,LOG.-P— ustawia domyślną politykę łańcucha (np.-P INPUT DROP).-F— czyści wszystkie reguły w łańcuchu.
Przykłady użycia
iptables -L -n -v — pokazuje wszystkie reguły z licznikami pakietów, bez rozwiązywania nazw DNS (szybko i czytelnie).
iptables -A INPUT -p tcp --dport 22 -j ACCEPT — przepuszcza ruch przychodzący na port 22 (SSH). Tę regułę dodaj zanim ustawisz politykę na DROP.
iptables -A INPUT -p tcp --dport 80 -j DROP — po cichu odrzuca pakiety na port 80. Nadawca nic się nie dowie, połączenie po prostu wisi.
iptables -D INPUT -p tcp --dport 80 -j DROP — usuwa dokładnie tę regułę, którą wyżej dodałeś.
iptables -P INPUT DROP — zamyka wszystko, czego wcześniej jawnie nie dopuściłeś. Klasyczne podejście „domyślnie zabronione”.
Częste błędy i pułapki
Największy klasyk: ustawiasz iptables -P INPUT DROP na zdalnym serwerze, nie dodawszy wcześniej reguły dla SSH — i wylatujesz z sesji bez powrotu. Zawsze najpierw przepuść port 22, dopiero potem zamykaj resztę.
Druga pułapka: reguły iptables nie przeżywają restartu. Po reboocie znikają, jeśli nie zapiszesz ich przez iptables-save i nie wczytasz przy starcie (np. netfilter-persistent albo iptables-restore).
Pamiętaj też, że iptables (IPv4) i ip6tables (IPv6) to dwa osobne zestawy reguł — zablokowanie portu w jednym nie rusza drugiego. Na nowszych dystrybucjach (Debian, RHEL, Ubuntu) iptables bywa już tylko nakładką na nftables, więc składnia działa, ale pod spodem mieszka nft.
Powiązane polecenia: nft, iptables-save, iptables-restore, ip6tables, ufw, firewall-cmd, nmap.