<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[I built a tool that automatically finds gaps in pfBlockerNG blocklists]]></title><description><![CDATA[<p dir="auto">I’ve been running pfSense + pfBlockerNG for a long time in my homelab, and one thing always bothered me:</p>
<p dir="auto">Even with large blocklists enabled, there were still a lot of missing IPs/domains compared to sources like FireHOL and Hagezi.</p>
<p dir="auto">So I built a self-hosted tool that:</p>
<ul>
<li>Reads your active pfBlockerNG lists directly from pfSense</li>
<li>Compares them against larger threat/blocklist sources</li>
<li>Finds only the missing entries ("gaps")</li>
<li>Generates optimized output files for pfBlockerNG</li>
<li>Shows recommendations in a simple web UI</li>
</ul>
<p dir="auto">The goal was to avoid:</p>
<ul>
<li>duplicate entries</li>
<li>giant overlapping lists</li>
<li>unnecessary downloads</li>
<li>manually comparing sources</li>
</ul>
<p dir="auto">It uses:</p>
<ul>
<li>pfSense</li>
<li>pfBlockerNG</li>
<li>GitHub Actions</li>
<li>Python</li>
<li>GitHub Pages</li>
</ul>
<p dir="auto">Current features:</p>
<ul>
<li>Automatic gap detection</li>
<li>DNSBL + IP support</li>
<li>Recommendation engine</li>
<li>Daily automated updates</li>
<li>Self-hosted web interface</li>
</ul>
<p dir="auto">Project:<br />
<a href="https://github.com/ngfblog/blocklist-manager" target="_blank" rel="noopener noreferrer nofollow ugc">blocklist-manager</a><br />
Would love feedback, ideas, or feature suggestions from other pfSense / homelab users.</p>
]]></description><link>https://forum.netgate.com/topic/200722/i-built-a-tool-that-automatically-finds-gaps-in-pfblockerng-blocklists</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 03:54:30 GMT</lastBuildDate><atom:link href="https://forum.netgate.com/topic/200722.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 24 May 2026 06:09:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to I built a tool that automatically finds gaps in pfBlockerNG blocklists on Sun, 24 May 2026 10:29:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/musicwizard">@<bdi>musicwizard</bdi></a> GitHub serves two purposes here it hosts the config file and runs the automation (GitHub Actions) that does the daily comparison and generates the output files.<br />
You could self-host everything on your own server, but then you'd need a cron job, Python environment, and a web server.<br />
GitHub Actions gives you all of that for free with zero maintenance.</p>
]]></description><link>https://forum.netgate.com/post/1243053</link><guid isPermaLink="true">https://forum.netgate.com/post/1243053</guid><dc:creator><![CDATA[ngf]]></dc:creator><pubDate>Sun, 24 May 2026 10:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to I built a tool that automatically finds gaps in pfBlockerNG blocklists on Sun, 24 May 2026 10:22:17 GMT]]></title><description><![CDATA[<p dir="auto">Well Yes but why would i have a the config file online? and not offline/own server. if its only for the config file.<br />
If that is the case i don't understand why you would need github at all?</p>
]]></description><link>https://forum.netgate.com/post/1243052</link><guid isPermaLink="true">https://forum.netgate.com/post/1243052</guid><dc:creator><![CDATA[musicwizard]]></dc:creator><pubDate>Sun, 24 May 2026 10:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to I built a tool that automatically finds gaps in pfBlockerNG blocklists on Sun, 24 May 2026 09:54:16 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/musicwizard">@<bdi>musicwizard</bdi></a> Fair point but the token goes directly to GitHub API only to read/write your own config file in your own repo. nothing passes through any server of mine and if you're not comfortable with the UI at all, just edit sources.yaml directly in GitHub the automation works without it.</p>
]]></description><link>https://forum.netgate.com/post/1243051</link><guid isPermaLink="true">https://forum.netgate.com/post/1243051</guid><dc:creator><![CDATA[ngf]]></dc:creator><pubDate>Sun, 24 May 2026 09:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to I built a tool that automatically finds gaps in pfBlockerNG blocklists on Sun, 24 May 2026 09:51:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bob.dig">@<bdi>Bob.Dig</bdi></a> The tool doesn't replace FireHOL - it uses it as a comparison source.<br />
I already have ET, Spamhaus, Hagezi etc configured - adding FireHOL on top creates massive duplicates. the tool finds only what's missing and outputs a clean file. same coverage, without the mess.</p>
]]></description><link>https://forum.netgate.com/post/1243050</link><guid isPermaLink="true">https://forum.netgate.com/post/1243050</guid><dc:creator><![CDATA[ngf]]></dc:creator><pubDate>Sun, 24 May 2026 09:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to I built a tool that automatically finds gaps in pfBlockerNG blocklists on Sun, 24 May 2026 07:50:54 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ngf">@<bdi>ngf</bdi></a> I got a question you said this is self-hosted but still you need gethub token to use it. Which makes me already not trust it as self-hosted.</p>
]]></description><link>https://forum.netgate.com/post/1243047</link><guid isPermaLink="true">https://forum.netgate.com/post/1243047</guid><dc:creator><![CDATA[musicwizard]]></dc:creator><pubDate>Sun, 24 May 2026 07:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to I built a tool that automatically finds gaps in pfBlockerNG blocklists on Sun, 24 May 2026 08:01:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ngf">@<bdi>ngf</bdi></a> said in <a href="/post/1243042">I built a tool that automatically finds gaps in pfBlockerNG blocklists</a>:</p>
<blockquote>
<p dir="auto">FireHOL</p>
</blockquote>
<p dir="auto">Why don't you just use firehol in the first place?<br />
And PfBlocker is doing <s>most of the stuff</s> everything you proclaim for yourself already...</p>
]]></description><link>https://forum.netgate.com/post/1243045</link><guid isPermaLink="true">https://forum.netgate.com/post/1243045</guid><dc:creator><![CDATA[Bob.Dig]]></dc:creator><pubDate>Sun, 24 May 2026 08:01:46 GMT</pubDate></item></channel></rss>