Qualsiasi firewall che si rispetti, oltre a dover filtrare il traffico secondo le regole definite dall'utente, deve mettere a disposizione un buon meccanismo di logging. In tal senso, iptables rientra a pieno titolo tra i firewall degni nota.
In particolare, il firewall in questione consente di loggare il traffico mediante rsyslogd, variante del celeberrimo syslogd, ovvero il demone *nix che si occupa del salvataggio dei log. Ma vediamo come realizzare il logging attraverso iptables.
Per prima cosa, dobbiamo decidere cosa loggare. Potremmo infatti "registrare" tutto il traffico che attraversa il firewall, oppure concentrarci esclusivamente sul traffico droppato. Personalmente ritengo che, per le reti di piccola dimensione, la seconda scelta sia sicuramente la migliore.
Ora, poichè iptables interpreta le regole seguendo una logica top-down, affinchè il traffico possa essere loggato è necessario fare in modo che i pacchetti vengano registrati immediatamente prima di essere scartati.
Quindi, il giusto ordine delle rule dovrebbe essere il seguente:
iptables -A INPUT -s 10.0.0.0/8 -i eth1 -j LOG --log-prefix "Spoofed traffic detected: " --log-level 4
iptables -A FORWARD -s 10.0.0.0/8 -i eth1 -j LOG --log-prefix "Spoofed traffic detected: " --log-level 4
iptables -A INPUT -s 10.0.0.0/8 -i eth1 -j DROP
iptables -A FORWARD -s 10.0.0.0/8 -i eth1 -j DROP
Come potete notare, prima ho loggato il traffico spoofato e solo dopo ho scartato i pacchetti incriminati. Inoltre, alcuni parametri interessanti per il logging che ho utilizzato nelle regole precedenti sono:
--log-prefix, che ci permette di identificare più facilmente i log relativi ai pacchetti droppati dal firewall (il prefisso può essere costituito da un massimo di 29 caratteri);
--log-level, che ci consente di definire la "pericolosità" degli eventi registrati dal firewall.
Nella fattispecie, i log level utilizzati da rsyslogd sono i seguenti:
level verbose explanation
0 emerg system is unusable
1 alert action must be taken immediately
2 crit the system is in a critical condition
3 err there is an error condition
4 warning there is a warning condition
5 notice a normal but significant condition
6 info a purely informational message
7 debug messages generated to debug the application
Detto ciò, per il logging dei pacchetti droppati da iptables ho utilizzato un livello 4, ovvero warning.
Creiamo ora il file di log vero e proprio, in cui verranno salvati gli eventi intercettati dal firewall:
nightfly@nightbox:~$ sudo touch /var/log/iptables.log
Infine, modifichiamo il file di configurazione di rsyslogd:
nightfly@nightbox:~$ sudo nano /etc/rsyslog.d/50-default.conf
ed inseriamo la seguente stringa:
kern.warning /var/log/iptables.log
da posizionare subito prima di
kern.* -/var/log/kern.log
Riavviamo rsyslogd digitando:
nightfly@nightbox:~$ sudo service rsyslog restart
ed il gioco è fatto.
A presto.