Erinevus lehekülje "Iptables puust ja punaseks" redaktsioonide vahel
(→Kernel ja moodulid) |
(→Ahelad) |
||
86. rida: | 86. rida: | ||
See reegel kustutab armutult kõik FORWARD ahelasse saabunud ja teatud | See reegel kustutab armutult kõik FORWARD ahelasse saabunud ja teatud | ||
võrku suunduvad paketid. | võrku suunduvad paketid. | ||
+ | |||
+ | '''Uute ahelate loomine'''' | ||
Võimalik on luua ka täiesti uusi ahelaid ning siduda neid omakorda erinevate tabelitega. Kui tabel pole määratud kasutatakse automaatselt FILTER tabelit. | Võimalik on luua ka täiesti uusi ahelaid ning siduda neid omakorda erinevate tabelitega. Kui tabel pole määratud kasutatakse automaatselt FILTER tabelit. | ||
104. rida: | 106. rida: | ||
/sbin/iptables -A INPUT -j LOGDROP | /sbin/iptables -A INPUT -j LOGDROP | ||
+ | |||
+ | |||
+ | Accept lubamine. Edasi ei uurita. Näiteks lubame INPUT ahelast 80nendatel veebipordile ühenduste tegemise | ||
+ | |||
+ | iptables -A INPUT -p tcp --dport 80 -j '''ACCEPT''' | ||
+ | |||
+ | DROP Blokeerimine. Edasi ei uurita. Keelustame näiteks kõik sissetulevad paketid | ||
+ | |||
+ | iptables -A INPUT -j '''DROP''' | ||
+ | |||
+ | LOG Logitakse sellele reeglile vastamine ja iptables jätkab reeglite uurimist | ||
+ | |||
+ | If you would like to log dropped packets to syslog, this would be the quickest way: | ||
+ | |||
+ | # iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " -- log-level 7 | ||
+ | |||
+ | DROP everything and Log it | ||
+ | iptables -A INPUT -j '''LOG''' --log-level 4 | ||
+ | iptables -A INPUT -j DROP | ||
+ | |||
+ | REJECT Blokeerimine. Saatjale edastatakse vastus, et pakett blokeeriti (näiteks icmp-host-prohibited) | ||
+ | |||
+ | *DNAT – saaja aadress muutmine | ||
+ | |||
+ | *SNAT – saatja aadressi muutmine | ||
+ | |||
+ | MASQUERADE Enable IP forwarding between the interfaces - remember to disable this if you're going to unload the Iptables rules. | ||
+ | |||
+ | # echo "1" > /proc/sys/net/ipv4/ip_forward | ||
+ | |||
+ | Load the NAT modules - needed only if you compiled as modules | ||
+ | |||
+ | # modprobe iptable_nat | ||
+ | |||
+ | Saatja aadress muudetakse tulemüüri omaks. Näiteks kasutame seda, et | ||
+ | ühendada LAN internetiga: | ||
+ | |||
+ | # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE | ||
+ | |||
+ | *-t nat Valime tabeli nat. | ||
+ | *-A POSTROUTING Kasutame postrouting ahelat | ||
+ | *-o eth1 reegel kehtib pakettidele mis väljuvad teiselt interfacelt (-o tähendab output) | ||
+ | *-j MASQUERADE Saatja aadress asendatakse ruuteri aadressiga. | ||
+ | |||
+ | For static IP, it's recommended that you use source NAT instead. Enable source NAT - Use if your eth0 has a static IP address. | ||
+ | |||
+ | # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to ip_address_of_eth0 | ||
+ | |||
+ | *chain - Send the packet to another chain for further processing. If that chain’s rules fail to match the packet, then processing will continue with the next rule in the current chain. (See also RETURN target.) | ||
+ | |||
+ | *MARK - Used with the iproute2 and the tc command for advanced routing and traffic shaping. | ||
+ | |||
+ | *REDIRECT | ||
+ | Transparent proxying: local net at eth0, proxy server at port 8080) | ||
+ | iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \ | ||
+ | -j REDIRECT --to-ports 8080 | ||
+ | |||
+ | *RETURN - This is the default target at the end of a user-defined chain. It means to return to the next rule in the parent chain. | ||
+ | |||
+ | 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 | ||
===Kernel ja moodulid=== | ===Kernel ja moodulid=== |
Redaktsioon: 17. august 2011, kell 12:07
Toores. Ehk seda pala võib täiendada.
Sisukord
Mis see on?
Iptables on töövahend linuxi kernelisse ehitatud filtreerimismehanismi kasutamiseks. Kokku koosneb iptables niisiis kahest osast. Kerneli moodulitest ning käsurea utiliidist.
Iptables koosneb kolme tüüpi objektidest:
- Reeglid (Rules)
- Ahelad (Chains)
- Tabelid (Tables)
Tabelid
Paketid liiguvad läbi tabelite ning ahelate ning seejärel neile omakorda rakendatakse reegleid.
Kõik ahelad kasutavad ühte või teist tabelit. Kui tabel pole määratud võetakse vaikimisi FILTER tabel.
Iptables sisaldab kolme põhitabelit:
filter table
Seda tabelit kasutatakse pakettide filtreerimiseks läbi tulemüüri. Eesmärgiks on puhtalt pakettide filtreerimine. Näiteks sissetulevate pakettide (incoming), väljuvate pakettide (outgoing) ja pakettide mis on edastatud võrgukaartide vahel (filtering).
See tabel on seotud kolme ahelaga:
- INPUT ahel - Sisenevate pakettide filtreerimine
- OUTPUT ahel - Väljuvate pakettide filtreerimine
- FORWARD ahel - Võrgukaartide vahel edasi suunatud pakettide filtreerimine
nat table Seda tabelit kasutatakse IP muutmiseks.
- PREROUTING chain - Kasutatakse IP aadressi muutmiseks enne paketi edastamist
- POSTROUTING chain - Kasutatakse IP muutmiseks peale paketi edastamist
- OUTPUT chain - Väljuvate ühenduste filtreerimiseks
mangle Leiab kasutamist pakettide päiste ja QoS bittide modifitseerimiseks
Tabelite sisu näeb järgnevate käsuga iptables -f <tabelinimi> -L. Näiteks:
# iptables -t filter -L
või
# iptables -t nat -L
Ahelad
Ahel kujutab endast objekti mis on seotud mingi tabeliga ning millele on omakorda kirjutatud peale hulk erinevaid reegleid.
Masinasse sisenenud oakett liigub mööda ahelaid ülevalt alla seni kuni mõni reegel ühildub paketiga. Näiteks lubab selle või kustutab.
Vaatleme esialgu ahelaid FILTER tabelis. Ehk siis ahelaid INPUT, OUTPUT JA FORWARD.
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. Reject tähendab, et keeldutakse paketist ja antakse sellest ka paketi saatjale teada.
Või keelustame ligipääsu teatud võrgule:
iptables -I FORWARD -s 192.168.2.0/255.255.255.0 -j DROP
See reegel kustutab armutult kõik FORWARD ahelasse saabunud ja teatud võrku suunduvad paketid.
Uute ahelate loomine'
Võimalik on luua ka täiesti uusi ahelaid ning siduda neid omakorda erinevate tabelitega. Kui tabel pole määratud kasutatakse automaatselt FILTER tabelit.
Loome ahela nimega LOGDROP
/sbin/iptables -N LOGDROP
Lisame sinna ahelasse, et sealsed paketid logitakse
/sbin/iptables -A LOGDROP -j LOG
Ning seejärel kustutatakse
/sbin/iptables -A LOGDROP -j DROP
Seome meieloodud ahela nüüd omakorda INPUT ahelaga
/sbin/iptables -A INPUT -j LOGDROP
Accept lubamine. Edasi ei uurita. Näiteks lubame INPUT ahelast 80nendatel veebipordile ühenduste tegemise
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
DROP Blokeerimine. Edasi ei uurita. Keelustame näiteks kõik sissetulevad paketid
iptables -A INPUT -j DROP
LOG Logitakse sellele reeglile vastamine ja iptables jätkab reeglite uurimist
If you would like to log dropped packets to syslog, this would be the quickest way:
# iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " -- log-level 7
DROP everything and Log it
iptables -A INPUT -j LOG --log-level 4 iptables -A INPUT -j DROP
REJECT Blokeerimine. Saatjale edastatakse vastus, et pakett blokeeriti (näiteks icmp-host-prohibited)
- DNAT – saaja aadress muutmine
- SNAT – saatja aadressi muutmine
MASQUERADE Enable IP forwarding between the interfaces - remember to disable this if you're going to unload the Iptables rules.
# echo "1" > /proc/sys/net/ipv4/ip_forward
Load the NAT modules - needed only if you compiled as modules
# modprobe iptable_nat
Saatja aadress muudetakse tulemüüri omaks. Näiteks kasutame seda, et ühendada LAN internetiga:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
- -t nat Valime tabeli nat.
- -A POSTROUTING Kasutame postrouting ahelat
- -o eth1 reegel kehtib pakettidele mis väljuvad teiselt interfacelt (-o tähendab output)
- -j MASQUERADE Saatja aadress asendatakse ruuteri aadressiga.
For static IP, it's recommended that you use source NAT instead. Enable source NAT - Use if your eth0 has a static IP address.
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to ip_address_of_eth0
- chain - Send the packet to another chain for further processing. If that chain’s rules fail to match the packet, then processing will continue with the next rule in the current chain. (See also RETURN target.)
- MARK - Used with the iproute2 and the tc command for advanced routing and traffic shaping.
- REDIRECT
Transparent proxying: local net at eth0, proxy server at port 8080)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \ -j REDIRECT --to-ports 8080
- RETURN - This is the default target at the end of a user-defined chain. It means to return to the next rule in the parent chain.
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
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.
Iptablesi mooduli laadimiseks
# modprobe ip_tables
activate connection tracking (connection's status are taken into account)
# modprobe ip_conntrack
Special features for FTP:
# modprobe ip_conntrack_ftp
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
Lihtne tulemüür serverile, mis kasutab enda tööks ainult FILTER tabelit
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
Lähme süviti keerukamaks
hetkel tulemüürile teada olevate seansside tabel asub /proc/net/ip_conntrack
Loome ahela nimega blacklist kus olevad aadressid armutult blokeeritakse
iptables -N blacklist
Lisame sinna tabelisse kaks aadresside vahemikku
iptables -A blacklist -s 207.46.130.0/24 -j DROP iptables -A blacklist -s 207.46.250.0/24 -j DROP
Seejärel blokeerime meie loodud ahela kõigis kolmes põhiahelas. Ehk siis keelame nii siseneva kui väljuva ja võrgukaartide vahel ruuditava liikluse neile võrkudele.
iptables -A INPUT -j blacklist iptables -A OUTPUT -j blacklist 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
- NEW => Server1 connects to Server2 issuing a SYN (Synchronize) packet.
- RELATED => Server 2 receives the SYN packet, and then responds with a SYN-ACK (Synchronize Acknowledgment) packet.
- ESTABLISHED => Server 1 receives the SYN-ACK packet and then responds with the final ACK (Acknowledgment) packet.
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
- http://viki.pingviin.org/Tulem%C3%BC%C3%BCrimas_IPTABLES_abiga
- http://newartisans.com/2007/09/neat-tricks-with-iptables/
- http://aplawrence.com/Linux/iptables.html
- http://en.gentoo-wiki.com/wiki/Iptables
- http://www.kmyfirewall.org/kmf_doc/iptables-concept.html