GNU/Linux >> Znalost Linux >  >> Linux

Cheat sheet příkazů IPtables

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.


Linux
  1. Příkazy Dockeru Rychlý průvodce Cheat Sheet

  2. Cheat pro příkazy Linuxu

  3. Základní příkazy vi (cheat sheet)

  1. Cheat sheet pro běžné linuxové příkazy

  2. Představujeme Groff Macros cheat sheet

  3. Jak používat Tmux + Cheat Sheet

  1. Restartujte Cheat Sheet s příkazy různých služeb

  2. Cheat Sheet pro příkaz Yum

  3. Cheat Sheet pro základní příkazy Linuxu