GNU/Linux >> Linux Esercitazione >  >> Linux

Cheat sheet dei comandi di IPtables

Panoramica

IPtables è uno dei firewall più conosciuti (e anche abbastanza efficace) che viene fornito anche su molte distribuzioni Linux preinstallate per impostazione predefinita. Lo scopo di questo post è fungere da cheat sheet dei comandi di Iptables, considerando quanto Iptables sia potente, ha anche numerosi comandi per molti scenari di rete. Iptables utilizza diverse regole di tabella con più catene per bloccare e consentire il traffico:

  • FILTRO: questa è la tabella predefinita che ha lo scopo di filtrare le regole del traffico
    • INGRESSO :Sotto la catena di input definiamo le regole e i comportamenti per controllare le connessioni in entrata.
    • USCITA :Sotto la catena di output controlliamo le connessioni in uscita
    • AVANTI :come suggerisce il nome, utilizziamo la catena di inoltro per specificare le connessioni in entrata che reindirizzeremo immediatamente a un altro percorso, indirizzo o porta (inoltrarlo). L'inoltro è comunemente usato insieme a NAT.
  • NAT – tabella di traduzione degli indirizzi di rete utilizzata per mappare più risorse di traffico locale alle connessioni in uscita per stabilire un nuovo percorso. La tabella NAT include le seguenti regole di catena:
    • PREOUTING – serve per controllare/modificare un pacchetto non appena arriva (connessioni in entrata)
    • USCITA – viene utilizzato per modificare i pacchetti generati localmente
    • POSTROUTING – serve per controllare/modificare un pacchetto non appena sta per partire (connessioni in uscita)
  • MANGOLA – la tabella mangle viene utilizzata per la modifica o l'alterazione di pacchetti. La tabella Mangle ha 5 regole di catena:
    • PREOUTING – per alterare le connessioni in entrata
    • USCITA – per alterare i pacchetti generati localmente
    • INGRESSO – per i pacchetti in arrivo
    • POSTROUTING – per alterare i pacchetti mentre stanno per uscire
    • AVANTI – per i pacchetti instradati attraverso la scatola (o devono essere inoltrati a una nuova connessione/percorso)

Per questo cheat sheet c'è un repository github con una versione scaricabile in .pdf:LINK

Comandi IPtables

Come visualizzare le regole del firewall

– Mostra tutte le regole

# iptables -L

– Visualizza tutte le regole con i numeri di riga

# iptables -L --line-numbers

– Visualizza tutte le regole con output dettagliato dei pacchetti attivi

# iptables -n -L -v

-Visualizza regole per una catena NAT

# iptables -t nat -L

Queste opzioni di output/visualizzazione possono essere combinate anche con altri comandi di visualizzazione, come:

# iptables -t nat -L --line-numbers

– Regole di visualizzazione per una regola di catena specifica

# iptables -L INPUT

– Regole di visualizzazione ma con specifiche della catena

# iptables -S INPUT

-Visualizza regole per una catena e con pacchetti attivi

# iptables -S INPUT -v

Come eliminare e aggiungere regole

– Elimina una regola tramite un numero di riga

# iptables -D INPUT 10

– Elimina una regola in base a una specifica

# iptables -D INPUT -m conntrack --ctstate

– Svuota tutta la catena (elimina tutte le regole della catena)

# iptables -F

– Svuota una singola catena

# iptables -F INPUT
# Iptables -t nat -F
# Iptables -t mangle -F

– Aggiungi una nuova catena

# iptables -N custom-filter

– Aggiungi una nuova regola

# iptables -I INPUT -s 123.123.123.133 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j REJECT

Nota per quanto riguarda l'aggiunta delle regole, come puoi vedere qui abbiamo due regole diverse con opzioni diverse. Nota le prime opzioni definite subito dopo iptables:-I e -A.
Queste opzioni indicano dove verranno posizionate le regole nella tabella, all'inizio (opzione -I) della regola della catena o al in basso (-A).
Iptables legge le regole partendo dalla prima regola in cima alla catena, quindi scende fino in fondo e le applica in quest'ordine.

Esempi e comandi IPtables più comuni utilizzati

Blocca il traffico

– Blocca un indirizzo IP per accedere all'ingresso

# iptables -A INPUT -s 192.168.100.1 -j DROP

– Blocca una sottorete IP specifica in entrata

# iptables -A INPUT -s 192.168.1.100/24 -j DROP

– Blocca un indirizzo IP per rifiutare tutti i pacchetti

# iptables -A INPUT -s 192.168.1.100 -j REJECT

– Blocca un indirizzo IP su un'interfaccia di rete specifica in entrata

# iptables -A INPUT -i eth0 -s 192.168.1.102 -j DROP

– Blocca solo il traffico TCP per un indirizzo IP o un intervallo IP specifico

# 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

– Elimina il traffico per una porta specifica (chiudi porta)

# iptables -A INPUT -p tcp --dport xxx -j DROP
# iptables -A INPUT -p tcp --dport 22 -j DROP

– Elimina tutti i pacchetti di rete non validi in arrivo

# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

Consenti traffico o apri porte con IPtables

– Consenti traffico (in entrata e in uscita) su 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

Nota :per bloccare il traffico su queste porte, cambia l'opzione ACCEPT in DROP

– Consenti un IP o un intervallo di rete specifico su SSH in entrata (rimuovi CIDR per impostare solo un IP)

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Nota :la stessa configurazione per l'intervallo di rete può essere applicata ad altre regole in entrata elencate di seguito

Nota :per bloccare il traffico su queste porte, cambia l'opzione ACCEPT in DROP

– Consenti traffico su HTTP e HTTPS (in entrata e in uscita)

# 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

– Configurazione multiporta

# 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

Nota:per bloccare il traffico su queste porte, cambia l'opzione ACCEPT in DROP

– Consenti traffico su 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

– Consenti il ​​traffico MySQL verso un'interfaccia di rete specifica

# 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

– Consenti traffico 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

– Consenti traffico PostgreSQL verso un'interfaccia di rete specifica

# 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

– Consenti in entrata su 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

– Come configurare il port forwarding in IPtables

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Questo comando, ad esempio, reindirizzerà tutto il traffico in entrata su eth0 porta dalla porta 25 alla porta 2525

Questi parametri qui sono usati anche come esempio. Ciò che si otterrà qui è:sulla porta 80, tutte le connessioni in entrata saranno limitate/ridotte a 100 connessioni stabilite al minuto e verrà impostato un burst limitatore di 200 pacchetti corrispondenti.

– Blocca le richieste di ping in arrivo

# iptables -A INPUT -p icmp -i eth0 -j DROP

– Blocca o consenti l'accesso a un indirizzo Mac specifico

# 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

– Consenti l'accesso in loopback

# iptables -A INPUT -i lo -j ACCEPT 
# iptables -A OUTPUT -o lo -j ACCEPT

– Limita il numero di connessioni simultanee per indirizzo IP

# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Il comando precedente limiterà il numero di connessioni alla porta 22(ssh) e non consentirà più di connessioni per client. Il numero di porta ovviamente può essere modificato.

Registra i pacchetti persi

# iptables -A INPUT -i eth0 -j LOG --log-prefix "Dropped packets:"

È possibile modificare il prefisso –log a propria scelta. I log possono essere ricercati con il seguente comando:

# grep "IPtables dropped packets:" /var/log/messages

– Registra i pacchetti eliminati provenienti da un intervallo di rete specifico

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "

– Come cercare voci/regole all'interno di IPtables con grep

# iptables -L INPUT -v -n | grep 192.168.0.100

Comandi di Iptables per prevenire attacchi informatici più avanzati

– Come bloccare l'allagamento della rete sulla porta http

# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

– Configura la protezione dalla scansione delle porte

# 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

– Protezione dalla forza bruta per 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

– Protezione dagli attacchi 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

– Mitigazione degli attacchi SYN flood con 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

– Blocca i pacchetti in arrivo che non sono SYN

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

– Forza il controllo dei frammenti su tutti i pacchetti in arrivo

# iptables -A INPUT -f -j DROP

– Blocca tutti i pacchetti in arrivo per prevenire attacchi di pacchetti XMAS

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

– Blocca tutti i pacchetti NULL in arrivo

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

– Intercetta e rilascia tutti i pacchetti con contrassegni TCP falsi

# 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

– Salva le regole IPtables in un file e ripristinale

# iptables-save > ~/iptables.rules
# iptables-restore < ~/iptables.rules

– Salva le regole di IPtables in modo permanente con netfilter

Nota:richiede il plug-in iptables "iptables-persistent" essere installato. Può installarlo con "apt install iptables-persistent" su distribuzioni Debian/Ubuntu.

# netfilter-persistent save

Riepilogo

Per riassumere il post, abbiamo compilato un elenco di un elenco di cheat sheet dei comandi di IPtables con alcune delle regole più comuni su come configurare IPtables per vari casi d'uso (avendo alcune regole di autorizzazione e rilascio utilizzate quotidianamente per molti servizi Web e servizi che funzionano tramite rete ) e ha anche elencato alcuni comandi IPtables avanzati che possono prevenire vari attacchi informatici.

Anche se iptables è un fantastico firewall, fai attenzione a quali regole stai applicando.


Linux
  1. Come usare Tmux + Cheat Sheet

  2. Foglio di riferimento rapido per i comandi Docker

  3. Riavvia il cheat sheet dei comandi di vari servizi

  4. Cheat Sheet di Yum Command

  5. Foglio informativo sui comandi di Linux

Cheat Sheet di Git Commands

Foglio informativo sui comandi MySQL

Foglio informativo sui comandi del database MySQL per Linux

Cheat Sheet dei comandi di Pacman per Arch Linux

Comandi di base nano (cheat sheet)

Comandi di base di vim (cheat sheet)