<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Network - Tag - arleo.eu</title><link>https://www.arleo.eu/en/tags/network/</link><description>Network - Tag - arleo.eu</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 15 Apr 2026 19:02:00 +0200</lastBuildDate><atom:link href="https://www.arleo.eu/en/tags/network/" rel="self" type="application/rss+xml"/><item><title>CrowdSec Log Pipeline with Vector: Filtering Noise and Capturing Real Bans</title><link>https://www.arleo.eu/en/posts/crowdsec-vector-pipeline/</link><pubDate>Wed, 15 Apr 2026 19:02:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/crowdsec-vector-pipeline/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/crowdsec-vector-pipeline-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>The initial Vector pipeline was flooding BetterStack with ~500 events/24h, of which 434 were CAPI pulls with no local monitoring value. This work reconfigures the Vector filter to keep only high-value bans (<code>cscli</code>) and fixes a major blind spot: actual nginx-lua bouncer bans were not appearing anywhere in BetterStack.</p>
<h2 id="-why">🧠 Why</h2>
<p>This homelab&rsquo;s security stack relies on three components working together:</p>
<ul>
<li><strong>nginx</strong> with the CrowdSec lua bouncer (<code>lua-resty-crowdsec</code>) for real-time request blocking</li>
<li><strong>CrowdSec</strong> for threat detection and ban decision management</li>
<li><strong>Vector</strong> centralizing logs to BetterStack for monitoring</li>
</ul>
<p>After setting up the initial pipeline, two problems quickly became apparent. First, the signal was drowned in noise: out of 500 events/24h, 434 came from the hourly community CAPI pull and 66 from third-party lists — neither represents a threat detected on <em>this</em> infrastructure. Second, actual lua bouncer bans (real-time blocks in nginx) were not appearing anywhere in BetterStack, creating a blind spot on real security activity.</p>]]></description></item><item><title>Automating IP Bans with Cloudflare WAF, CrowdSec and AbuseIPDB</title><link>https://www.arleo.eu/en/posts/crowdsec-cloudflare-waf-autoban/</link><pubDate>Fri, 10 Apr 2026 00:23:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/crowdsec-cloudflare-waf-autoban/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/crowdsec-cloudflare-waf-autoban-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>Passive monitoring is not enough. This pipeline automates <strong>closing the loop in under 5 minutes</strong> between an attack detected by Cloudflare WAF and the effective ban of the IP in CrowdSec, its synchronization to Cloudflare, and its report to AbuseIPDB. A Python script polls the Cloudflare GraphQL API every 5 minutes, applies a 3-hit threshold, and triggers the ban with recidivist escalation.</p>
<h2 id="-why">🧠 Why</h2>
<p>Seeing an attack in BetterStack logs after the fact does not stop the malicious IP from continuing to hammer the server. Without automation, the detection → ban loop takes hours or never closes. Cloudflare WAF actions (<code>block</code>, <code>challenge</code>, <code>managed_challenge</code>, <code>jschallenge</code>) are clear attack signals, but they remain confined to the Cloudflare dashboard — without a bridge to CrowdSec, no IP is banned locally, none is reported to the AbuseIPDB community.</p>]]></description></item><item><title>Post-Mortem — Incident 522 / WAN Failover (April 8, 2026)</title><link>https://www.arleo.eu/en/posts/post-mortem-522-wan-failover/</link><pubDate>Wed, 08 Apr 2026 00:35:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/post-mortem-522-wan-failover/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/post-mortem-522-wan-failover-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p><strong>Date:</strong> April 7-8, 2026 — <strong>Duration:</strong> ~3h (21:28 UTC → 22:31 UTC) — <strong>Severity:</strong> P1</p>
<p>arleo.eu was unreachable for 3 hours. The root cause was not the server, not nginx, not CrowdSec — it was an HTTPS port forwarding rule attached to generic <code>WAN</code> instead of explicit <code>WAN1</code> on the Netgear PR60X. The daily DHCP lease renewal of the 4G modem (WAN2) triggered a NAT rebalance that broke routing to port 443.</p>]]></description></item></channel></rss>