Pi-Hole Integration With Wazuh
Pi-Hole Integration With Wazuh
Figure 1 shows the network layout that is used in this document for reference.
wget https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.8.1-1_amd64.deb
sudo WAZUH_MANAGER='192.168.33.6' WAZUH_AGENT_GROUP='Linux' WAZUH_AGENT_NAME='PiHole' dpkg -i
./wazuh-agent_4.8.1-1_amd64.deb
<ossec_config>
<localfile>
<log_format>syslog</log_format>
<location>/var/log/lighttpd/access-pihole.log</location>
</localfile>
<localfile>
<log_format>syslog</log_format>
<location>/var/log/pihole/pihole.log</location>
</localfile>
</ossec_config>
<!--
- DNSMasq decoder
- Author: Manuel König
- Date: 2024-07-19
-->
<!--
EXAMPLE LOGS
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(query\[A+\])\s+(\S+)\s+from\s+(\S+)</regex>
<order>type,url,srcip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(query\[HTTPS\])\s+(\S+)\s+from\s+(\S+)</regex>
<order>type,url,srcip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(query\[SVCB\])\s+(\S+)\s+from\s+(\S+)</regex>
<order>type,url,srcip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(forwarded)\s+(\S+)\s+to\s+(\S+)</regex>
<order>type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(dnssec-query\[DS\])\s+(\S+)\s+to\s+(\S+)</regex>
<order>type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(reply)\s+(\S+)\s+is\s+(\S+)</regex>
<order>type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(cached)\s+(\S+)\s+is\s+(\S+)</regex>
<order>type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">(gravity blocked)\s+(\S+)\s+is\s+(\S+)</regex>
<order>type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(validation result).is.(BOGUS|SECURE|INSECURE|
TRUNCATED)</regex>
<order>type,result</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s\S+.(blacklisted).(\S+).is.(\S+)</regex>
<order>type,url,dstip</order>
</decoder>
<!--
Decoder Extension for log-entries=extra
-->
<!--
https://dnsmasq.org/docs/dnsmasq-man.html
Log the results of DNS queries handled by dnsmasq. Enable a full cache dump on receipt of SIGUSR1.
If the argument "extra" is supplied, ie log-queries=extra then the log has extra information at
the start of each line.
This consists of a serial number which ties together the log lines associated with an individual
query, and the IP address of the requestor.
EXAMPLE LOGS
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(query\[A+\])\s+(\S+)\s+from\s+\
S+</regex>
<order>id,srcip,srcport,type,url</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(query\[HTTPS\])\s+(\S+)\s+from\
s+\S+</regex>
<order>id,srcip,srcport,type,url</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(query\[SVCB\])\s+(\S+)\s+from\
s+\S+</regex>
<order>id,srcip,srcport,type,url</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(forwarded)\s+(\S+)\s+to\s+(\
S+)</regex>
<order>id,srcip,srcport,type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(dnssec-query\[DS\])\s+(\S+)\s+to\s+(\S+)</
regex>
<order>id,type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(reply)\s+(\S+)\s+is\s+(\S+)</
regex>
<order>id,srcip,srcport,type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(cached)\s+(\S+)\s+is\s+(\S+)</
regex>
<order>id,srcip,srcport,type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(gravity blocked)\s+(\S+)\s+is\s+
(\S+)</regex>
<order>id,srcip,srcport,type,url,dstip</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s(validation result).is.(BOGUS|
SECURE|INSECURE|TRUNCATED)</regex>
<order>id,srcip,srcport,type,result</order>
</decoder>
<decoder name="dnsmasq-fields">
<parent>dnsmasq</parent>
<regex type="pcre2" offset="after_parent">\s(\d+)\s(\S+)\/(\S+)\s\S+.(blacklisted).(\S+).is.(\
S+)</regex>
<order>id,srcip,srcport,type,url,dstip</order>
</decoder>
Wazuh Rules
<!--
- DNSMasq rules
- Author: Manuel König
- Date: 2024-07-19
- ID range: 99900 - 99910
-->
<group name="syslog,dnsmasq,">
<!--
New Rule for blacklisted URLs
-->
</group>
Threat Hunting
With this basic ruleset you gain visibility about the DNS-Queries and you can filter
them. Now it’s on you to add new rules to the list and refine them so you get alerted.
Security Alerts
URL Filter