====== Iptables ====== {{:wiki:os:debian:iptables.png?direct&700|}} 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) * probíhá v chainu PREROUTING a OUTPUT * rozeznává stavy: NEW, ESTABILISHED, RELATED, INVALID * Některé protokoly potřebují speciální podporu: **ip_conntrack_*** * Podobná podpora je potřebná i pro NAT: **ip_nat_*** * POZOR na FTP!! **modprobe ip_conntrack_ftp** #!/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