Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/01/2019, à 09:30

skynet.v01

[Résolu] fail2ban : problème de filtre pour monit

Bonjour la communauté

J'utilise monit en https via le port 2812 pour monitorer un serveur dont je souhaiterais pouvoir filtrer l'accès via fail2ban (version 0.9.0). Il y a bien un filtre par défaut mais il ne colle pas avec le log de monit (testé avec fail2ban-regex). J'ai tenté également avec d'autres filtres (fournis dans d'autres versions de fail2ban et autres tutos).

N'y connaissant rien en expressions régulières, j'en appelle à vos connaissances pour tenter de faire correspondre le filtre avec le log.

Le filtre fail2ban d'origine monit.conf :

# Fail2Ban filter for monit.conf, looks for failed access attempts
#
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = monit

# Regexp for previous (accessing monit httpd) and new (access denied) versions
failregex = ^\[[A-Z]+\s+\]\s*error\s*:\s*Warning:\s+Client '<HOST>' supplied (?:unknown user '[^']+'|wrong password for user '[^']*') accessing monit httpd$
            ^%(__prefix_line)s\w+: access denied -- client <HOST>: (?:unknown user '[^']+'|wrong password for user '[^']*'|empty password)$

# Ignore login with empty user (first connect, no user specified)
# ignoreregex = %(__prefix_line)s\w+: access denied -- client <HOST>: (?:unknown user '')
ignoreregex =

Le log de monit monit.log :

[CET Jan 25 16:41:39] error    : HttpRequest: access denied -- client [37.169.237.227]: unknown user 'xxyy'
[CET Jan 25 16:42:37] error    : HttpRequest: access denied -- client [37.169.237.227]: unknown user ''
[CET Jan 25 16:42:41] error    : HttpRequest: access denied -- client [37.169.237.227]: missing or invalid Authorization header

Mon fichier de configuration fail2ban jail-debian.local :

[monit]
enabled = true
port = 2812
logpath = /var/log/monit*.log

Merci pour votre aide

Hors ligne

#2 Le 28/01/2019, à 10:40

bruno

Re : [Résolu] fail2ban : problème de filtre pour monit

Bonjour,

fail2ban n'est pas un outil pour filtrer les accès. C'est un outil qui permet de bloquer les IP qui font un certain nombre de tentatives infructueuses pour accéder à certains services.

Pour tester ton filtre fail2ban avec les logs de monit (à adapter suivant l'emplacement des fichiers) :

fail2ban-regex /var/log/monit.log /etc/fail2ban/filter.d/monit.conf

Si tu veux empêcher les attaques par force brute sur la page de connexion de monit, le mieux est d’utiliser les contrôles d'accès au niveau du serveur web en restreignant l'accès à une ou plusieurs IP autorisées. Pour Apache voir https://httpd.apache.org/docs/2.4/fr/howto/access.html
Tu peux aussi utiliser des règles iptables qui n'autorisent que certaines IP à se connecter sur le port 2812.

Quoiqu'il en soit les attaques par force brute ont pour seul inconvénient de remplir les logs si tu as des mots de passes suffisamment solides. Pense aussi à utiliser du HTTPS pour éviter la transmission des identifiants en clair.

Dernière modification par bruno (Le 28/01/2019, à 10:42)

#3 Le 28/01/2019, à 11:12

skynet.v01

Re : [Résolu] fail2ban : problème de filtre pour monit

Je me suis mal exprimé, en effet le but est bien de bloquer et non filtrer.

Le problème étant que plusieurs utilisateurs doivent y avoir accès en lecture seule via des adresses IP non fixes, et l'accès est bien en HTTPS.

Hors ligne

#4 Le 28/01/2019, à 12:19

bruno

Re : [Résolu] fail2ban : problème de filtre pour monit

Ok. Que donne la commande que j'ai indiquée ?

Dernière modification par bruno (Le 28/01/2019, à 12:20)

#5 Le 28/01/2019, à 12:48

skynet.v01

Re : [Résolu] fail2ban : problème de filtre pour monit

Running tests
=============

Use   failregex filter file : monit, basedir: /etc/fail2ban
Use         log file : /var/log/monit.log
Use         encoding : UTF-8


Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [258] (?:DAY )?MON Day 24hour:Minute:Second(?:\.Microseconds)?(?: Year)?
`-

Lines: 260 lines, 0 ignored, 0 matched, 260 missed
[processed in 0.11 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 260 lines

Hors ligne

#6 Le 28/01/2019, à 13:38

bruno

Re : [Résolu] fail2ban : problème de filtre pour monit

Effectivement la forme des logs de monit ne correspond pas à ce qui est attendu par fail2ban essaie avec ceci dans ton filtre monit.conf :

failregex = ^\[[A-Z]+\s+\]\s*error\s*:\s*Warning:\s+Client '<HOST>' supplied (?:unknown user '[^']+'|wrong password for user '[^']*') accessing monit httpd$
            ^.*: access denied -- client \[<HOST>\]: (?:unknown user '[^']+'|wrong password for user '[^']*'|empty password)$

La seconde ligne a été modifiée pour être plus générique et prendre en compte le fait que l'adresse IP est entre crochets.

Dernière modification par bruno (Le 28/01/2019, à 13:39)

#7 Le 28/01/2019, à 14:20

skynet.v01

Re : [Résolu] fail2ban : problème de filtre pour monit

Effectivement c'est déjà mieux, fail2ban bloque désormais les tentatives avec un "user" erroné mais non vide (1e ligne du log ci-dessous).
Idéalement il pourrait bloquer les 2 autres (user vide et "missing or invalid Authorization header").

[CET Jan 25 16:41:39] error    : HttpRequest: access denied -- client [37.169.237.227]: unknown user 'xxyy'
[CET Jan 25 16:42:37] error    : HttpRequest: access denied -- client [37.169.237.227]: unknown user ''
[CET Jan 25 16:42:41] error    : HttpRequest: access denied -- client [37.169.237.227]: missing or invalid Authorization header

Mais déjà merci beaucoup pour ce coup de pouce

Dernière modification par skynet.v01 (Le 28/01/2019, à 14:50)

Hors ligne

#8 Le 28/01/2019, à 15:16

bruno

Re : [Résolu] fail2ban : problème de filtre pour monit

Dans ce cas tu peux être encore plus générique :

^.*: access denied -- client \[<HOST>\]: (?:unknown user .*|wrong password for user .*|empty password|missing or invalid Authorization header)$

Là cela devrait correspondre pour tes trois lignes de log.

#9 Le 28/01/2019, à 15:45

skynet.v01

Re : [Résolu] fail2ban : problème de filtre pour monit

Super ça marche.

Merci infiniment pour ton aide, tu me fais économiser des heures de recherche et apprentissage (mais je compte bien me plonger à l'occasion dans les expressions régulières).

Hors ligne