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.conf
will be configured before50-default.conf
.
Edit /etc/rsyslog.d/40-shorewall.conf
:
:msg, contains, "Shorewall:" -/var/log/shorewall.log & ~
- This is an
rsyslog
property-based filter which matches any log messages which contain the string Shorewall: and redirects them to the/var/log/shorewall.log
log file. - The "
& ~
" tellsrsyslog
to 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.log
log 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 & ~
rsyslog
filtering does not follow a simple syntax, so I recommend reading their official documentation to learn exactly how it works, asrsyslog
can 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"