Syntaxe:
iptables [-t tabulka] command chain [N] [match options] [-j target]
tabulka:
filter - (default)filtrování, logování, počítání nat - překlad adres, port forwarding mangle - lze využít pro QoS (klasifikace provozu)
command:
-A --append - přidá pravidlo na konec -I --insert - přidá pravidlo na pozici N (začátek) -D --delete - smaže pravidlo číslo N -R --replace - přepíše pravidlo číslo N -F --fush - smaže všechny pravidla -P --policy - nastaví výchozí politiku řetězce -Z --zero - vynuluje počítadla -L --list - vypíše nastavená pravidla -v verbose - vypíše i počítadla a interfacy -n numeric - vypíše IP adresy, porty jako čísla -x exact - vypíše počítadla v bytech --lin --line-numbers - zobrazí čísla pravidel
chain:
tabulka filter: INPUT FORWARD OUTPUT tabulka nat: PREROUTING POSTROUTING OUTPUT tabulka mangle: INPUT FORWARD OUTPUT PREROUTING POSTROUTING OUTPUT
match options:
-p proto - protokol (TCP, UDP, ICMP, . . . ) -s source - zdrojová IP adresa -d destination - cílová IP adresa -i incoming - příchozí síťová karta -o outgoing - odchozí síťová karta --sport - zdrojový port (TCP/UDP) --dport - cílový port (TCP/UDP) --icmp-type - druh ICMP zprávy --tcp-flags - lze kontrolovat které flagy jsou nastaveny --syn - úvodní paket TCP spojení (SYN bez ACK) Všechny pravidla lze negovat vykřičníkem (!)
target:
ACCEPT - povolíme (a dalších pravidel v chainu se neptáme)\\ DROP - zahodíme (a tváříme se jakoby nic)\\ REJECT - zahodíme, ale pošleme zpět ICMP unreachable\\ LOG - zapíšeme info z hlavièky do logu a pokračujeme dál\\ DNAT - změníme cílovou adresu nebo port (nebo obojí)\\ SNAT - změníme zdrojovou adresu nebo port (nebo obojí)\\ REDIRECT --to - speciální DNAT, pošle na lokální stroj\\ MASQUERADE - speciální SNAT, přepíše adresu na vlastní\\ MARK - přiřadí paketu číslo, které lze použít pro další zpracování\\ Pravidlo nemusí mít target, v tom případě se pokračuje dál a pouze se zvedne počítadlo.
Stavový firewall (connection tracking)
#!/bin/bash #----- Smazani vsech pravidel ----- iptables -F iptables -t nat -F iptables -t mangle -F #----- DEFAULTNI PRAVIDLA ----- iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP #----- LOOPBACK ----- iptables -A INPUT -i lo -j ACCEPT #----- PUBLIC ETH0 ----- # DHCP iptables -A INPUT -i eth0 -p UDP --sport 67 --dport 68 -j ACCEPT iptables -A OUTPUT -o eth0 -p UDP --sport 68 --dport 67 -j ACCEPT # DNS iptables -A OUTPUT -o eth0 -p UDP --dport 53 -j ACCEPT iptables -A INPUT -i eth0 -p UDP --sport 53 -j ACCEPT # HTTPS iptables -A INPUT -i eth0 -p TCP --dport 443 -j ACCEPT # SSH iptables -A INPUT -i eth0 -p TCP --dport 22 -j ACCEPT # HTTP pro APT iptables -A OUTPUT -o eth0 -p TCP --dport 80 -j ACCEPT # STAVOVY FIREWALL iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT #----- PRIVATE ETH1 ----- # DHCP iptables -A INPUT -i eth1 -p UDP --sport 68 --dport 67 -j ACCEPT iptables -A OUTPUT -o eth1 -p UDP --sport 67 --dport 68 -j ACCEPT # HTTP -> HTTPS iptables -A INPUT -i eth1 -p TCP --dport 80 -j REJECT #iptables -t nat -A PREROUTING -i eth1 -p TCP --dport 80 -j REDIRECT --to 443 # HTTPS iptables -A INPUT -i eth1 -p TCP --dport 443 -j ACCEPT # SSH iptables -A INPUT -i eth1 -p TCP --dport 22 -j ACCEPT # STAVOVY FIREWALL iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT #----- FORWARDING ----- # DNS iptables -A FORWARD -i eth1 -o eth0 -p UDP --dport 53 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p UDP --sport 53 -j ACCEPT # HTTP iptables -A FORWARD -i eth1 -o eth0 -p TCP --dport 80 -j ACCEPT # HTTPS iptables -A FORWARD -i eth1 -o eth0 -p TCP --dport 443 -j ACCEPT # FTP - passiv iptables -A FORWARD -i eth1 -o eth0 -p TCP --dport 21 -j ACCEPT # STAVOVY FIREWALL iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#!/bin/bash iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
příklad přesměrování webu :)
# iptables -t nat -I PREROUTING -p tcp –dport 80 -s x.x.x.x/yy -j DNAT –to-destination x.x.x.x
Omezení ssh
iptables -I INPUT 3 -p tcp -m tcp –dport 22 -m state –state NEW -m recent –hitcount 5 –seconds 180 –update -j DROP
iptables -I INPUT 4 -p tcp -m tcp –dport 22 -m state –state NEW -m recent –set -j ACCEPT