Ricerca nel sito web

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:

    1. FILTER - questa è la tabella predefinita, che contiene le catene integrate per:

      1. INPUT  - pacchetti destinati a socket locali
      2. AVANTI: pacchetti instradati attraverso il sistema
      3. OUTPUT: pacchetti generati localmente
    2. NAT – una tabella che viene consultata quando un pacchetto tenta di creare una nuova connessione. Ha il seguente built-in:

      1. PREROUTING: utilizzato per modificare un pacchetto non appena viene ricevuto
      2. OUTPUT: utilizzato per alterare i pacchetti generati localmente
      3. POSTROUTING – utilizzato per alterare i pacchetti mentre stanno per uscire
    3. 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:

      1. PREROUTING – per modificare le connessioni in entrata
      2. OUTPUT: per modificare i pacchetti generati localmente
      3. INPUT – per i pacchetti in entrata
      4. POSTROUTING – per alterare i pacchetti mentre stanno per uscire
      5. AVANTI – per i pacchetti instradati attraverso la casella

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.