By default Shorewall will log firewall messages to /var/log/messages if you are running CentOS, or /var/log/syslog if you are running Ubuntu.
Sample log message from Shorewall using default format:
Jul 13 01:30:42 localhost kernel: [37078.720986] Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:0c:29:85:73:f2:00:1d:d0:cd:3b:81:08:00 SRC=128.72.226.39 DST=192.168.0.16 LEN=129 TOS=0x08 PREC=0x20 TTL=104 ID=19418 PROTO=UDP SPT=11888 DPT=51413 LEN=109
Despite the LOGFILE=/var/log/messages parameter in the shorewall.conf file, this directive isn't used to redirect logs to a custom file. As described from man shorewall.conf:
LOGFILE=[pathname]
This parameter tells the /sbin/shorewall program where to look for Shorewall messages
when processing the dump, logwatch, show log, and hits commands. If not assigned or if
assigned an empty value, /var/log/messages is assumed. For further information, see
http://www.shorewall.net/shorewall_logging.html.
Using rsyslog to redirect messages
Configurations done through rsyslog will allow Shorewall log messages to be redirected to a custom file.
Create the /etc/rsyslog.d/40-shorewall.conf file:
# touch /etc/rsyslog.d/40-shorewall.conf # ls -l /etc/rsyslog.d total 8 -rw-r--r-- 1 root root 311 Mar 17 2012 20-ufw.conf -rw-r--r-- 1 root root 0 Jul 13 02:04 40-shorewall.conf -rw-r--r-- 1 root root 1655 May 19 2013 50-default.conf
- The numerical prefix determines the order at which the configuration files are read by
rsyslog, i.e. settings in40-shorewall.confwill be configured before50-default.conf.
Edit /etc/rsyslog.d/40-shorewall.conf:
:msg, contains, "Shorewall:" -/var/log/shorewall.log & ~
- This is an
rsyslogproperty-based filter which matches any log messages which contain the string Shorewall: and redirects them to the/var/log/shorewall.loglog file. - The "
& ~" tellsrsyslogto stop processing the message after it was written to the log. Without the "& ~", messages would continue to be written to local files such as/var/log/syslog. - If you wanted messages to still show up in
/var/log/{syslog,messages}then the "& ~" can be omitted.
Anytime custom log files are made, an accompanying /etc/logrotate.d configuration file should be created or updated. Shorewall by default creates /etc/logrotate.d/shorewall which controls rotation of the /var/log/shorewall-init.log file. Add a directive to control /var/log/shorewall.log:
# cat /etc/logrotate.d/shorewall
/var/log/shorewall-init.log {
weekly
rotate 4
compress
missingok
create 0640 root adm
}
/var/log/shorewall.log {
weekly
rotate 52
compress
compressext .gz
missingok
create 0640 root adm
}
- This will rotate the
shorewall.loglog file every week and store archived log files for 52 weeks (1 year).
Restart the rsyslog service:
# service rsyslog restart
The restart should have triggered the /var/log/shorewall.log file to be created, if not, try to port-scan or trigger an event and see if the file was created:
# ls -l /var/log/shorewall.log -rw-r----- 1 syslog adm 0 Jul 13 02:27 /var/log/shorewall.log
rsyslog template
I created a template to shorten the log messages, as Shorewall log messages can be quite long and verbose, by adding another line to /etc/rsyslog.d/40-shorewall.conf:
$template shorewall-template,"%timegenerated% %msg%\n" :msg, contains, "Shorewall:" -/var/log/shorewall.log;shorewall-template & ~
rsyslogfiltering does not follow a simple syntax, so I recommend reading their official documentation to learn exactly how it works, asrsyslogcan be leveraged to do very complex and powerful configurations.- Though not much, the template removes the
localhost kernel:portion in the message:
From this: Jul 13 01:30:42 localhost kernel: [37078.720986] Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:0c:29:85:73:f2:00:1d:d0:cd:3b:81:08:00 SRC=128.72.226.39 DST=192.168.0.16 LEN=129 TOS=0x08 PREC=0x20 TTL=104 ID=19418 PROTO=UDP SPT=11888 DPT=51413 LEN=109 To this: Jul 13 01:30:42 [37078.720986] Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:0c:29:85:73:f2:00:1d:d0:cd:3b:81:08:00 SRC=128.72.226.39 DST=192.168.0.16 LEN=129 TOS=0x08 PREC=0x20 TTL=104 ID=19418 PROTO=UDP SPT=11888 DPT=51413 LEN=109
Very helpful: clear and comprehensive!
ReplyDeleteThank you. Excellent info.
ReplyDeletePerfect, it works on Linux Mint exactly as described. Thank you very much.
ReplyDelete$ cat /etc/linuxmint/info
RELEASE=17.2
CODENAME=rafaela
EDITION="Cinnamon 64-bit"
DESCRIPTION="Linux Mint 17.2 Rafaela"
$ shorewall status
Shorewall-4.5.21.6 Status at jarvis - Mon Jul 20 20:24:43 CEST 2015
Shorewall is running
State:Started (Sun Jul 19 18:00:43 CEST 2015) from /etc/shorewall/
/var/lib/shorewall/firewall was compiled by Shorewall version 4.5.21.6
$ rsyslogd -version
rsyslogd 7.4.4, compiled with:
FEATURE_REGEXP: Yes
FEATURE_LARGEFILE: No
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
Runtime Instrumentation (slow code): No
uuid support: Yes
Very Useful!!!!
ReplyDeleteBrill - thank you!
ReplyDeleteI decided to also omit 'Shorewall:', whilst retaining the unix timestamp:
ReplyDelete$template shorewall-template,"%timegenerated% %msg:F,32:1% %msg:R,ERE,1,FIELD:Shorewall:(.*)--end%\n"