Přehled
IPtables je jeden z nejznámějších firewallů (a také docela účinný), který je také standardně dodáván na mnoha distribucích Linuxu předinstalovaných. Účelem tohoto příspěvku je fungovat jako cheat pro příkazy Iptables, vzhledem k tomu, jak výkonný je Iptables, má také řadu příkazů pro mnoho síťových scénářů. Iptables používá různá pravidla pro tabulky s více řetězci k blokování a povolení provozu:
- FILTR: toto je výchozí tabulka, která má filtrovat pravidla provozu
- INPUT :Ve vstupním řetězci definujeme pravidla a chování pro řízení příchozích připojení.
- VÝSTUP :Pod výstupním řetězcem kontrolujeme odchozí spojení
- Vpřed :jak název napovídá, používáme dopředný řetězec ke specifikaci příchozích spojení, která se hned chystáme přesměrovat na jinou cestu, adresu nebo port (přesměrovat je). Přesměrování se běžně používá společně s NAT.
- NAT – tabulka překladu síťových adres, která se používá pro mapování více zdrojů místního provozu na odchozí připojení za účelem vytvoření nové trasy. Tabulka NAT obsahuje následující řetězová pravidla:
- Předběžná trasa – používá se ke kontrole/úpravě paketu, jakmile dorazí (příchozí spojení)
- VÝSTUP – používá se pro úpravu lokálně generovaných paketů
- POSTROUTING – používá se ke kontrole/úpravě paketu, jakmile se chystá opustit (odchozí spojení)
- MANGLE – mangle table se používá pro modifikaci nebo změnu paketu. Mangle tabulka má 5 řetězových pravidel:
- Předběžná trasa – pro změnu příchozích spojení
- VÝSTUP – pro změnu lokálně generovaných paketů
- INPUT – pro příchozí pakety
- POSTROUTING – pro změnu paketů, když se chystají odejít
- Vpřed – pro pakety směrované přes box (nebo je třeba je přesměrovat na nové připojení/směrování)
Pro tento cheat je k dispozici github repo s verzí ke stažení ve formátu .pdf:LINK
Příkazy IPtables
Jak zobrazit pravidla brány firewall
– Zobrazit všechna pravidla
# iptables -L
– Zobrazit všechna pravidla s čísly řádků
# iptables -L --line-numbers
– zobrazí všechna pravidla s podrobným výstupem aktivních paketů
# iptables -n -L -v
-Zobrazení pravidel pro řetězec NAT
# iptables -t nat -L
Tyto možnosti výstupu/zobrazení lze také kombinovat s dalšími příkazy zobrazení, jako:
# iptables -t nat -L --line-numbers
– Zobrazit pravidla pro konkrétní pravidlo řetězce
# iptables -L INPUT
– Zobrazit pravidla, ale se specifikacemi řetězce
# iptables -S INPUT
-Zobrazení pravidel pro řetězec a s aktivními pakety
# iptables -S INPUT -v
Jak odstranit a přidat pravidla
– Odstranit pravidlo podle čísla řádku
# iptables -D INPUT 10
– Odstranit pravidlo podle specifikace
# iptables -D INPUT -m conntrack --ctstate
– Vyprázdnit celý řetězec (smazat všechna pravidla řetězce)
# iptables -F
– Propláchněte jeden řetěz
# iptables -F INPUT
# Iptables -t nat -F
# Iptables -t mangle -F
– Přidat nový řetězec
# iptables -N custom-filter
– Přidat nové pravidlo
# iptables -I INPUT -s 123.123.123.133 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j REJECT
Poznámka ohledně přidávání pravidel – jak můžete vidět zde, máme dvě různá pravidla s různými možnostmi. Všimněte si prvních definovaných voleb hned za iptables:-I a -A.
Tyto volby vám řeknou, kam budou pravidla umístěna v tabulce, na začátek (volba -I) řetězového pravidla nebo na bottom (-A).
Iptables čte pravidla tak, že jde od prvního pravidla na vrcholu řetězce, pak jde dolů a aplikuje je v tomto pořadí.
Příklady a nejběžněji používané příkazy IPtables
Blokovat provoz
– Zablokujte IP adresu, abyste měli přístup k příchozím zprávám
# iptables -A INPUT -s 192.168.100.1 -j DROP
– Blokovat pro příchozí podsíť konkrétní IP
# iptables -A INPUT -s 192.168.1.100/24 -j DROP
– Blokovat IP adresu pro odmítnutí všech paketů
# iptables -A INPUT -s 192.168.1.100 -j REJECT
– Blokovat IP adresu pro konkrétní síťové rozhraní při příchozích hovorech
# iptables -A INPUT -i eth0 -s 192.168.1.102 -j DROP
– Blokovat pouze provoz TCP pro konkrétní IP adresu nebo rozsah IP
# iptables -A INPUT -p tcp -s 192.168.1.100 -j DROP
# iptables -A INPUT -p tcp -s 192.168.1.100/24 -j DROP
– Snížení provozu pro konkrétní port (uzavřít port)
# iptables -A INPUT -p tcp --dport xxx -j DROP
# iptables -A INPUT -p tcp --dport 22 -j DROP
– Zahodit všechny neplatné síťové pakety u příchozích
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Povolte provoz nebo otevřete porty pomocí IPtables
– Povolit provoz (příchozí a odchozí) na SSH
# iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Poznámka :pro blokování provozu na těchto portech změňte možnost ACCEPT na DROP
– Povolit konkrétní IP nebo síťový rozsah pro příchozí SSH (odstraněním CIDR nastavte pouze IP)
# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Poznámka :Stejnou konfiguraci pro rozsah sítě lze použít na další příchozí pravidla uvedená níže
Poznámka :pro blokování provozu na těchto portech změňte možnost ACCEPT na DROP
– Povolit provoz na HTTP a HTTPS (příchozí a odchozí)
# iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
– Konfigurace více portů
# iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Poznámka:Chcete-li blokovat provoz na těchto portech, změňte možnost ACCEPT na DROP
– Povolit provoz na MySQL
# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
– Povolit provoz MySQL do konkrétního síťového rozhraní
# iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
– Povolit provoz PostgreSQL
# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
– Povolit provoz PostgreSQL do konkrétního síťového rozhraní
# iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
– Povolit příchozí hovory přes SMTP/IMAP/IMAPS/POP3/POP3S/
SMPT
# iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT
IMAP
# iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT
IMAPS
# iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT
POP3
# iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT
POP3S
# iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT
– Jak nakonfigurovat předávání portů v IPtables
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
Tento příkaz například přesměruje veškerý příchozí provoz na eth0 port z portu 25 na port 2525
Tyto parametry jsou zde také použity jako příklad. Zde bude dosaženo – na portu 80 budou všechny příchozí omezeny/sníženy na 100 navázaných spojení za minutu a bude nastaven limitr-burst na 200 odpovídajících paketů.
– Blokovat příchozí požadavky na ping
# iptables -A INPUT -p icmp -i eth0 -j DROP
– Blokovat nebo povolit přístup pro konkrétní mac adresu
# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT
– Povolit zpětný přístup
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
– Omezte počet souběžných připojení na IP adresu
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Výše uvedený příkaz omezí počet připojení k portu 22 (ssh) a nepovolí více než připojení na klienta. Číslo portu lze samozřejmě změnit.
– Zaznamenat zahozené pakety
# iptables -A INPUT -i eth0 -j LOG --log-prefix "Dropped packets:"
Předponu –log můžete změnit podle svého výběru. Protokoly lze vyhledávat pomocí následujícího příkazu:
# grep "IPtables dropped packets:" /var/log/messages
– Protokolovat zahozený paket pocházející z určitého rozsahu sítě
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
– Jak vyhledávat položky/pravidla v tabulkách IP pomocí grep
# iptables -L INPUT -v -n | grep 192.168.0.100
Příkazy Iptables k prevenci pokročilejších kybernetických útoků
– Jak blokovat zahlcení sítě na portu http
# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
– Konfigurace ochrany skenování portů
# iptables -N port-scanning
# iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
# iptables -A port-scanning -j DROP
– Ochrana hrubou silou pro SSH
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
– Ochrana proti útokům SYN Flood
# iptables -N syn_flood
# iptables -A INPUT -p tcp --syn -j syn_flood
# iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
# iptables -A syn_flood -j DROPiptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
# iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
# iptables -A INPUT -p icmp -j DROPiptables -A OUTPUT -p icmp -j ACCEPT
– Zmírnění záplavových útoků SYN pomocí SYNPROXY
# iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
# iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
– Blokovat příchozí pakety, které nejsou SYN
# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
– Vynutit kontrolu fragmentů u všech příchozích paketů
# iptables -A INPUT -f -j DROP
– Blokovat všechny příchozí pakety, aby se zabránilo útoku paketů XMAS
# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
– Blokovat všechny příchozí pakety NULL
# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
– Zachyťte a zahoďte všechny pakety s falešnými příznaky TCP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
– Uložte pravidla IPtables do souboru a obnovte je
# iptables-save > ~/iptables.rules
# iptables-restore < ~/iptables.rules
– Trvale uložit pravidla IPtables pomocí netfilter
Poznámka:Vyžaduje plugin iptables „iptables-persistent“ k instalaci. Lze jej nainstalovat pomocí „apt install iptables-persistent“ v distribucích Debian/Ubuntu.
# netfilter-persistent save
Shrnutí
Abychom shrnuli příspěvek – sestavili jsme seznam a seznam cheatů pro příkazy IPtables s některými z nejběžnějších pravidel, jak nakonfigurovat tabulky IPtables pro různé případy použití (s některými pravidly povolení a zrušení, která se denně používají pro mnoho webových služeb a služeb, které fungují přes síť ) a také uvedl některé pokročilé příkazy IPtables, které mohou zabránit různým kybernetickým útokům.
I když je iptables úžasný firewall, buďte opatrní, jaká pravidla používáte.