iptables je obslužný program v linuxovém uživatelském prostoru, který umožňuje správci systému konfigurovat pravidla filtrování IP paketů brány firewall v jádře Linuxu, implementovaná jako různé moduly Netfilter. Filtry jsou uspořádány v různých tabulkách, které obsahují řetězce pravidel pro zacházení s pakety síťového provozu. V současné době se pro různé protokoly používají různé moduly a programy jádra; iptables se vztahuje na protokol IPv4, ip6tables na IPv6, arptables na ARP a ebtables na ethernetové rámce.
Program iptables vyžaduje ke své činnosti zvýšená práva a musí být spuštěn uživatelem root, jinak nefunguje. Ve většině linuxových systémů je iptables nainstalován jako /usr/sbin/iptables a zdokumentován v manuálových stránkách, které lze po instalaci otevřít pomocí příkazu man iptables. Lze jej také nalézt v /sbin/iptables, ale protože iptables je spíše služba než „základní binární soubor“, preferovaným umístěním zůstává /usr/sbin.
Termín iptables se také běžně používá pro souhrnné označení komponent na úrovni jádra. x_tables je název jaderného modulu nesoucího sdílenou část kódu používanou všemi čtyřmi moduly, který také poskytuje API používané pro rozšíření; následně se Xtables víceméně používá pro označení celé architektury firewallu (v4, v6, arp a eb).
iptables nahradil ipchains; a nástupcem iptables je nftables, který byl vydán 19. ledna 2014 a byl začleněn do hlavní řady linuxového jádra ve verzi 3.13 jádra.
Obsah
Linux iptables firewall
Zobrazení pravidel řetězce INPUT
iptables -L INPUT --line-numbers -vn Chain INPUT (policy ACCEPT 4165K packets, 1200M bytes) num pkts bytes target prot opt in out source destination 1 1091 83749 f2b-dovecot tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 110,995,143,993,587,465,4190 2 110K 9353K f2b-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25 3 104K 5773K f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 2002 4 54363 2774K DROP all -- * * 0.0.0.0/0 0.0.0.0/0 -m geoip --source-country HK,CN,RU
Prví tři pravidla jak je patrné jsou automaticky vytvořené pomocí fail2ban. Čtvrté, poslední pravidlo je DROP vytvořené pomocí rozšíření netfilter xtables popsané v předešlém textu GeoIP Netfilter blokování.
Zobrazení všech existujících pravidel firewallu.
Chain INPUT (policy ACCEPT 4175K packets, 1204M bytes) .. Chain FORWARD (policy DROP 0 packets, 0 bytes) .. Chain OUTPUT (policy ACCEPT 5244K packets, 1935M bytes) .. Chain f2b-dovecot (1 references) .. Chain f2b-postfix-sasl (1 references) .. Chain f2b-sshd (1 references) .. Chain ufw-after-forward (0 references) .. Chain ufw-after-input (0 references) .. Chain ufw-after-logging-forward (0 references) .. Chain ufw-after-logging-input (0 references) .. Chain ufw-after-logging-output (0 references) .. Chain ufw-after-output (0 references) .. Chain ufw-before-forward (0 references) .. Chain ufw-before-input (0 references) .. Chain ufw-before-logging-forward (0 references) .. Chain ufw-before-logging-input (0 references) .. Chain ufw-before-logging-output (0 references) .. Chain ufw-before-output (0 references) .. Chain ufw-logging-allow (0 references) .. Chain ufw-logging-deny (2 references) .. Chain ufw-not-local (1 references) .. Chain ufw-reject-forward (0 references) .. Chain ufw-reject-input (0 references) .. Chain ufw-reject-output (0 references) .. Chain ufw-skip-to-policy-forward (0 references) .. Chain ufw-skip-to-policy-input (7 references) .. Chain ufw-skip-to-policy-output (0 references) .. Chain ufw-track-forward (0 references) .. Chain ufw-track-input (0 references) .. Chain ufw-track-output (0 references) .. Chain ufw-user-forward (1 references) .. Chain ufw-user-input (1 references) .. Chain ufw-user-limit (0 references) .. Chain ufw-user-limit-accept (0 references) .. Chain ufw-user-logging-forward (0 references) .. Chain ufw-user-logging-input (0 references) .. Chain ufw-user-logging-output (0 references) .. Chain ufw-user-output (1 references) ..
Jak přidat pravidlo firewalu?
Filtrovat TCP IP adresu 1.2.3.4 na vstupu portu 443 (webová stránka) lze pomocí zápisu pravidla:
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 443 -j DROP
(Přepínač -A zapíše pravidlo na konec řetězce INPUT)
Blokace IP adresního rozsahu 1.2.3.4/30 na všech portech, všechny protokoly + identifikační komentář
iptables -A INPUT -s 1.2.3.4/30 -j DROP -m comment --comment "Můj komentář - "
To samé jako v předešlém pravidlu ale s definovaným pořadím na řádku 5 (sekce INPUT)
iptables -I INPUT 5 -s 1.2.3.4/30 -j DROP -m comment --comment "Můj komentář - "
Pravidlo je zapsáno pomocí přepínače -I to znamená bude zapsáno na číslem definované číslo řádku.
Výkřičník (is not). Opak předešlého pravidla. Pravidlo neříká „když je <podmínka> ale jeho opak. To znamená „když není“ <! podmínka>.
iptables -I INPUT 5 ! -s 1.2.3.4/30 -j DROP -m comment --comment "Můj komentář - "
Zobrazení číslovaného obsahu INPUT řetězce iptables, ve kterém jsme okrem jiného i v předešlém kroku zapsána IP adresu 1.2.3.4
iptables -L INPUT --line-numbers -vn
Odstranění pravidla blokujícího IP adresu 1.2.3.4 která je dle předešlého vyýpisu umístěna na v řetězci INPUT na pozici 5
iptables -D INPUT 5
Základní pravidlo
Přidáním pravidla pro akceptování pouze RELATED a ESTABLISHED paketů vytvoříme první a základní pravidlo firewallu
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
V případe, že používáte fail2ban je vhodné přidat uvedené pravidlo jako první
iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Jak uložit / obnovit pravidla
Pravidla po restratu serveru „zmizí“. Pokud chcete konfiguraci zachovat je důležité použít automatickou funkci iptables-persistent nebo vše uložit a po restartu znovu manuálne načíst.
mkdir /etc/iptables iptables-save > /etc/iptables/pravidla.v4 iptables-restore < /etc/iptables/pravidla.v4
Uložit libovolný soubor s časovým razítkem lze přidáním
iptables-save > /etc/iptables/pravidla.v4_`date +\%d-\%m-\%Y_\%H\%M`
Odinstalace UFW
UFW (Uncomplicated firewall) lze odinstalovat příkazem
apt autoremove ufw
Příkaz ale neodstraní řetězce z konfigurace IPtables. Ty lze deaktivovat a umazat pomocí awk
for ufw in `iptables -L |grep ufw|awk '{ print $2 }'`; do iptables -F $ufw; done for ufw in `iptables -L |grep ufw|awk '{ print $2 }'`; do iptables -X $ufw; done
Packet flow vizualizace

Užitečné
Domovská stránka netfilter iptables na GitHub.