Configurazione firewall su CentOS 5

Ieri mi sono trovato a dover configurare un firewall su un vps con CentOS 5, perché penso che abbia dei problemi di rete dovuti forse a DOS, e ho pensato di scrivere questa guida e renderla disponibile a tutti.

Questa guida è per CentOS 5 ma potrebbe funzionare anche su altri sistemi che non ho provato, la parte di iptables sicuramente è universale lo strumento che andremo a usare è iptables, componente firewall di linux e anche tool da riga di comando, si può consultare il manuale completo con il comando man iptables

Tutto il procedimento va eseguito con privilegi di amministrazione completi, quindi o con l’utente root o con sudo andiamo a creare un file di testo semplice, anche col blocco note, dove andremo a inserire le regole del firewall per chiudere tutte le porte tranne quelle che ci servono il file dovrebbe contenere delle righe come queste:


#Reset
iptables -F
#Abilita traffico locale
iptables -A INPUT -i lo -j ACCEPT
#Abilita traffico sulle porte selezionate da remoto
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 6667 -j ACCEPT
iptables -A INPUT -p tcp --dport 6697 -j ACCEPT
iptables -A INPUT -p tcp --dport 9999 -j ACCEPT
#Impostazioni di default per INPUT, OUTPUT e FORWARD
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#Accetta i pacchetti dalle connessioni già stabilite
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Salva la tabella
/sbin/service iptables save
#Mostra le regole
iptables -L -v

È un esempio e contiene alcune delle porte più usate (FTP, SSH, SMTP, HTTP) e infine quelle di IRC.

Come potete vedere la porta che si vuole aprire si specifica dopo l’opzione –dport, la politica da applicare è ACCEPT il protocollo è TCP e la sezione in cui inserire la regola è INPUT, cioè le connessioni in ingresso ci sono molte più opzioni disponibili su iptables che si possono vedere sul manuale, che possono essere utili ad esempio a restringere l’accesso ssh a solo un gruppo di indirizzi ip ecc… ma non le spiegherò qui.

Il primo comando, invece, serve ad abilitare il traffico locale verso il server stesso, non internet; successivamente è necessario salvare questo file, ad esempio in /root/firewall.conf ed eseguirlo, con bash /root/firewall.conf ad esempio. È possibile anche eseguirlo ad ogni avvio inserendo la riga bash /root/firewall.conf nel file /etc/rc.local anche se non mi occuperò di rc.local nel dettaglio.

Per una protezione DOS è possibile modificare il file /etc/sysctl.conf e fare in modo che ci siano queste righe:


net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

Attenzione perché in questo modo però il server non risponderà neanche ai ping.

Una volta sistemato il file per applicare le modifiche bisogna usare sysctl con il comando sysctl -p

Per controllare che tutte le regole del firewall siano in ordine è possibile usare il comando iptables -L

Spoofing

E’ possibile vietare le connessioni da ip non validi, che solitamente vengono usati nello spoofing, questi di seguito sono ip riservati a reti locali e quindi non utilizzabili su internet, è necessario inserire queste regole nel file per il firewall citato in precedenza /root/firewall.conf ed eventualmente sostituire eth0 con l’interfaccia di rete corretta se non dovesse essere standard.


iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 255.255.255.255/32 -j DROP
iptables -A INPUT -i eth0 -s 168.254.0.0/16 -j DROP

Nel caso iptables non fosse attivo è possibile configurarlo per l’avvio automatico ad ogni accensione con chkconfig iptables on o altrimenti avviarlo con service service iptables start, con service service iptables stop invece si ferma.

Guida realizzata da Blue (http://www.xxlhost.org)