<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Monitoring - Balise - arleo.eu</title>
        <link>https://www.arleo.eu/tags/monitoring/</link>
        <description>Monitoring - Balise - arleo.eu</description>
        <generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Thu, 28 May 2026 23:40:12 &#43;0200</lastBuildDate><atom:link href="https://www.arleo.eu/tags/monitoring/" rel="self" type="application/rss+xml" /><item>
    <title>CSP A&#43; sur Hugo &#43; Cloudflare : de hash-based à origin allowlist, monitoring auto et durcissement</title>
    <link>https://www.arleo.eu/posts/csp-a-plus-hugo-cloudflare-origin-allowlist/</link>
    <pubDate>Thu, 28 May 2026 23:40:12 &#43;0200</pubDate>
    <author>Jmr</author>
    <guid>https://www.arleo.eu/posts/csp-a-plus-hugo-cloudflare-origin-allowlist/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/images/csp-a-plus-hugo-cloudflare-origin-allowlist-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="contexte">Contexte</h2>
<p>arleo.eu tourne sur Hugo (VM KVM) → OpenResty (NUC) → Cloudflare (CDN/WAF). Objectif : score <strong>A+ sur Mozilla Observatory</strong> avec une CSP stricte qui résiste aux injections côté edge.</p>
<p>Le parcours a traversé trois stratégies en quelques semaines — nonces, hashes, puis origin allowlist — avant d&rsquo;aboutir à une solution stable et automatisée.</p>
<hr>
<h2 id="acte-1--pourquoi-hash-based-a-échoué">Acte 1 : pourquoi hash-based a échoué</h2>
<p>L&rsquo;idée de départ semblait solide : Hugo Pipes externalise tout le JS avec SRI, on liste les hashes dans la CSP, résultat propre. En pratique, deux problèmes ont rendu l&rsquo;approche impossible.</p>]]></description>
</item>
<item>
    <title>SRI sur Hugo : hashes automatiques, auto-update et alerting BetterStack</title>
    <link>https://www.arleo.eu/posts/sri-cdn-hugo-automate/</link>
    <pubDate>Sun, 17 May 2026 00:00:00 &#43;0000</pubDate>
    <author>Jmr</author>
    <guid>https://www.arleo.eu/posts/sri-cdn-hugo-automate/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/images/sri-cdn-hugo-automate-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="pourquoi-le-sri-">Pourquoi le SRI ?</h2>
<p>Quand votre site charge des ressources depuis un CDN tiers — FontAwesome, Mermaid, Animate.css — vous faites confiance à un tiers sur lequel vous n&rsquo;avez aucun contrôle. Si jsdelivr.net est compromis ou si une version « immuable » est mutée silencieusement, votre site peut devenir vecteur d&rsquo;attaque.</p>
<p>Le <strong>Subresource Integrity</strong> (SRI) résout ça simplement : chaque balise <code>&lt;link&gt;</code> ou <code>&lt;script&gt;</code> porte un attribut <code>integrity=&quot;sha256-…&quot;</code> que le navigateur vérifie avant d&rsquo;exécuter la ressource. Si le hash ne correspond pas, le navigateur bloque le chargement.</p>]]></description>
</item>
<item>
    <title>Pipeline de logs CrowdSec avec Vector : filtrer le bruit et capturer les vrais bans</title>
    <link>https://www.arleo.eu/posts/crowdsec-vector-pipeline/</link>
    <pubDate>Wed, 15 Apr 2026 19:01:00 &#43;0200</pubDate>
    <author>Jmr</author>
    <guid>https://www.arleo.eu/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="-en-bref">⚡ En bref</h2>
<p>Le pipeline Vector initial inondait BetterStack de ~500 events/24h, dont 434 pulls CAPI sans valeur de supervision locale. Ce travail reconfigure le filtre Vector pour ne garder que les bans à haute valeur (<code>cscli</code>) et corrige un angle mort majeur : les bans effectifs du bouncer nginx-lua n&rsquo;apparaissaient nulle part dans BetterStack.</p>
<h2 id="-pourquoi">🧠 Pourquoi</h2>
<p>La stack de sécurité repose sur trois composants qui travaillent ensemble :</p>
<ul>
<li><strong>nginx</strong> avec le bouncer lua CrowdSec (<code>lua-resty-crowdsec</code>) qui bloque les requêtes en temps réel</li>
<li><strong>CrowdSec</strong> pour la détection et la gestion des décisions de ban</li>
<li><strong>Vector</strong> qui centralise les logs vers BetterStack pour la supervision</li>
</ul>
<p>Après avoir mis en place le pipeline initial, deux problèmes sont apparus rapidement. D&rsquo;abord, le signal était noyé dans le bruit : sur 500 events/24h, 434 venaient du pull CAPI communautaire horaire et 66 des listes tierces — ni les uns ni les autres ne représentent une menace détectée sur <em>cette</em> infrastructure. Ensuite, les bans effectifs du bouncer lua (blocages en temps réel dans nginx) n&rsquo;apparaissaient nulle part dans BetterStack, ce qui créait un angle mort sur l&rsquo;activité de sécurité réelle.</p>]]></description>
</item>
<item>
    <title>Harmonisation des logs nginx et CrowdSec dans BetterStack via Vector</title>
    <link>https://www.arleo.eu/posts/vector-logs-harmonisation-betterstack/</link>
    <pubDate>Fri, 10 Apr 2026 21:04:00 &#43;0200</pubDate>
    <author>Jmr</author>
    <guid>https://www.arleo.eu/posts/vector-logs-harmonisation-betterstack/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/images/vector-logs-harmonisation-betterstack-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-en-bref">⚡ En bref</h2>
<p>Deux problèmes coexistaient dans BetterStack : les logs <code>mcp-oauth.access.log</code> arrivaient en JSON brut illisible, et les logs CrowdSec produisaient des doublons visuels. Ce travail uniformise tous les logs pour qu&rsquo;ils s&rsquo;affichent comme des tags cliquables structurés, avec timestamps corrects et sans champs parasites.</p>
<h2 id="-pourquoi">🧠 Pourquoi</h2>
<p>BetterStack affiche les logs sous forme de tags surlignés cliquables dans le Live Tail lorsque les champs JSON sont correctement structurés. Avant ce travail, l&rsquo;observation était dégradée sur deux fronts :</p>]]></description>
</item>
</channel>
</rss>
