Wazuh fix note · pfSense syslog

pfSense logs not showing in Wazuh

Two separate causes, both measured on Wazuh 4.14.7. A single pfSense block event never becomes an alert, because the stock rule for it, 87701, carries no_log; you only see rule 87702 after 18 blocks from one source within 45 seconds. And if pfSense sends its logs in RFC 5424 format, no stock decoder matches them at all, so nothing fires, ever.

Dong Nguyen, ATK New Technology · 2 October 2026 · measured on Wazuh 4.14.7 (manager container, syslog over UDP 514)

Stuck on this right now? Email your custom rules or decoders, one sample log line and your Wazuh version to dongnx@atkvn.com. We run them on that exact version and reply within 24 hours with what we find. Free. Remove hostnames, IPs and usernames first. Rather not send them? Run the free pre-check in your browser; your files never leave your machine. Rather have it fixed? USD 149 fixed price per problem, reproduced on your version, and you pay only after it works on your system. Our first three customers pay USD 49 for one fix, in exchange for an anonymised write-up we can publish.


How to check in one minute

1. Are the logs arriving at all? Turn on <logall>yes</logall> in the manager's ossec.conf for a few minutes, restart, then:

grep filterlog /var/ossec/logs/archives/archives.log | tail -n 3

Nothing there means the problem is before Wazuh: the <remote> syslog block, <allowed-ips>, or a firewall between pfSense and the manager. Turn logall off again afterwards; it writes every event to disk.

2. Which format are they in? Look at one of those lines.

  • BSD (RFC 3164) looks like Oct  2 15:00:01 pfSense filterlog[12345]: 5,,,1000000103,igb1,match,block,in,4,...
  • RFC 5424 looks like 1 2026-10-02T15:00:01.123456+07:00 pfSense.home.arpa filterlog 12345 - - 5,,,1000000103,igb1,... (the leading <134> priority is stripped on the way in).

3. Does the stock decoder read it? Paste one line into the manager:

/var/ossec/bin/wazuh-logtest

A BSD line decodes as name: 'pf' with srcip, dstip and action. An RFC 5424 line returns No decoder matched.

Why it happens

Cause 1: a single block is not logged, by design

The stock rules in ruleset/rules/0540-pfsense_rules.xml on 4.14.7:

RuleLevelMatchesBecomes an alert?
877000any filterlog event decoded as pfno (level 0)
877015action = blockno, it has <options>no_log</options>
877021018 × 87701 from the same source IP within 45 syes

The comment above 87701 in that file reads "We don't log firewall events, because they go to their own log file." Pass events stop at 87700, level 0. So with stock rules, a working pfSense integration shows nothing in the dashboard until someone hammers one address 18 times in 45 seconds.

We sent one BSD block line over UDP syslog to a 4.14.7 manager: it reached archives.log, and alerts.json stayed empty. We sent 18 within the window in wazuh-logtest: the 18th came back as 87702, level 10.

Note: wazuh-logtest prints "Alert to be generated" for 87701 even though the running manager does not write it. Logtest does not apply no_log; check alerts.json, not logtest, for this case.

Cause 2: RFC 5424 lines match no decoder

The stock pf decoder is keyed on <program_name>filterlog</program_name>, which Wazuh's pre-decoder takes from a BSD-style header (host program[pid]:) or from an ISO timestamp followed by host program[pid]:. An RFC 5424 header (1 <timestamp> <host> filterlog <pid> - -) is not split that way: no program name, so no decoder, so no rule. In archives.log the line even shows the manager's own host name instead of the firewall's, because the header was not parsed.

Line sent (UDP 514, Wazuh 4.14.7)Decoder
BSD: Oct 2 15:00:01 pfSense filterlog[12345]: ...pf — srcip, dstip, action read
ISO time, BSD-style tag: 2026-10-02T15:00:01.123456+07:00 pfSense.home.arpa filterlog[12345]: ...pf — read
RFC 5424: <134>1 2026-10-02T15:00:01.123456+07:00 pfSense.home.arpa filterlog 12345 - - ...No decoder matched

Fix

1. Send BSD format. In pfSense, Status → System Logs → Settings, set the log message format to BSD (RFC 3164) and save. New lines decode as pf immediately; no manager change needed. If a central syslog server sits in between and rewrites to RFC 5424, fix it there, or you need a custom decoder for that header.

2. Decide which block events you want as alerts. To alert on every single block, overwrite 87701 without no_log in /var/ossec/etc/rules/local_rules.xml:

<group name="local,pfsense,">
  <rule id="87701" level="5" overwrite="yes">
    <if_sid>87700</if_sid>
    <action>block</action>
    <description>pfSense firewall drop event.</description>
    <group>firewall_block,pci_dss_1.4,gpg13_4.12,hipaa_164.312.a.1,nist_800_53_SC.7,tsc_CC6.7,tsc_CC6.8,</group>
  </rule>
</group>

Run /var/ossec/bin/wazuh-analysisd -t, then restart the manager. On 4.14.7 this loaded with no warnings, and the same single block line that produced nothing before produced one 87701 alert in alerts.json.

Be careful with volume: a firewall on the internet blocks a lot. Many teams prefer a narrower child rule instead, for example only blocks on an internal interface or to a sensitive port, and leave 87701 as it is.

Limits of what we measured

Measured on a Wazuh 4.14.7 manager container receiving syslog over UDP 514 from 127.0.0.1, and in wazuh-logtest. We did not run a pfSense appliance: the log lines were written by us in the filterlog format, for one IPv4 TCP block and one pass. We have not measured IPv6, other pfSense programs (dhcpd, OpenVPN, unbound), OPNsense, or other Wazuh versions. Menu names in pfSense differ between releases.

Have it working

Need pfSense, or another log source, decoded and alerting the way you want? Send 5–10 sample lines (masked) and your Wazuh version to dongnx@atkvn.com. We write the decoder and rules, test them on your exact version, and send the files with apply and rollback steps. USD 149 per log source, paid after it works on your system.