GNU/Linux >> Linux Esercitazione >  >> Linux

16 suggerimenti e trucchi di iptables per gli amministratori di sistema

I moderni kernel Linux sono dotati di un framework di filtraggio dei pacchetti chiamato Netfilter. Netfilter ti consente di consentire, eliminare e modificare il traffico in entrata e in uscita da un sistema. Gli iptables Lo strumento da riga di comando userspace si basa su questa funzionalità per fornire un potente firewall, che è possibile configurare aggiungendo regole per formare un criterio firewall. iptables può essere molto scoraggiante con il suo ricco set di funzionalità e la sintassi dei comandi barocca. Esaminiamone alcuni e sviluppiamo una serie di suggerimenti e trucchi per iptables per molte situazioni che un amministratore di sistema potrebbe incontrare.

Evita di chiuderti fuori

Scenario:apporti modifiche alle regole dei criteri di iptables sul server principale della tua azienda. Vuoi evitare di bloccare te stesso e potenzialmente tutti gli altri. (Ciò costa tempo e denaro e fa squillare il telefono dal muro.)

Suggerimento n. 1:esegui un backup della configurazione di iptables prima di te inizia a lavorarci.

Eseguire il backup della configurazione con il comando:

/sbin/iptables-save > /root/iptables-works

Suggerimento n. 2:ancora meglio, includi un timestamp nel nome del file.

Aggiungi il timestamp con il comando:

/sbin/iptables-save > /root/iptables-works-`date +%F`

Ottieni un file con un nome come:

/root/iptables-works-2018-09-11

Se fai qualcosa che impedisce al tuo sistema di funzionare, puoi ripristinarlo rapidamente:

/sbin/iptables-restore < /root/iptables-works-2018-09-11
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest

Suggerimento n. 4:inserisci regole specifiche in parte superiore della norma e regole generiche in basso.

Evita regole generiche come questa nella parte superiore delle regole delle norme:

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

Più criteri specifichi nella regola, meno possibilità avrai di chiuderti fuori. Invece della regola molto generica sopra, usa qualcosa del genere:

iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP

Questa regola aggiunge (-A ) all'INPUT concatena una regola che DROP tutti i pacchetti provenienti dal blocco CIDR 10.0.0.0/8 su TCP (-p tcp ) porta 22 (--dport 22 ) destinato all'indirizzo IP 192.168.100.101 (-d 192.168.100.101 ).

Ci sono molti modi in cui puoi essere più specifico. Ad esempio, utilizzando -i eth0 limiterà l'elaborazione a una singola NIC nel tuo server. In questo modo, le azioni di filtro non applicheranno la regola a eth1 .

Suggerimento n. 5:inserisci nella whitelist il tuo indirizzo IP in cima alle regole della tua policy.

Questo è un metodo molto efficace per non chiuderti fuori. Tutti gli altri, non tanto.

iptables -I INPUT -s <your IP> -j ACCEPT

Devi inserire questo come primo regola affinché funzioni correttamente. Ricorda, -io la inserisce come prima regola; -A lo aggiunge alla fine dell'elenco.

Suggerimento n. 6:conosci e comprendi tutte le regole della tua politica attuale.

Non commettere errori in primo luogo è metà della battaglia. Se capisci il funzionamento interno della tua politica di iptables, ti semplificherà la vita. Disegna un diagramma di flusso, se necessario. Ricorda inoltre:ciò che fa la politica e ciò che dovrebbe fare possono essere due cose diverse.

Configura un criterio firewall per workstation

Scenario:vuoi configurare una workstation con un criterio firewall restrittivo.

Suggerimento n. 1:imposta la norma predefinita su DROP.

# Set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

Suggerimento n. 2:consenti agli utenti la quantità minima di servizi necessari per portare a termine il proprio lavoro.

Le regole di iptables devono consentire alla workstation di ottenere un indirizzo IP, netmask e altre informazioni importanti tramite DHCP (-p udp --dport 67:68 --sport 67:68 ). Per la gestione remota, le regole devono consentire SSH in entrata (--dport 22 ), posta in uscita (--dport 25 ), DNS (--dport 53 ), ping in uscita (-p icmp ), Network Time Protocol (--dport 123 --sport 123 ) e HTTP in uscita (--dport 80 ) e HTTPS (--dport 443 ).

# Set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

# Accept any related or established connections
-I INPUT  1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow all traffic on the loopback interface
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# Allow outbound DHCP request
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

# Allow inbound SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW  -j ACCEPT

# Allow outbound email
-A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW  -j ACCEPT

# Outbound DNS lookups
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT

# Outbound PING requests
-A OUTPUT –o eth0 -p icmp -j ACCEPT

# Outbound Network Time Protocol (NTP) requests
-A OUTPUT –o eth0 -p udp --dport 123 --sport 123 -j ACCEPT

# Outbound HTTP
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

COMMIT

Limita un intervallo di indirizzi IP

Scenario:il CEO della tua azienda pensa che i dipendenti trascorrano troppo tempo su Facebook e non svolgano alcun lavoro. Il CEO dice al CIO di fare qualcosa per evitare che i dipendenti perdano tempo su Facebook. Il CIO dice al CISO di fare qualcosa per evitare che i dipendenti perdano tempo su Facebook. Alla fine, tu viene detto che i dipendenti stanno perdendo troppo tempo su Facebook e devi fare qualcosa al riguardo. Decidi di bloccare tutti gli accessi a Facebook. Innanzitutto, scopri l'indirizzo IP di Facebook utilizzando l'host e chi è comandi.

host -t a www.facebook.com
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum:        31.13.64.0 - 31.13.127.255

Quindi converti tale intervallo in notazione CIDR utilizzando la pagina di conversione da CIDR a IPv4. Ottieni 31.13.64.0/18 . Per impedire l'accesso in uscita a www.facebook.com, immettere:

iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP

Regola per ora

Scenario:il contraccolpo dei dipendenti dell'azienda sul negare l'accesso all'accesso a Facebook fa cedere un po' il CEO (e il suo assistente amministrativo gli ricorda che tiene aggiornata la SUA pagina Facebook). Il CEO decide di consentire l'accesso a Facebook.com solo all'ora di pranzo (dalle 12:00 alle 13:00). Supponendo che il criterio predefinito sia DROP, utilizza le funzionalità dell'ora di iptables per aprire l'accesso.

iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 --timestart 12:00 –timestop 13:00 –d 
31.13.64.0/18  -j ACCEPT

Questo comando imposta il criterio per consentire (-j ACCEPT ) http e https (-m multiport --dport http,https ) tra mezzogiorno (--timestart 12:00 ) e alle 13:00 (--timestop 13:00 ) su Facebook.com (–d 31.13.64.0/18 ).

Regola per tempo:prendi 2

Scenario:durante i tempi di inattività pianificati per la manutenzione del sistema, è necessario negare tutto il traffico TCP e UDP tra le 2:00 e le 3:00 in modo che le attività di manutenzione non vengano interrotte dal traffico in entrata. Questo richiederà due regole di iptables:

iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP 
iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j DROP

Con queste regole, il traffico TCP e UDP (-p tcp e -p udp ) sono negati (-j DROP ) tra le ore 2:00 (--timestart 02:00 ) e alle 03:00 (--timestop 03:00 ) all'input (-A INPUT ).

Limita le connessioni con iptables

Scenario:i tuoi server Web connessi a Internet sono sotto attacco da parte di malintenzionati da tutto il mondo che tentano di DoS (Denial of Service). Per mitigare questi attacchi, limiti il ​​numero di connessioni che un singolo indirizzo IP può avere al tuo server web:

iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset

Diamo un'occhiata a cosa fa questa regola. Se un host fa più di 20 (-–connlimit-above 20 ) nuove connessioni (–p tcp –syn ) in un minuto ai server web (-–dport http,https ), rifiuta la nuova connessione (–j REJECT ) e comunica all'host di connessione che stai rifiutando la connessione (-–reject-with-tcp-reset ).

Monitoraggio delle regole di iptables

Scenario:poiché iptables opera in base alla "prima partita vinta" mentre i pacchetti attraversano le regole in una catena, le regole abbinate di frequente dovrebbero trovarsi vicino alla parte superiore della politica e le regole abbinate meno frequentemente dovrebbero essere vicino al fondo. Come fai a sapere quali regole vengono rispettate di più o di meno in modo che possano essere ordinate più in alto o in basso?

Suggerimento n. 1:guarda quante volte ogni regola è stata rispettata.

Usa questo comando:

iptables -L -v -n –line-numbers

Il comando elencherà tutte le regole della catena (-L ). Poiché non è stata specificata alcuna catena, tutte le catene verranno elencate con un output dettagliato (-v ) che mostra i contatori di pacchetti e byte in formato numerico (-n ) con i numeri di riga all'inizio di ogni regola corrispondente alla posizione di quella regola nella catena.

Usando il conteggio dei pacchetti e dei byte, puoi ordinare le regole più frequenti verso l'alto e le regole meno frequenti verso il basso.

Suggerimento n. 2:rimuovi le regole non necessarie.

Quali regole non ottengono alcuna corrispondenza? Questi sarebbero buoni candidati per la rimozione dalla politica. Puoi scoprirlo con questo comando:

iptables -nvL | grep -v "0     0"

Nota:quella non è una scheda tra gli zeri; ci sono cinque spazi tra gli zeri.

Suggerimento n. 3:monitora cosa sta succedendo.

Vorresti monitorare cosa sta succedendo con iptables in tempo reale, come con top . Usa questo comando per monitorare l'attività di iptables in modo dinamico e mostrare solo le regole che vengono attivamente attraversate:

watch --interval=5 'iptables -nvL | grep -v "0     0"'

guarda esegue 'iptables -nvL | grep -v "0     0"' ogni cinque secondi e visualizza la prima schermata del suo output. Ciò ti consente di guardare i conteggi di pacchetti e byte cambiare nel tempo.

Segnala su iptables

Scenario:il tuo manager pensa che questa roba del firewall iptables sia semplicemente fantastica, ma un rapporto sull'attività quotidiana sarebbe ancora meglio. A volte è più importante scrivere una relazione che fare il lavoro.

Usa il filtro pacchetti/firewall/l'analizzatore di log IDS FWLogwatch per creare rapporti basati sui log del firewall di iptables. FWLogwatch supporta molti formati di registro e offre molte opzioni di analisi. Genera riepiloghi giornalieri e mensili dei file di registro, consentendo all'amministratore della sicurezza di liberare molto tempo, mantenere un migliore controllo sulla sicurezza della rete e ridurre gli attacchi inosservati.

Ecco un esempio di output da FWLogwatch:

Più che ACCEPT e DROP

Abbiamo coperto molti aspetti di iptables, dall'assicurarci di non bloccarti quando lavori con iptables al monitoraggio di iptables alla visualizzazione dell'attività di un firewall iptables. Questi ti faranno iniziare il percorso per realizzare ancora più suggerimenti e trucchi di iptables.


Linux
  1. I 5 migliori podcast per notizie e suggerimenti su Linux

  2. Suggerimenti e trucchi per le variabili di ambiente Linux

  3. 3 solidi suggerimenti per l'autovalutazione per gli amministratori di sistema

  4. Conoscere i comandi Linux, eseguire Podman su Windows e altri suggerimenti per gli amministratori di sistema

  5. Suggerimenti e trucchi preferiti per rsync

Consigli/trucchi utili per Meld per utenti intermedi

Suggerimenti e trucchi per proteggere il tuo server Web Nginx

Trucchi e scherzetti per amministratori di sistema e operatori

19 Suggerimenti e trucchi utili per la riga di comando di Linux

Suggerimenti e trucchi per la riga di comando di Netstat

Suggerimenti e trucchi per Linux .htaccess