Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
pratique:informatique:reaction [05/01/2024 09:34] – créée Zatalyzpratique:informatique:reaction [26/01/2024 20:59] (Version actuelle) – [Reaction, alternative à Fail2ban] Zatalyz
Ligne 13: Ligne 13:
 </WRAP> </WRAP>
  
 +===== Commandes de base =====
 +Voir qui est banni :
 +  reaction show
  
 +Débannir quelqu'un :
 +  reaction flush IP
 +
 +Consulter l'aide :
 +  reaction --help
 ===== Envoyer des mails quand il y a une action ===== ===== Envoyer des mails quand il y a une action =====
 J'ai une commande qui va envoyer un mail via un script, en ayant en paramètre deux variables : ''ip'' (l'ip bannie) et ''rule'' (la raison du bannissement). J'ai une commande qui va envoyer un mail via un script, en ayant en paramètre deux variables : ''ip'' (l'ip bannie) et ''rule'' (la raison du bannissement).
Ligne 110: Ligne 118:
 et ''ssh.jsonnet'' va contenir notre morceau propre au stream.  et ''ssh.jsonnet'' va contenir notre morceau propre au stream. 
  
 +<WRAP center round todo 60%>
 +Mais j'ai du manquer un bout, ça me fait des erreurs ça... Il ne reconnait pas le "banfor" pourtant déclaré dans le fichier principal.
 +</WRAP>
  
 ===== Mes bouts de stream et de config ===== ===== Mes bouts de stream et de config =====
Ligne 133: Ligne 144:
 }; };
  
-// pourquoi ça ouvre ici ?+// pourquoi ça ouvre ici ? Mais, ça marche.
 { {
 // patterns are substitued in regexes. when a filter performs an action, it replaces the found pattern. // patterns are substitued in regexes. when a filter performs an action, it replaces the found pattern.
Ligne 163: Ligne 174:
 // Streams : c'est là qu'on va définir les services et règles menant au bannissement // Streams : c'est là qu'on va définir les services et règles menant au bannissement
   streams: {   streams: {
-    // Ban hosts failing to connect via ssh 
     ssh: import 'ssh.jsonnet',     ssh: import 'ssh.jsonnet',
     kernel: import 'kernel.jsonnet',     kernel: import 'kernel.jsonnet',
-    postfix: import 'postfix.jsonnet', +    badguypostfix: import 'badguypostfix.jsonnet', 
-     + }, 
- +}
-  },+
 </code> </code>
  
 Pour ssh et kernel, il s'agit des configurations par défaut auxquelles j'ai ajouté mon envoi de mail : Pour ssh et kernel, il s'agit des configurations par défaut auxquelles j'ai ajouté mon envoi de mail :
-<code jsonnet ssh.jsonnet></code>+<code jsonnet ssh.jsonnet> 
 +    { 
 +      cmd: ['journalctl', '-fn0', '-u', 'ssh.service'], 
 +      filters: { 
 +        failedlogin:
 +          regex: [ 
 +            @'authentication failure;.*rhost=<ip>', 
 +            @'Connection reset by authenticating user .* <ip>', 
 +            @'Failed password for .* from <ip>', 
 +          ], 
 +          retry: 6, 
 +          retryperiod: '6h', 
 +          actions: banFor('48h') + sendmail('<ip>','"Banni 48h pour tentative de co à SSH"'), 
 +        }, 
 +      }, 
 +    }, 
 + 
 +</code> 
 + 
 +<code jsonnet kernel.jsonnet> 
 +    // Ban hosts which knock on closed ports. 
 +    // It needs this iptables chain to be used to drop packets: 
 +    // ip46tables -N log-refuse 
 +    // ip46tables -A log-refuse -p tcp --syn -j LOG --log-level info --log-prefix 'refused connection: ' 
 +    // ip46tables -A log-refuse -m pkttype ! --pkt-type unicast -j nixos-fw-refuse 
 +    // ip46tables -A log-refuse -j DROP 
 +    { 
 +      cmd: ['journalctl', '-fn0', '-k'], 
 +      filters: { 
 +        portscan: { 
 +          regex: ['refused connection: .*SRC=<ip>'], 
 +          retry: 4, 
 +          retryperiod: '6h', 
 +          actions: banFor('720h') + sendmail('<ip>','"est banni un mois pour avoir fait un truc louche sur un port fermé"'), 
 +        }, 
 +      }, 
 +    }, 
 + 
 + 
 +</code> 
 + 
 +Pour postfix, pour le moment je cible certains bot cons. 
 +<code jsonnet badguypostfix.jsonnet> 
 +    { 
 +      cmd: ['journalctl', '-fn0', '-u', 'postfix@-.service'], 
 +      filters: { 
 +        badguy: { 
 +          regex: [ 
 +            @'^.* improper command pipelining after CONNECT from unknown\[<ip>\].*', 
 +            @'^.*\[<ip>\].*tiscali.it.*', 
 +            @'^.* NOQUEUE: reject: RCPT from unknown\[<ip>\]: 504 5.5.2 .* Helo command rejected: need fully-qualified hostname; .*', 
 +            @'^.*connect from .*censys.*\[<ip>\]', 
 +            @'^.*connect from .*stretchoid.*\[<ip>\]', 
 +          ], 
 +          retry: 1, 
 +          retryperiod: '6h', 
 +          actions: banFor('720h') + sendmail('<ip>','"Banni un mois sans seconde chance pour avoir mal causé à Postfix"'), 
 +        }, 
 +      }, 
 +    }, 
 +</code> 
 {{tag>fail2ban sysadmin iptable}} {{tag>fail2ban sysadmin iptable}}
  
CC Attribution-Noncommercial-Share Alike 4.0 International Driven by DokuWiki
pratique/informatique/reaction.1704443699.txt.gz · Dernière modification : 05/01/2024 09:34 de Zatalyz