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.
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 #