Iptables

Z HelpDesk

Iptables je paketový filter. Stejně jako u většiny paketových filtrů je i zde filtrace paketů založena na

  • Typu protokolu - TCP, UDP, ICMP
  • Zdrojová adresa - počítač odesílající data
  • Cílová adresa - počítač přijímající data
  • Další členění protokolu - např. příznak "SYN" u TCP, nebo typ ICMP (echo-request, echo-reply, ...)

Kromě výše uvedených kritérií umožňuje firewall iptables filtraci založenou na stavu, tj. může fungovat také jako stavový firewall.

Podrobnosti o projektu jsou uvedeny na stránkách http://www.netfilter.org/.

Získání instalačního balíčku

Instalace

Firewall iptables je snadno dostupný (balíček iptables v APT) a snadno konfigurovatelný. Případně lze instalační balíček také získat na stránkách projektu http://www.netfilter.org/. Pro IPv6 použijte balíček ip6tables.

Konfigurace IPv4

Konfigurace pracovních stanic se může lišit podle potřeb uživatelů. Následující přehled příkazů umožní snadno vytvořit konfiguraci šitou na míru.

Před přidáváním pravidel zrušte stávající konfiguraci firewallu, např. v OS Debian GNU/Linux pomocí příkazu /etc/init.d/iptables clear. Nemáte-li ve své distribuci tento skript, použijte informace ze sekce Vyčištění konfigurace.

Základní konfigurace umožňující pouze komunikaci na adrese 127.x.x.x (loopback), komunikaci iniciovanou pracovní stanicí, komunikaci příbuznou (tj. již navázané spojení se domluví na komunikaci na jiném portu) a odpověď na ICMP. Ostatní příchozí provoz bude blokován a příslušné pakety zahozeny (DROP).

$ iptables -P INPUT DROP
$ iptables -N BASE
$ iptables -A INPUT -j BASE
$ iptables -A BASE -i lo -s 127.0.0.0/255.0.0.0 -j ACCEPT
$ iptables -A BASE -m state --state RELATED,ESTABLISHED -j ACCEPT
$ iptables -A BASE -p tcp -m tcp --dport 113 -j REJECT --reject-with icmp-port-unreachable
$ iptables -A BASE -p icmp -j ACCEPT

Potřebujete-li používat ssh (port 22), k příkazům ještě přibudou následující příkazy. Pro přístup ze stroje, který je mimo doménu ZČU, je ssh blokováno a je potřeba využít veřejných serverů (eryx).

$ iptables -N SHELL
$ iptables -A INPUT -s 147.228.0.0/255.255.0.0 -j SHELL
$ iptables -A SHELL -p tcp -m tcp --dport 22 -j ACCEPT

Pro přístup k AFS je třeba přidat příkazy (k novým jádrům řady 2.6 to již není třeba díky vylepšenému Netfilteru):

$ iptables -N OPENAFS
$ iptables -A INPUT -j OPENAFS
$ iptables -A OPENAFS --proto udp --dport 7000:7010 -j ACCEPT
$ iptables -A OPENAFS --proto udp --sport 7000:7010 -j ACCEPT

Pro podporu protokolu ftp je třeba mít v jádře zajištěnou podporu modulem ip_conntrack_ftp (v OS Debian GNU/Linux příkazem modprobe ip_conntrack_ftp).

Nakonec je nutné výslednou konfiguraci uložit např. v OS Debian GNU/Linux nebo Ubuntu Linux příkazem iptables-save > /root/iptables-active.conf. Obnovení konfigurace se v případě potřeby provede příkazem iptables-restore /root/iptables-active.conf. Případné nejasnosti je vhodné konzultovat s dokumentací k balíčku iptables (/usr/share/doc/iptables/README.Debian.gz).

Konfigurace IPv6

Konfigurace IPv6 pravidel je v podstatě totožná jako pro IPv4, pouze použijeme pro jejich ovládání příkaz ip6tables místo iptables.

Základní konfigurace umožňující pouze komunikaci na adrese ::1 (loopback), komunikaci iniciovanou pracovní stanicí, komunikaci příbuznou (tj. již navázané spojení se domluví na komunikaci na jiném portu) a odpověď na ICMP. Ostatní příchozí provoz bude blokován a příslušné pakety zahozeny (DROP).

$ ip6tables -P INPUT DROP
$ ip6tables -N BASE
$ ip6tables -A INPUT -j BASE
$ ip6tables -A BASE -i lo -s ::1/128 -j ACCEPT
$ ip6tables -A BASE -m state --state RELATED,ESTABLISHED -j ACCEPT
$ ip6tables -A BASE -p tcp -m tcp --dport 113 -j REJECT --reject-with icmp6-port-unreachable
$ ip6tables -A BASE -p ipv6-icmp -j ACCEPT

Potřebujete-li používat ssh (port 22), k příkazům ještě přibudou následující příkazy. Pro přístup ze stroje, který je mimo doménu ZČU, je ssh blokováno a je potřeba využít veřejných serverů (eryx).

$ ip6tables -N SHELL
$ ip6tables -A INPUT -s 2001:718:1801::/48 -j SHELL
$ ip6tables -A SHELL -p tcp -m tcp --dport 22 -j ACCEPT

Pro přístup k AFS je třeba přidat příkazy (k novým jádrům řady 2.6 to již není třeba díky vylepšenému Netfilteru):

$ ip6tables -N OPENAFS
$ ip6tables -A INPUT -j OPENAFS
$ ip6tables -A OPENAFS --proto udp --dport 7000:7010 -j ACCEPT
$ ip6tables -A OPENAFS --proto udp --sport 7000:7010 -j ACCEPT

Pro podporu protokolu ftp je třeba mít v jádře zajištěnou podporu modulem ip_conntrack_ftp (v OS Debian GNU/Linux pomocí příkazu modprobe ip_conntrack_ftp).

Nakonec je nutné výslednou konfiguraci uložit např. v OS Debian GNU/Linux nebo Ubuntu Linux příkazem iptables-save > /root/ip6tables-active.conf. Obnovení konfigurace se v případě potřeby provede příkazem ip6tables-restore /root/ip6tables-active.conf. Případné nejasnosti je vhodné konzultovat s dokumentací k balíčku ip6tables (/usr/share/doc/iptables/README.Debian.gz).

Vyčištění konfigurace

Upozornění: konfigurujete-li počítač vzdáleně, spusťe uvedené příkazy najednou (ve skriptu), jinak si k počítači odříznete spojení.

Různé linuxové distribuce řeší skripty pro nastavení iptables jiným způsobem. V rozšířených distribucích Debian a Ubuntu postupem času vymizely skripty umožňující "zrušení" všech iptables. Lze to ale jednoduše napravit. Potřebujete-li vypnout všechna pravidla a nechat počítač úplně nechráněný, stačí (ručně nebo ve skriptu) spustit následující sekvenci příkazů pro IPv4:

iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Pro IPv6 je to stejné, pouze použijeme jiný příkaz na jejich ovládání:

ip6tables -F
ip6tables -X
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT

Odkazy