<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Avoid on slash-root.fr</title><link>https://beta.slash-root.fr/tags/avoid/</link><description>Recent content in Avoid on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Wed, 07 Aug 2024 11:53:52 +0200</lastBuildDate><atom:link href="https://beta.slash-root.fr/tags/avoid/index.xml" rel="self" type="application/rss+xml"/><item><title>CrowdSec : Avoid a Duplicate Decision / Notification</title><link>https://beta.slash-root.fr/crowdsec-avoid-a-duplicate-decision-notification/</link><pubDate>Wed, 07 Aug 2024 10:52:44 +0200</pubDate><guid>https://beta.slash-root.fr/crowdsec-avoid-a-duplicate-decision-notification/</guid><description>&lt;img src="https://beta.slash-root.fr/crowdsec-avoid-a-duplicate-decision-notification/cover.png" alt="Featured image of post CrowdSec : Avoid a Duplicate Decision / Notification" /&gt;&lt;h2 id="introduction"&gt;&lt;a href="#introduction" class="header-anchor"&gt;&lt;/a&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Prenons le cas de l'utilisation de CrowdSec pour protéger des applications web en analysant les logs du reverse-proxy.&lt;/p&gt;
&lt;p&gt;Suivant le scénario qui se déclenchera, CrowdSec prendra une décision concernant l'adresse IP concernée. Par exemple, renvoyer un code HTTP 403. Dans ce cas de figure, si l'acteur malveillant persiste, une décision sera prise à chaque fois. Si des notifications sont envoyées à chaque prise de décision, cela peut vite devenir du spam ! C'est le comportement normal puisque le profil par défaut de CrowdSec prend une décision à chaque déclenchement de scénario.&lt;/p&gt;
&lt;p&gt;Nous allons voir comment modifier la prise de décision pour vérifier au préalable si une décision identique n'a pas été prise récemment.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="prérequis"&gt;&lt;a href="#pr%c3%a9requis" class="header-anchor"&gt;&lt;/a&gt;Prérequis
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CrowdSec installé (voir ici : &lt;a href="https://beta.slash-root.fr/crowdsec-installation-avec-bouncer-iptables-sur-debian-12/"&gt;Installation de CrowdSec&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Toutes les commandes / manipulations présentées ci-dessous seront à exécuter en tant que &lt;code&gt;root&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="modification-de-la-remediation"&gt;&lt;a href="#modification-de-la-remediation" class="header-anchor"&gt;&lt;/a&gt;Modification de la Remediation
&lt;/h2&gt;&lt;p&gt;Tout va se passer dans un seul fichier : &lt;code&gt;/etc/crowdsec/profiles.yaml&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Voici un fichier classique qui &lt;strong&gt;ban&lt;/strong&gt; pendant 4h l'adresse IP qui déclenche un scénario :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#/etc/crowdsec/profiles.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;default_ip_remediation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;filters&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;Alert.Remediation == true &amp;amp;&amp;amp; Alert.GetScope() == &amp;#34;Ip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;decisions&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ban&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;duration&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#duration_expr: &amp;#34;Sprintf(&amp;#39;%dh&amp;#39;, (GetDecisionsCount(Alert.GetValue()) + 1) * 4)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;on_success&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous allons modifier le filtre pour vérifier si une décision n'a pas été prise il y a moins de 2h pour l'adresse IP concernée.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Voici le fichier modifié :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#/etc/crowdsec/profiles.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;default_ip_remediation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;filters&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;Alert.Remediation == true &amp;amp;&amp;amp; Alert.GetScope() == &amp;#34;Ip&amp;#34; &amp;amp;&amp;amp; GetDecisionsSinceCount(Alert.GetValue(), &amp;#34;2h&amp;#34;) &amp;lt; 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;decisions&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ban&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;duration&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#duration_expr: &amp;#34;Sprintf(&amp;#39;%dh&amp;#39;, (GetDecisionsCount(Alert.GetValue()) + 1) * 4)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;on_success&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour valider la modification, redémarrez le service :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl restart crowdsec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;h2 id="intérêt"&gt;&lt;a href="#int%c3%a9r%c3%aat" class="header-anchor"&gt;&lt;/a&gt;Intérêt
&lt;/h2&gt;&lt;p&gt;On peut se dire : Mais pourquoi faire ça ?&lt;/p&gt;
&lt;p&gt;A chaque fois que CrowdSec prendra une décision, si les notifications sont configurées, cela en déclenchera une systématiquement.&lt;/p&gt;
&lt;p&gt;Dans mon cas, cela concernait les scans multi-ports et j'en avais marre de recevoir du spam de notification... (Effet JO 2024 ???).&lt;/p&gt;
&lt;p&gt;Voici l'output que cela donnait en moins d'une minute :&lt;/p&gt;
&lt;p&gt;&lt;img data-recalc-dims="1" decoding="async" src="01.png" alt="image-20240807104724911" /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Maintenant, CrowdSec prendra une décision concernant l'adresse IP qui déclenchera un scénario et qui n'a pas été &lt;strong&gt;ban&lt;/strong&gt; il y a moins de 2h. Si celle-ci revient au bout de 3h et redéclenche un scénario, ça sera reparti pour 4h, etc.&lt;/p&gt;</description></item></channel></rss>