Iptables puust ja punaseks
Toores. Ehk seda pala võib täiendada.
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
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.
Ahelates olevaid reegleid näeb käsuga:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Selline pilt näitab, et mingeid reegleid hetkel pole kehtestatud.
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 6881 pordile ühenduse
iptables -A INPUT -p tcp --dport 6881 -j ACCEPT
Või lubame kohe terve portide vahemiku
iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT
Teisisõnu blokeerib antud reegel kogu sissetuleva võrguliikluse eth0 võrguliidesel.
Allow loopback traffic!
iptables -I INPUT 1 -i lo -j ACCEPT
Logging. This will log dropped packets to syslog:
iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix \ "iptables denied: " --log- level 7
Accept packets from trusted IP addresses
iptables -A INPUT -s 192.168.0.4 -j ACCEPT # change the IP address as appropriate
Viimast rida võib paranoiline olles veelgi täiendada näitens nii MAC aadressiga
iptables -A INPUT -s 192.168.0.4 -m mac --mac-source 00:50:8D:FD:E6:32 -j ACCEPT
Eelmise peatüki jätkuna lihtne tulemüür serverile
Kui tavalisele lauaarvutile võib kirjutada tulemüüri lihtsalt:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
Siis server vajab juba keerukamat lähenemist
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
iptables -A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
iptables -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
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
Ahelad ja tabelid
TODO
Lähme süviti keerukamaks
hetkel tulemüürile teada olevate seansside tabel asub /proc/net/ip_conntrack Custom Chains iptables also allows you to create custom chains, which can then be specified as a target to jump to. For example, you could create a so-called whitelist for trusted IP address, and a blacklist for evil nodes on the Internet. To create the chains, you would give the following commands:
iptables -N whitelist iptables -N blacklist
To add a rule to these chains (or any other chain), use:
iptables -A whitelist -s 192.168.0.0/24 -j ACCEPT iptables -A blacklist -s 207.46.130.0/24 -j DROP iptables -A blacklist -s 207.46.250.0/24 -j DROP
Then, specify these chains as a target in your INPUT, FORWARD and/or OUTPUT chain:
iptables -A INPUT -j whitelist iptables -A INPUT -j blacklist iptables -A OUTPUT -j whitelist iptables -A OUTPUT -j blacklist iptables -A FORWARD -j whitelist iptables -A FORWARD -j blacklist
Suppose there is a webserver in the SOHO Network, which must be available to the public (the Internet) as well as the clients on the LAN. This means you need to forward all requests to ROUTER B, port 80 to the webserver (suppose this webserver is at 192.168.2.20):
# iptables -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.2.20
Serveri ja kliendi vahelise ühenduse loomine
Client Server ------ ------- SYN------------------------> <---------------------SYN-ACK ACK------------------------> Mõlemapoolne ühendus loodud
- https://wiki.itcollege.ee/index.php/Iptables
- https://help.ubuntu.com/community/IptablesHowTo
- http://math.ut.ee/~mroos/turve/praks/iptables.html
- http://www.linode.com/wiki/index.php/Netfilter_IPTables_Mini_Howto
- http://www.dd-wrt.com/wiki/index.php/Iptables
- http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html