Logging


By default, Shorewall directs NetFilter to log using syslog (8). Syslog classifies log messages by a facility and a priority (using the notation facility.priority).

The facilities defined by syslog are auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, uucp and local0 through local7.

Throughout the Shorewall documentation, I will use the term level rather than priority since level is the term used by NetFilter. The syslog documentation uses the term priority.

Syslog Levels

Syslog levels are a method of describing to syslog (8) the importance of a message and a number of Shorewall parameters have a syslog level as their value.

Valid levels are:

       7       debug
       6       info
       5       notice
       4       warning
       3       err
       2       crit
       1       alert
       0       emerg

For most Shorewall logging, a level of 6 (info) is appropriate. Shorewall log messages are generated by NetFilter and are logged using the kern facility and the level that you specify. If you are unsure of the level to choose, 6 (info) is a safe bet. You may specify levels by name or by number.

Syslogd writes log messages to files (typically in /var/log/*) based on their facility and level. The mapping of these facility/level pairs to log files is done in /etc/syslog.conf (5). If you make changes to this file, you must restart syslogd before the changes can take effect.

Configuring a Separate Log for Shorewall Messages

There are a couple of limitations to syslogd-based logging:
  1. If you give, for example, kern.info it's own log destination then that destination will also receive all kernel messages of levels 5 (notice) through 0 (emerg).
  2. All kernel.info messages will go to that destination and not just those from NetFilter.
Beginning with Shorewall version 1.3.12, if your kernel has ULOG target support (and most vendor-supplied kernels do), you may also specify a log level of ULOG (must be all caps). When ULOG is used, Shorewall will direct netfilter to log the related messages via the ULOG target which will send them to a process called 'ulogd'. The ulogd program is available from http://www.gnumonks.org/projects/ulogd and can be configured to log all Shorewall message to their own log file.

Download the ulod tar file and:
  1. cd /usr/local/src (or wherever you do your builds)
  2. tar -zxf source-tarball-that-you-downloaded
  3. cd ulogd-version
  4. ./configure
  5. make
  6. make install
If you are like me and don't have a development environment on your firewall, you can do the first five steps on another system then either NFS mount your /usr/local/src directory or tar up the /usr/local/src/ulogd-version directory and move it to your firewall system.

Now on the firewall system, edit /usr/local/etc/ulogd.conf and set:
  1. syslogfile <file that you wish to log to>
  2. syslogsync 1
I also copied the file /usr/local/src/ulogd-version/ulogd.init to /etc/init.d/ulogd. I had to edit the line that read "daemon /usr/local/sbin/ulogd" to read daemon /usr/local/sbin/ulogd -d". On a RedHat system, a simple "chkconfig --level 3 ulogd on" starts ulogd during boot up. Your init system may need something else done to activate the script.

Finally edit /etc/shorewall/shorewall.conf and set LOGFILE=<file that you wish to log to>. This tells the /sbin/shorewall program where to look for the log when processing its "show log", "logwatch" and "monitor" commands.

Updated 12/29/2002 - Tom Eastep

Copyright © 2001, 2002 Thomas M. Eastep