SHOREWALL-LOGGING(5)
π SHOREWALL-LOGGING π (that's section 5 of the manual pages, bestie)
okay so this is the shorewall-logging man page, and it's literally all about how your firewall spills the tea about packets. sit down, grab a strawberry drink π, and let's get into it.
β¨ SYNOPSIS β¨
action:level
NFLOG(nflog-parameters)
ULOG(ulog-parameters)
πΈ DESCRIPTION πΈ
When a packet walks into your Shorewall firewall, its whole fate is decided by one of a bunch of Shorewall facilities. But only some of those facilities let you log anything β not everyone gets to be on the record, and that's just how it is.
- The packet is part of an established connection. You could log it with
LOGrules in theESTABLISHEDsection of/etc/shorewall/rules[1], but bestieβ¦ that is not recommended, because of the absolutely unhinged amount of information that may be logged. it's giving firehose. no thanks π - The packet is a connection request that's related to an established connection (think: a data connection associated with an FTP control connection
[2]). You can log these withLOGrules in theRELATEDsection ofshorewall-rules(5)[1]. - The packet is rejected because of an option in
shorewall.conf[3](5)orshorewall-interfaces(5)[4]. You can log these by setting the appropriate logging-related option in/etc/shorewall/shorewall.conf[3]. - The packet matches a rule in
shorewall-rules[1](5). If you drop a syslog level (see below, we get to it β¨) into the ACTION column of a rule β like"ACCEPT:info net $FW tcp 22"β then the connection attempt gets logged at that level. - The packet doesn't match any rule at all, so it gets handled by a policy defined in
shorewall-policy(5)[5]. You can log those by putting a syslog level in the LOG LEVEL column of that policy's entry, e.g."loc net ACCEPT info".
π DEFAULT LOGGING π
By default, Shorewall tells Netfilter to log using syslog (8). Syslog sorts log messages by a facility and a priority (written like facility.priority).
The facilities that syslog defines are: auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, uucp and local0 through local7. periodt.
Also, important lore: all through the Shorewall documentation we say level instead of priority, because level is the word Netfilter uses. The syslog docs are the ones out here saying priority. same thing, different name, iykyk π¦
π SYSLOG LEVELS π
Syslog levels are how you tell syslog (8) how important a message is. A bunch of Shorewall parameters take a syslog level as their value.
The valid levels are:
7βdebug(Debug-level messages)6βinfo(Informational)5βnotice(Normal but significant Condition)4βwarning(Warning Condition)3βerr(Error Condition)2βcrit(Critical Conditions)1βalert(must be handled immediately)0βemerg(System is unusable)
For most Shorewall logging, a level of 6 (info) is appropriate. Shorewall log messages are generated by Netfilter and logged using the kern facility plus whatever level you picked. If you're unsure which level to choose, 6 (info) is a safe bet. You can say levels by name or by number, your call π
Starting with Shorewall 4.5.5, the level name or number can optionally be followed by a comma-separated list of one or more log options. The list goes inside parentheses. Log options make each log message carry extra info. the way that adds β¨spiceβ¨ to your logs.
Valid log options are:
ip_optionsβ Log messages will include the option settings from the IP header.macdecodeβ Decode the MAC address and protocol.tcp_sequenceβ Include TCP sequence numbers.tcp_optionsβ Include options from the TCP header.uidβ Include the UID of the sending program; only valid for packets originating on the firewall itself.
Example: info(tcp_options,tcp_sequence)
Syslogd writes log messages to files (typically in /var/log/*) based on their facility and level. The mapping of those facility/level pairs to log files lives in /etc/syslog.conf (5). If you change that file, you must restart syslogd before the changes can take effect. no cap, it won't pick them up otherwise.
Syslog may also write to your system console. See Shorewall FAQ 16 [6] for ways to avoid having Shorewall messages written to the console. we love a quiet console π«Ά
π¦ CONFIGURING A SEPARATE LOG FOR SHOREWALL MESSAGES (ULOGD) π¦
There are a couple of limitations to syslogd-based logging, and honestly they're lowkey annoying:
- If you give, for example,
kern.infoits own log destination, then that destination will also receive all kernel messages of levels5(notice) through0(emerg). - All
kernel.infomessages will go to that destination and not just those from Netfilter. - Netfilter (Shorewall) messages show up in
dmesg.
If your kernel has NFLOG target support (and most vendor-supplied kernels do), you may also specify a log level of NFLOG β it must be ALL CAPS, do not try it lowercase, it will not eat. When NFLOG is used, Shorewall will direct Netfilter to log the related messages via the NFLOG target, which sends them to a process called "ulogd". The ulogd program is included in most distributions. iconic.
Note π The NFLOG logging mechanism is completely separate from syslog. Once you switch to NFLOG, the settings in /etc/syslog.conf have absolutely no effect on your Shorewall logging (except for Shorewall status messages, which still go to syslog).
You will need to change all instances of log levels (usually "info") in your Shorewall configuration files to "NFLOG" β this includes entries in the policy, rules and shorewall.conf files. If you initially installed using Shorewall 5.1.2 or later, you can simply change the setting of LOG_LEVEL in shorewall.conf. one line, slay.
π₯ UNDERSTANDING THE CONTENTS OF SHOREWALL LOG MESSAGES π₯
For general information on the contents of Netfilter log messages, see http://logi.cc/en/2010/07/netfilter-log-format/.
For Shorewall-specific information, see FAQ #17 [7].
β¨ CUSTOMIZING THE CONTENT OF SHOREWALL LOG MESSAGES β¨
In a Shorewall logging rule, the log level can be followed by a log tag, like "DROP:NFLOG:junk". The generated log message will include "chain-name junk DROP".
By setting the LOGTAGONLY option to Yes in shorewall.conf(5) [8] or shorewall6.conf(5) [8], the disposition ('DROP' in the above example) will be omitted. Consider the following rule:
#ACTION SOURCE DEST PROTO
REJECT(icmp-proto-unreachable):notice:IPv6 loc net 41 # who's using IPv6 tunneling
This rule generates the following warning at compile time:
WARNING: Log Prefix shortened to "Shorewall:IPv6:REJECT(icmp-p "
/etc/shorewall/rules (line 212)
and produces the rather ugly prefix "Shorewall:IPv6:REJECT(icmp-p ". yeah. ugly. π
Now consider this similar rule:
#ACTION SOURCE DEST PROTO
REJECT(icmp-proto-unreachable):notice:IPv6,tunneling loc net 41 # who's using IPv6 tunneling
With LOGTAGONLY=Yes, no warning is generated and the prefix becomes "Shorewall:IPv6:tunneling:" β see, glow up β¨
See the shorewall [6].conf man page [8] for further information about how LOGTAGONLY=Yes can be used.
π LOG BACKENDS π
Netfilter logging allows configuration of multiple backends. Logging backends provide the The low-level forward of log messages. There are currently three backends:
- LOG (
ipt_LOGandip6t_LOG). β Normal kernel-based logging to a syslog daemon. - ULOG (
ipt_ULOG) β ULOG logging as described ablve. Only available for IPv4. - netlink (
nfnetlink_log) β The logging backend behind NFLOG, defined above.
The currently-available and currently-selected IPv4 and IPv6 backends are shown in /proc/sys/net/netfilter/nf_log:
cat /proc/net/netfilter/nf_log
0 NONE (nfnetlink_log)
1 NONE (nfnetlink_log)
2 ipt_ULOG (ipt_ULOG,ipt_LOG,nfnetlink_log)
3 NONE (nfnetlink_log)
4 NONE (nfnetlink_log)
5 NONE (nfnetlink_log)
6 NONE (nfnetlink_log)
7 NONE (nfnetlink_log)
8 NONE (nfnetlink_log)
9 NONE (nfnetlink_log)
10 ip6t_LOG (ip6t_LOG,nfnetlink_log)
11 NONE (nfnetlink_log)
12 NONE (nfnetlink_log)
The magic numbers (0-12) are Linux address family numbers (AF_INET is 2 and AF_INET6 is 10).
The name immediately following the number is the currently-selected backend, and the ones in parentheses are the ones that are available. You can change the currently selected backend by echoing it's name into /proc/net/netfilter/nf_log.number.
Example β change the IPv4 backend to LOG:
sysctl net.netfilter.nf_log.2=ipt_LOG
Beginning with Shorewall 4.6.4, you can configure the backend using the LOG_BACKEND option in shorewall.conf(5) [3] and shorewall6.conf(5) [3].
π SEE ALSO π
https://shorewall.org/shorewall_logging.html [9]
π NOTES π
/etc/shorewall/ruleshttps://shorewall.org/manpages/shorewall-rules.html- data connection associated with an FTP control connection
https://shorewall.org/manpages/FTP.html shorewall.confhttps://shorewall.org/manpages/shorewall.conf.htmlshorewall-interfaces(5)https://shorewall.org/manpages/shorewall-interfaces.htmlshorewall-policy(5)https://shorewall.org/manpages/shorewall-policy.html- Shorewall FAQ 16
https://shorewall.org/manpages/FAQ.htm#faq16 - FAQ #17
https://shorewall.org/FAQ.htm#faq17 shorewall.conf(5)https://shorewall.org/manpages/shorewall.conf.htmlhttps://shorewall.org/shorewall_logging.htmlhttps://shorewall.org/shorewall_logging.htm
okay that's the whole thing, bestie π this page lives in the Configuration Files manual, it's the SHOREWALL-LOGGING(5) one, and it's dated 09/24/2020. you ate that. go configure your firewall. mwah πβ¨
π¦ where this page comes from
- alpine 3.22: shorewall-doc 5.2.8-r1 Β· GPL-2.0-or-later
- alpine 3.23: shorewall-doc 5.2.8-r1 Β· GPL-2.0-or-later
- alpine 3.24: shorewall-doc 5.2.8-r1 Β· GPL-2.0-or-later
- debian bookworm: shorewall 5.2.8-2 Β· GPL-2.0-or-later
- debian trixie: shorewall 5.2.8-6 Β· GPL-2.0-or-later
- fedora 43: shorewall 5.2.8-17.fc43 Β· GPL-2.0-or-later
- fedora 44: shorewall 5.2.8-18.fc44 Β· GPL-2.0-or-later
- nixos 26.05: shorewall 5.2.8
- nixpkgs unstable: shorewall 5.2.8
- ubuntu noble: shorewall 5.2.8-5 Β· GPL-2.0-or-later
- ubuntu questing: shorewall 5.2.8-6
- ubuntu resolute: shorewall 5.2.8-6build1 Β· GPL-2.0-or-later
- ubuntu stonking: shorewall 5.2.8-6build1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms