Introduzione

Quando si parla di sicurezza in sistemi unix-like è buona cosa parlare di Iptables. In questa guida intendo fornire all’amministratore una lista di utili esempi in modo da configurare al meglio il proprio firewall. Quelli che seguono sono semplici esempi di iptables, chiaramente in una situazione più complessa e specifica sarà necessario creare delle regole più complesse. Questa non è una guida completa su Iptables, è solo una breve introduzione contenente degli esempi utili.

Iptables per limitare l’accesso ad un servizio tramite indirizzo ip

In questo esempio si fa in modo che solo un ip, o se si preferisce solo un range di ip, possa accedere al Server su una determinata porta.

Molto utile se sul Server gira SSHD per esempio. Si potrebbe limitare l’accesso a un indirizzo ip o range.

In questo esempio viene usata la porta 9999 e non quella standard, la 22. L’indirizzo della Workstation dell’amministratore è il seguente: 192.168.1.211.

iptables -A INPUT -p tcp -m state --state NEW --source 192.168.1.211 --dport 9999 -j ACCEPT
iptables -A INPUT -p tcp --dport 9999 -j DROP

Iptables per bloccare le richieste ICMP Ping

Per bloccare le richieste ICMP Ping eseguire il seguente comando:

iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Iptables per prevenire Ip-Spoofing

Le seguenti Iptables potrebbero essere utili a prevenire l’ip-spoofing:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Iptables per scartare tutti i primi pacchetti che non siano SYN

Assicurarsi che i primi pacchetti inviati da un host siano SYN, se no verrano scartati. Per farlo eseguire il seguente comando.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Iptables per prevenire attacchi Denial of service (DOS)

Chiarmente non c’è un modo per proteggersi al 100% da attacchi di tipo Denial of Service. Le seguenti iptables potreberò essere utili per proteggersi da alcuni tipi di attacchi Denial of Service:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

Come aggiungere iptables in modo permanente

Metodo Normale – iptables_save e iptable_restore

Per aggiungere le iptables in modo permanete anche dopo un rinvio del sistema si potrebbero eseguire i comandi: iptables_save e iptable_restore. Eseguendo il comando iptables_save viene creato un file contenente le impostazioni in uso, il comando ibtable_restore viene poi aggiunto tra i comandi da eseguire all’avvio.

Ecco il comando:

iptables-save > /etc/iptables.conf

Una volta creato il file con le configurazioni fare in modo di eseguire il comando iptables_restore durante l’avvio. Per ottenere questo risultato editare il file in /etc/rc.local o /etc/init.d/boot.local (SUSE), e aggiungere il seguente comando:

iptables-restore < /etc/iptables.conf

Metodo SUSE - Usare SuSEfirewall2 FW_CUSTOMRULES

Per aggiungere iptables in SUSE con il SUSEFirewall2 attivo il modo migliore è quello di aggiungere un riferimento a uno script contenente delle iptables nel file di configurazione del firewall /etc/sysconfig/SuSEfirewall2.

Editare il file e scommentare la seguente riga cancellando il cancelletto:

FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"

Una volta fatto andare ad editare il file in questione - /etc/sysconfig/scripts/SuSEfirewall2-custom - e nella sezione fw_custom_after_chain_creation() tra le parentesi graffe, aggiungere delle Iptables da eseguire all'avvio. Vedi immagine sottostante.

suse-firewall-custom-configuration-iptables

Metodo SUSE 2 - disattivare il SuSEFirewall2 e usare solo iptables

Con SUSE si potrebbero aggiungere delle regole a quelle già create durante l'installazione o configurazione tramite Yast e poi, con il comando iptables_save, salvare le informazioni in un file.

SuseFirewall non fa altro che generare regole iptables in base alle impostazioni create tramite yast durante l'installazione o una successiva configurazione.

Usando questo metodo si decide di disattivare il SuseFirewall2 ed eseguire automaticamente lo script con le iptables ad ogni avvio del sistema - come nel metodo normale. In questo modo inoltre si possono tenere le configurazioni effettuate in precedenza.

Per aggiungere le iptables desiderate eseguire il comando iptables da una root shell.

Controllare le iptables attive con il comando iptables -L

Per controllare se le regole iptables siano attive nella zona giusta sulla corretta interfaccia, eseguire il comando iptables -L Eccone un esempio:

# iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1304 81826 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
52992 8208K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED 
 6116  555K input_ext  all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           
    0     0 input_ext  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 LOG flags 6 level 4 prefix `SFW2-IN-ILL-TARGET ' 
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DROP       icmp --  eth0   *       0.0.0.0/0            0.0.0.0/0           icmp type 8 
    0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 LOG flags 6 level 4 prefix `SFW2-FWD-ILL-ROUTING ' 

Chain OUTPUT (policy ACCEPT 47000 packets, 81M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1304 81826 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           

Chain forward_ext (0 references)
 pkts bytes target     prot opt in     out     source               destination         

Chain input_ext (2 references)
 pkts bytes target     prot opt in     out     source               destination         
 3816  427K DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           PKTTYPE = broadcast 
    0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 4 
    0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 
    5   300 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 tcp dpt:9999 flags:0x17/0x02 LOG flags 6 level 4 prefix `SFW2-INext-ACC-TCP ' 
    5   300 ACCEPT     tcp  --  *      *       192.168.1.211        0.0.0.0/0           state NEW tcp dpt:9999 
    2    92 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:9999 
 1218 70284 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 tcp dpt:80 flags:0x17/0x02 LOG flags 6 level 4 prefix `SFW2-INext-ACC-TCP ' 
 1826  105K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
  218 13040 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 tcp dpt:443 flags:0x17/0x02 LOG flags 6 level 4 prefix `SFW2-INext-ACC-TCP ' 
  273 15440 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:80 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:443 
  188  6768 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 PKTTYPE = multicast LOG flags 6 level 4 prefix `SFW2-INext-DROP-DEFLT ' 
  188  6768 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           PKTTYPE = multicast 
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           PKTTYPE = broadcast 
    0     0 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 tcp flags:0x17/0x02 LOG flags 6 level 4 prefix `SFW2-INext-DROP-DEFLT ' 
    0     0 LOG        icmp --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 LOG flags 6 level 4 prefix `SFW2-INext-DROP-DEFLT ' 
    0     0 LOG        udp  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 5 state NEW LOG flags 6 level 4 prefix `SFW2-INext-DROP-DEFLT ' 
    6   240 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain reject_func (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with tcp-reset 
    0     0 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable 
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-proto-unreachable 
# 

Salvare la configurazione del firewall iptables in un file

Per salvare la cofigurazione del firewall e fare in modo che venga riusata ad ogni avvio del sistema, usare il comando iptables_save in combinazione con iptables_restore come visto in precedenza.

iptables-save > /etc/iptables.conf

Aggiungere il comando iptables_restore nel file /etc/init.d/boot.local

Inserire il seguente comando nel file /etc/init.d/boot.local di modo da configurare il firewall durante lo start del sistema automaticamente:

iptables-restore < /etc/iptables.conf

Dasabilitare SuseFirewall2

Se si decide di non usarlo si elimina direttamente il pacchetto. In caso che lo si volesse solo provissoriamente disattivare usare i seguenti comandi:

# /sbin/SuSEfirewall2 off
SuSEfirewall2: batch committing...
SuSEfirewall2: Firewall rules unloaded.
# /etc/init.d/SuSEfirewall2_setup stop
Shutting down the Firewall                                                                                                                                                                                                                                          done
#