Se hai già sentito parlare di iptables per il miglioramento della sicurezza di qualsiasi server Linux, ma non sai con esattezza di cosa si tratta e non hai quella dimestichezza necessaria per configurarlo sulla tua macchina, questa è la guida che fa per te.
Oggi ti condurrò alla scoperta di iptables e delle sue funzionalità, mostrandoti in modo semplice come puoi configurarlo per mettere al sicuro il tuo server.
Cos’è iptables?
La pagina di manuale di Linux dedicata a questo argomento, definisce iptables come uno strumento di amministrazione per il filtraggio dei pacchetti IPv4 e per il funzionamento del NAT (Network Address Translation).
Questa spiegazione non aiuta più di tanto. In parole povere, iptables è un semplicissimo firewall installato sulla maggior parte delle distribuzioni Linux e, in qualità di firewall, è capace di filtrare e bloccare il traffico ritenuto dannoso per la sicurezza del server.
Usando iptables puoi configurare la tua distribuzione in modo da decidere quale traffico internet (in entrata e in uscita) autorizzare e quale traffico bloccare e proibire.
Capito a cosa serve esattamente iptables, devi fare un passo in più verso la comprensione di come configurarlo.
Devi sapere che la configurazione del firewall Linux non è così complicata: si tratta di definire delle regole una dopo l’altra, infatti, in modo ancora più semplicistico, il firewall può essere considerato come una lista di regole. Queste regole definiscono le autorizzazioni sul traffico, ossia quali connessioni sono permesse e quali no.
Esemplificando, quando al tuo server giunge una connessione in ingresso, il firewall verifica se questa richiesta di connessione entrante rispetta una delle regole che hai definito e, in caso di esito affermativo, autorizza la connessione secondo la regola corrispondente. In caso in cui la regola neghi la connessione, essa verrà bloccata o inoltrata altrove, sempre secondo le definizioni che hai configurato.
Se non esiste nessuna regola per quel tipo di connessione, allora il firewall si rifà a una regola di default, valida per tutte le connessioni non meglio specificate.
Dalla teoria alla pratica
A questo punto, devi passare dalla teoria alla pratica. Gli esempi di configurazione che seguiranno non sono esaustivi, ma servono da guida per eventuali regole personalizzate che devi creare specificamente per la sicurezza del tuo server Linux. Tutto ciò che seguirà è riferito a una distribuzione CentOS 6.4.
Immaginiamo che tu debba configurare il tuo server per funzionare da webserver. Devi decidere quali porte di connessione lasciare aperte e per quali servizi consentire le connessioni in ingresso e in uscita. Di solito, un webserver ha necessità di consentire le connessioni Web e quelle email e un accesso SSH per l’amministrazione da remoto.
Si definiscono, quindi, le porte da lasciare aperte per le varie connessioni:
- accesso SSH, porta 22;
- accesso Web, porta 80 e porta 443 (connessione protetta SSL);
- accesso invio email, porta 25 (SMTP) e porta 465 (SMTP su SSL);
- accesso ricezione email, porta 110 (POP3) e porta 995 (POP3 su SSL);
- accesso consultazione email, porta 143 (IMAP) e porta 993 (IMAP su SSL).
Una volta definiti i servizi a cui consentire le connessioni, subito dopo il primo accesso al tuo server Linux, inizializza iptables, con il comando di flush che cancella tutte le regole eventualmente presenti, una ad una:
[code type=”php”]iptables –F[/code]
Configura ora alcune semplici regole che ti consentono di bloccare quelli che sono gli attacchi più comuni e grossolani, come quelli perpetrati dai bot network o condotti tramite i pacchetti null:
[code type=”php”]iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP[/code]
Con questo comando, stai dicendo al firewall di aggiungere (-A) una regola per terminare (-j DROP) qualsiasi pacchetto in ingresso (INPUT) proveniente dal protocollo TCP/IP (-p tcp), che abbia flag NONE (–tcp-flags ALL NONE).
Un altro attacco che devi evitare è quello DoS (Denial of Service) di tipo SYN flood, che puoi evitare così:
[code type=”php”]iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP[/code]
Devi anche evitare la ricezione di pacchetti anomali inviati tramite XMAS scan:
[code type=”php”]iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP[/code]
A questo punto, ti do appuntamento al prossimo post per continuare la configurazione di iptables per un webserver Linux perfetto.