Firewall logs are essential for recognizing attacks, troubleshooting your firewall rules, and noticing unusual activity on your network. You must include logging rules in your firewall for them to be generated, though, and logging rules must come before any applicable terminating rule (a rule with a target that decides the fate of the packet, such as ACCEPT, DROP, or REJECT). For example:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "
A request on port 80 from the local machine, then, would generate a log in dmesg that looks like this:
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
The above log will also appear in /var/log/messages
,
/var/log/syslog
, and /var/log/kern.log
.
This behavior can be modified by editing /etc/syslog.conf
appropriately or by installing and configuring ulogd
and using the ULOG target instead of LOG. The ulogd
daemon is a userspace server that listens for logging instructions from the kernel
specifically for firewalls, and can log to any file you like, or even to a
PostgreSQL or MySQL
database. Making sense of your firewall logs can be simplified by using a log
analyzing tool such as fwanalog,
fwlogwatch, or lire.