25 utili regole del firewall IPtable che ogni amministratore Linux dovrebbe conoscere
La gestione del traffico di rete è uno dei compiti più difficili che un amministratore di sistema deve affrontare. Deve configurare il firewall in modo tale da soddisfare i requisiti del sistema e degli utenti sia per le connessioni in entrata che per quelle in uscita, senza lasciare il sistema vulnerabile agli attacchi.
È qui che iptables
torna utile. Iptables è un firewall a riga di comando Linux che consente agli amministratori di sistema di gestire il traffico in entrata e in uscita tramite una serie di regole di tabella configurabili.
Iptables utilizza un insieme di tabelle che hanno catene che contengono un insieme di regole integrate o definite dall'utente. Grazie ad essi un amministratore di sistema può filtrare adeguatamente il traffico di rete del proprio sistema.
Secondo il manuale di iptables, attualmente ci sono 3 tipi di tabelle:
-
FILTER
- questa è la tabella predefinita, che contiene le catene integrate per:- INPUT - pacchetti destinati a socket locali
- AVANTI: pacchetti instradati attraverso il sistema
- OUTPUT: pacchetti generati localmente
NAT
– una tabella che viene consultata quando un pacchetto tenta di creare una nuova connessione. Ha il seguente built-in:- PREROUTING: utilizzato per modificare un pacchetto non appena viene ricevuto
- OUTPUT: utilizzato per alterare i pacchetti generati localmente
- POSTROUTING – utilizzato per alterare i pacchetti mentre stanno per uscire
MANGLE
– questa tabella viene utilizzata per alterare i pacchetti. Fino alla versione del kernel 2.4 questa tabella aveva solo due catene, ora sono 5:
- PREROUTING – per modificare le connessioni in entrata
In questo articolo vedrai alcuni comandi utili che ti aiuteranno a gestire il firewall della tua Linux box tramite iptables. Ai fini di questo articolo, inizierò con i comandi più semplici per poi passare a quelli più complessi fino alla fine.
1. Avvia/Arresta/Riavvia il firewall Iptables
Innanzitutto, dovresti sapere come gestire il servizio iptables nelle diverse distribuzioni Linux. Questo è abbastanza semplice:
Su distribuzioni Linux basate su SystemD
------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables
Su distribuzioni Linux basate su SysVinit
------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart
2. Controlla tutte le regole del firewall IPtables
Se vuoi controllare le regole esistenti, usa il seguente comando:
iptables -L -n -v
Questo dovrebbe restituire un output simile a quello seguente:
Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
pkts bytes target prot opt in out source destination
Se preferisci controllare le regole per una tabella specifica, puoi utilizzare l'opzione -t
seguita dalla tabella che vuoi controllare. Ad esempio, per verificare le regole nella tabella NAT
, puoi utilizzare:
iptables -t nat -L -v -n
3. Blocca l'indirizzo IP specifico nel firewall IPtables
Se trovi un'attività insolita o abusiva da un indirizzo IP puoi bloccare quell'indirizzo IP con la seguente regola:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
Dove devi cambiare "xxx.xxx.xxx.xxx"
con l'indirizzo IP effettivo. Fai molta attenzione quando esegui questo comando poiché potresti bloccare accidentalmente il tuo indirizzo IP. L'opzione -A
aggiunge la regola alla fine della catena selezionata.
Nel caso in cui desideri bloccare solo il traffico TCP da quell'indirizzo IP, puoi utilizzare l'opzione -p
che specifica il protocollo. In questo modo il comando sarà simile a questo:
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
4. Sblocca l'indirizzo IP nel firewall IPtables
Se hai deciso di non voler più bloccare le richieste provenienti da un indirizzo IP specifico, puoi eliminare la regola di blocco con il seguente comando:
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
L'opzione -D
cancella una o più regole dalla catena selezionata. Se preferisci utilizzare l'opzione più lunga puoi utilizzare --delete
.
5. Blocca una porta specifica sul firewall IPtables
A volte potresti voler bloccare le connessioni in entrata o in uscita su una porta specifica. È una buona misura di sicurezza e dovresti davvero pensarci quando configuri il tuo firewall.
Per bloccare le connessioni in uscita su una porta specifica utilizzare:
iptables -A OUTPUT -p tcp --dport xxx -j DROP
Per consentire le connessioni in entrata utilizzare:
iptables -A INPUT -p tcp --dport xxx -j ACCEPT
In entrambi gli esempi cambia "xxx"
con la porta effettiva che desideri consentire. Se desideri bloccare il traffico UDP anziché TCP, cambia semplicemente "tcp"
con "udp"
nel campo sopra la regola di iptables.
6. Consenti più porte su IPtables utilizzando Multiporta
Puoi consentire più porte contemporaneamente, utilizzando multiporta, di seguito puoi trovare tale regola sia per le connessioni in entrata che per quelle in uscita:
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
7. Consenti intervallo di rete specifico su una porta particolare su IPtables
Potresti voler limitare determinate connessioni su una porta specifica a una determinata rete. Supponiamo che tu voglia consentire le connessioni in uscita sulla porta 22
alla rete 192.168.100.0/24
.
Puoi farlo con questo comando:
iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
8. Blocca Facebook sul firewall IPtables
Alcuni datori di lavoro preferiscono bloccare l'accesso a Facebook ai propri dipendenti. Di seguito è riportato un esempio di come bloccare il traffico su Facebook.
Nota: se sei un amministratore di sistema e devi applicare queste regole, tieni presente che i tuoi colleghi potrebbero smettere di parlarti :)
Per prima cosa trova gli indirizzi IP utilizzati da Facebook:
host facebook.com
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20
Puoi quindi bloccare quella rete Facebook con:
iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP
Tieni presente che l'intervallo di indirizzi IP utilizzato da Facebook può variare nel tuo Paese.
9. Imposta il port forwarding in IPtables
A volte potresti voler inoltrare il traffico di un servizio a un'altra porta. Puoi ottenere questo risultato con il seguente comando:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
Il comando precedente inoltra tutto il traffico in entrata sull'interfaccia di rete eth0
, dalla porta 25
alla porta 2525
. Puoi cambiare le porte con quelle che ti servono.
10. Blocca il sovraccarico di rete sulla porta Apache con IPtables
A volte gli indirizzi IP potrebbero richiedere troppe connessioni verso le porte web del tuo sito web. Ciò può causare numerosi problemi e per prevenire tali problemi, è possibile utilizzare la seguente regola:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
Il comando precedente limita le connessioni in entrata da un minuto a 100
e imposta un limite a 200
. È possibile modificare il limite e lo scoppio limite in base ai propri requisiti specifici.
11. Blocca le richieste ping in entrata su IPtables
Ad alcuni amministratori di sistema piace bloccare le richieste ping in entrata per motivi di sicurezza. Anche se la minaccia non è così grande, è bene sapere come bloccare tale richiesta:
iptables -A INPUT -p icmp -i eth0 -j DROP
12. Consenti accesso loopback
L'accesso loopback (accesso da 127.0.0.1
) è importante e dovresti lasciarlo sempre attivo:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
13. Conserva un registro dei pacchetti di rete eliminati su IPtables
Se vuoi registrare i pacchetti scartati sull'interfaccia di rete eth0
, puoi utilizzare il seguente comando:
iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
Puoi modificare il valore dopo "--log-prefix"
con qualcosa a tua scelta. I messaggi vengono registrati in /var/log/messages
e puoi cercarli con:
grep "IPtables dropped packets:" /var/log/messages
14. Blocca l'accesso a un indirizzo MAC specifico su IPtables
Puoi bloccare l'accesso al tuo sistema da un indirizzo MAC specifico utilizzando:
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
Naturalmente, dovrai modificare "00:00:00:00:00:00"
con l'effettivo indirizzo MAC che desideri bloccare.
15. Limitare il numero di connessioni simultanee per indirizzo IP
Se non vuoi che vengano stabilite troppe connessioni simultanee da un singolo indirizzo IP su una determinata porta, puoi utilizzare il comando seguente:
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Il comando precedente non consente più di 3
connessioni per client. Naturalmente, puoi modificare il numero di porta per adattarlo a un servizio diverso. Anche --connlimit-above
dovrebbe essere modificato per soddisfare i tuoi requisiti.
16. Cerca all'interno della regola IPtables
Dopo aver definito le regole di iptables, vorrai effettuare ricerche di tanto in tanto e potrebbe essere necessario modificarle. Un modo semplice per effettuare ricerche all'interno delle regole è utilizzare:
iptables -L $table -v -n | grep $string
Nell'esempio precedente, dovrai modificare $table
con la tabella effettiva all'interno della quale desideri cercare e $string
con la stringa effettiva che stai cercando.
Ecco un esempio:
iptables -L INPUT -v -n | grep 192.168.0.100
17. Definire la nuova catena IPTables
Con iptables puoi definire la tua catena e memorizzarvi regole personalizzate. Per definire una catena, utilizzare:
iptables -N custom-filter
Ora puoi verificare se il tuo nuovo filtro è presente:
iptables -L
Uscita del campione
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination
18. Svuota catene o regole del firewall IPtables
Se vuoi svuotare le catene del firewall, puoi utilizzare:
iptables -F
Puoi scaricare le catene dalla tabella specifica con:
iptables -t nat -F
Puoi cambiare "nat"
con la tabella effettiva che concatena che desideri svuotare.
19. Salva le regole IPtables in un file
Se vuoi salvare le regole del firewall, puoi utilizzare il comando iptables-save
. Puoi utilizzare quanto segue per salvare e archiviare le regole in un file:
iptables-save > ~/iptables.rules
Dipende da te dove memorizzerai il file e come lo nominerai.
20. Ripristina le regole IPtables da un file
Se desideri ripristinare un elenco di regole iptables, puoi utilizzare iptables-restore
. Il comando è simile al seguente:
iptables-restore < ~/iptables.rules
Naturalmente il percorso del file delle regole potrebbe essere diverso.
21. Imposta le regole IPtables per la conformità PCI
Ad alcuni amministratori di sistema potrebbe essere richiesto di configurare i propri server affinché siano conformi PCI. Esistono molti requisiti da parte di diversi fornitori di conformità PCI, ma ce ne sono pochi comuni.
In molti casi, dovrai avere più di un indirizzo IP. Dovrai applicare le regole seguenti per l'indirizzo IP del sito. Presta particolare attenzione quando utilizzi le regole seguenti e usale solo se sei sicuro di ciò che stai facendo:
iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
Se utilizzi cPanel o un pannello di controllo simile, potrebbe essere necessario bloccare anche le sue porte. Ecco un esempio:
iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP
Nota: per assicurarti di soddisfare i requisiti del tuo fornitore PCI, controlla attentamente il loro rapporto e applica le regole richieste. In alcuni casi potrebbe essere necessario bloccare il traffico UDP anche su determinate porte.
22. Consenti connessioni stabilite e correlate
Poiché il traffico di rete è separato in entrata e in uscita, ti consigliamo di consentire il traffico in entrata stabilito e correlato. Per le connessioni in entrata fallo con:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Per uso in uscita:
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
23. Rilascia i pacchetti non validi in IPtables
È possibile che alcuni pacchetti di rete siano contrassegnati come non validi. Alcune persone potrebbero preferire registrare tali pacchetti, ma altri preferiscono eliminarli. Per eliminare i pacchetti non validi, puoi utilizzare:
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
24. Blocca la connessione sull'interfaccia di rete
Alcuni sistemi potrebbero avere più di un'interfaccia di rete. Puoi limitare l'accesso a quell'interfaccia di rete o bloccare le connessioni da determinati indirizzi IP.
Per esempio:
iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
Sostituisci "xxx.xxx.xxx.xxx " con l'effettivo indirizzo IP (o rete) che desideri bloccare.
25. Disabilita la posta in uscita tramite IPTables
Se il tuo sistema non dovesse inviare email, puoi bloccare le porte in uscita sulle porte SMTP. Ad esempio puoi usare questo:
iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
Conclusione
Iptables è un potente firewall di cui puoi facilmente trarre vantaggio. È fondamentale che ogni amministratore di sistema impari almeno le basi di iptables. Se desideri trovare informazioni più dettagliate su iptables e le sue opzioni ti consigliamo vivamente di leggere il suo manuale:
man iptables
Se ritieni che dovremmo aggiungere più comandi a questo elenco, condividili con noi, inviandoli nella sezione commenti qui sotto.