Iptables
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
- http://wiki.ubuntu.cz/bezpečnost/firewall/iptables – poměrně dobrý a aktuální návod pro začátečníky dobře doplňující předešlé informace na této stránce.
- http://www.linuxexpres.cz/praxe/sprava-linuxoveho-serveru-linuxovy-firewall-zaklady-iptables-2 – další dobrý a aktuální návod doplňující předešlé informace na této stránce.