První generace byla vyvinuta v roce 1988 v Digital Equipment Corporation jako bezstavový firewall. Tento typ filtrování bere jednotlivé pakety a zkoumá jejich obsah. Neřeší zda jsou pakety součástí nějakého datového toku. Rozhoduje pouze na základě obsahu paketu a protokolu (TCP, UDP).
Prohlížejí pakety na 1 - 4 vrstvě OSI modelu a na základě pravidel definovaných uživatelem buď paket zahodí přijmou nebo ho změní.
Zaměřují se na jednotlivé protokoly (ftp, http ....) 7 vrstva OSI modelu.
Stroj, který dělá prostředníka v komunikaci.
Nejčastější použití:
Slouží k ochraně sítě za firewallem a umožňuje využít jednu IP adresu pro více počítačů. Skrytí fyzické adresy slouží jako ochrana před útočníkem.
Netfilter je framework, který umožňuje manipulovat se síťovými pakety. Projekt Netfilter začal Rusty Russell (autor ipchains: předchůdce netfiltru) v roce 1998. V roce 2000 ho začlenil do Linuxového jádra 2.3. Úplně prvním frameworkem pro manipulaci s pakety byl projekt ipfwadm v jádře 2.0. Tento projekt vycházel z ipfw na BSD. Tyto starší projekty mohly manipulova s pakety, ale nemohly je kontrolovat jejich tok.
Iptables je aplikace, která běží v uživatelském prostoru a umožňuje nastavovat moduly netfiltru. Pro používání iptables je potřeba mí práva root.
Iptables zachovávají stejné postupy jako jejich předchůdci (ipfw, ipfwadm) a pravidla řadí do seznamů. Každé pravidlo v se seznamu říká co udělat s paketem, který splňuje požadavky, které jsou v pravidlu specifikované. Dále rozšiřuje myšlenku ipchains, které zavedlo řetězce pro manipulace s pakety a implementuje tabulky (např. tabulku NAT, FILTER atd.). Díky tomuto rozdělení mohou iptables znát stav spojení jednotlivých paketů. Budoucnost vývoje projektu je buď v projektu nftables nebo Xtables2 a nebo úplně někde jinde :).
Paket prochází postupně sadou pravidel a tabulek. Každá tabulka je spojená s jinou částí zpracování paketu.
Paket prochází pravidla postupně v pořadí ve, kterém byla zadána.
V iptables je pět předdefinovaných zřetětzení (chains).
PREROUTING
Toto zřetětzení hodnotí paket ještě před tím než se rozhoduje o směrování.
INPUT
Pokud je paket určen pro lokální doručení pak skončí zde.
FORWARD
Všechny pakety, které byly směrovány a nejsou určeny pro lokální doručení patří sem.
OUTPUT
Pakety odeslané z počítače prochází tudy.
POSTROUTING
Toto je poslední zřetětzení, kterým pakety prochází při odchodu z počítače.
Na tyto zřetětzení se vztahuje základní pravidlo. Administrátor může dodefinovat zřetětzení kolik chce, ale základní pravidlo na ně neplatí.
Všechny pakety musí projít přes tři tabulky.
První je tabulka MANGLE. Tato tabulka slouží k označování paketů za účelem QOS.
Druhá tabulka je FILTER.
Tabulka filter:
Třetí tabulka je tabulka NAT.
Tabulka nat:
Obecné kritéria pro výběr paketů | ||
---|---|---|
-t | table | filter, nat, mangle |
-j | target | skočí na cílové pravidlo |
-A | přidá pravidlo do zřetězení. | |
-F | smaže pravidla z vybrané tabulky. | |
-p | protocol | typ protokol (icmp, tcp, udp ....) |
-s | ip-address | zdrojová adresa. |
-d | ip-address | cílová adresa |
-i | interface-name | jméno vstupního rozhraní |
-o | interface-name | jméno výstupního rozhraní |
iptables -A INPUT -i eth0 -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT -A INPUT - přidat pravidlo do řetězce INPUT -i eth0 - paket přijde rozhraním eth0 -s 10.0.0.1 - paket má zdrojovou IP adresu 10.0.0.1 -p tcp - protokol tcp --dport 22 - port 22 -j ACCEPT - akceptuj tento paket
iptables -L -n -v -L vypíše tabulku -n nebude vyhledávat jména pro IP adresy -v vypíše víc informací Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 58276 70M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 6 539 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 1424 174K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 39588 packets, 5709K bytes) pkts bytes target prot opt in out source destination
iptables -A ... přidá pravidlo iptables -D ... vymaže pravidlo iptables -I ... vloží - 1 - výchozí - na začátek iptables -F ... vymaže pravidlaSmazání pravidel:
$IPTABLES -F $IPTABLES -F -t natNastavení výchozích politik:
$IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROPVytváření nových řetězců
iptables -N tcp_segmenty iptables -A INPUT -p TCP -i eth0 -j tcp_segmenty iptables -A tcp_segmenty -p TCP --dport 80 -j ACCEPT iptables -A tcp_segmenty -p TCP --dport 25 -j ACCEPT
Iptables požadují, aby pro některé funkce byli do jádra nahrány potřebné moduly.
# Modul pro stavový FW modprobe ip_conntrack # Modul, aby bylo možné použí aktivní ftp modprobe ip_conntrack_ftp # Modul umožňující použití nat modprobe iptable_nat # Module pro aktivní FTP za NATem modprobe ip_nat_ftp
# Ochrana proti Spoofingu net/ipv4/conf/all/rp_filter = 1 #Loguje pakety se poškozenými IP net/ipv4/conf/all/log_martians = 1 # Ochrana proti DOS net/ipv4/tcp_syncookies = 1 # Zakáže odpovídat na broadcast icmp net/ipv4/icmp_echo_ignore_broadcasts = 1 # Povolí routing net/ipv4/ip_forward = 1