Iptables puust ja punaseks
Sisukord
Mis see on?
Iptables on töövahend linuxi kernelisse ehitatud filtreerimismehanismi kasutamiseks.
Kernel ja moodulid
Iptablesi kasutamiseks peavad olema laetud vastavad kerneli moodulit. Näiteks kui soovime kasutada enda reeglites LOG, REJECT ja MASQUERADE targeteid (ja need pole kernelisse kompileeritud), peame laadima järgnevad moodulid.
# /sbin/insmod ipt_LOG # /sbin/insmod ipt_REJECT # /sbin/insmod ipt_MASQUERADE
Iptablesi moodulid, koos kirjeldustega, leiab siit lingilt http://www.tummy.com/journals/entries/jafo_20050717_164535
Laaditud iptablesi moodulid leiab failist /proc/net/ip_tables_matches
# cat /proc/net/ip_tables_matches helper limit state udplite udp tcp icmp
Paigaldatud netfilteri mooduleid näeb käsuga
# ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter
Ahelad ja reeglid
Iptablesi üheks olulisemaks punktiks on ahelad (chains). Pakett liigub mööda ahelaid seni kuni mõni reegel ühildub paketiga. Näiteks lubab selle või kustutab.
Lihtsustatult on olemas kaks peamist ahelat mida paketid läbivad INPUT ja OUTPUT. Tegelikult juba nagu ülemiselt skeemilt näha on peamisi ahelaidki veel. Näiteks Prerouting ja Postrouting, mis rakenduvad enne ja peale ruutingu otsuse tegemist (lisaks saab ahelaid ka ise juurde luua). Aga hetkel lihtsustamise mõttes vaatleme vaid kahte.
Igal ahelaga saab siduda reegleid. Näiteks tekitame järgneva reegli:
iptables -A INPUT -i eth0 -j REJECT
See reegel on seotud INPUT ahelaga (ehk sissetulevad paketid) ja kehtib ainult pakettide kohta, mis tulevad eth0 võrguliidesele. Lisaks ütleb, et need paketid lükatakse tagasi.
Lubame SSH ühenduse
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
Teisisõnu blokeerib antud reegel kogu sissetuleva võrguliikluse eth0 võrguliidesel.
Eelmise peatüki jätkuna lihtne tulemüür serverile
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
hetkel tulemüürile teada olevate seansside tabel asub /proc/net/ip_conntrack
Kasutatud: http://math.ut.ee/~mroos/turve/praks/iptables.html