Esempio di configurazione di iptables per proteggere un server pubblico

Segue un esempio di configurazione di base di iptables da applicare direttamente su un server pubblico per proteggere la macchina stessa ed esporre solo le porte strettamente necessarie. Il file è nel classico formato di output del comando iptables-save, le sue impostazioni possono quindi essere quindi importate con iptables-restore < nomefile.txt.
Tipicamente, su distribuzioni come RedHat, queste impostazioni sono salvate in /etc/sysconfig/iptables.

# Di default viene droppato il traffico in entrata e in forward. Si accetta invece il traffico in uscita, in linea con il principio, applicato in questo esempio, di mantenere delle impostazione di base essenziali, non eccessivamente stringenti e paranoiche (per evitare complicazioni in fase di implementazione) ma comunque efficaci.
# Le regole applicate, da adattare al proprio caso, permettono:
# - Accesso da Internet alle porte 80 (http), 443 (https), 25 (smtp), 110 (pop3)
# - Accesso via ftp (porta 21) solo da una rete specifica
# - Accesso via ssh (porta 22) solo da un host specifico
# - Regola per permettere l'ingresso in entrata di tutti i pacchetti correlati a connessioni precedentemente stabilite in uscita

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -s 10.42.42.1 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 10.42.42.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Segue, commentata, una riga che permette di abilitare il logging dei pacchetti droppati (è l'ultima prima del DROP di default della catena), viene specificata una stringa di prefisso e il livello di logging, in modo da poter isolare questi log tramite syslog: Aggiungere in /etc/syslog.conf una riga tipo "kern.debug   /var/log/firewall.log"
# -A INPUT -i eth0 -m pkttype --pkt-type ! broadcast -j LOG --log-prefix "[INPUT DROP] : " --log-level 7 --log-tcp-options --log-ip-options
COMMIT
#Seguono le impostazioni di NAT di default, dove nessuna regola viene impostata
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
#Seguono le impostazioni di MANGLE di default, dove nessuna regola viene impostata
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

Privacy Policy