Fail2ban et Mysql

Bonjour,

Je cherche à créer une prison FailBan pour detecter les tentatives de connexion à mysql/phpmyadmin erronées.

Je suis tombé sur ce sujet : securite-anti-brute-force-t39497.html et j’ai suivi la procédure de Darel qui explique très bien comment faire.

Mais lorsque je lance un fail2ban-regex pour vérifier :

j’ai ce message d’erreur :

Found a match for ' 90 Connect Access denied for user 'root'@'localhost' (using password: YES) ' but no valid date/time found for ' 90 Connect Access denied for user 'root'@'localhost' (using password: YES) '. Please contact the author in order to get support for this format Found a match for ' 97 Connect Access denied for user 'john'@'localhost' (using password: YES) ' but no valid date/time found for ' 97 Connect Access denied for user 'aaaa'@'localhost' (using password: YES) '. Please contact the author in order to get support for this format
Pourtant j’ai bien rajouté à /usr/share/fail2ban/server/datedetector.py ces lignes :

# AAMMJJ HH:MM:SS template = DateStrptime() template.setName("YearMonthDay Hour:Minute:Second") template.setRegex("\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}") template.setPattern("%y%m%d %H:%M:%S") self.__templates.append(template)
et je ne comprend pas pourquoi j’ai cette erreur…
Quelqu’un à une petite idée ?

Je ne sais pas si c’est utile de le préciser : Mes logs de /var/log/mysql/mysql.log lors de connexions erronées ressemblent à ça :

120811 17:11:43 100 Connect phpmyadmin@localhost on 100 Query SELECT VERSION() 100 Query SET CHARACTER SET 'utf8' 100 Query SET collation_connection = 'utf8_general_ci' 101 Connect Access denied for user 'root'@'localhost' (using password: YES) 100 Quit 120811 17:11:49 102 Connect phpmyadmin@localhost on 102 Query SET CHARACTER SET 'utf8' 102 Query SET collation_connection = 'utf8_general_ci' 103 Connect Access denied for user 'john'@'localhost' (using password: YES) 102 Quit

Voilà,
Quelqu’un sait pourquoi j’ai cette erreur de format ?

Merci

Salut,

Pourtant le message et très explicite … :033

[/quote]

[code]~ # fail2ban-regex /var/log/mysql/mysql.log /etc/fail2ban/filter.d/mysql.conf

Running tests

Use regex line : /etc/fail2ban/filter.d/mysql.conf
Use single line: /var/log/mysql/mysql.log

No ‘host’ group in ‘/etc/fail2ban/filter.d/mysql.conf’
Cannot remove regular expression. Index 0 is not valid

Results

Failregex
|- Regular expressions:
| [1] /etc/fail2ban/filter.d/mysql.conf
|
- Number of matches: [1] 0 match(es) Ignoreregex |- Regular expressions: |- Number of matches:
Summary

Sorry, no match
Look at the above section ‘Running tests’ which could contain important
information.
~ #[/code]

Mon Runing tests ne me donne pas la même chose :

[code]Running tests

Use regex file : /etc/fail2ban/filter.d/mysql.conf
Use log file : /var/log/mysql/mysql.log

Found a match for ’ 173 Connect Access denied for user ‘john’@‘localhost’ (using password: YES)
’ but no valid date/time found for ’ 173 Connect Access denied for user ‘john’@‘localhost’ (using password: YES)
’. Please contact the author in order to get support for this format
Found a match for ’ 175 Connect Access denied for user ‘johns’@‘localhost’ (using password: YES)
’ but no valid date/time found for ’ 175 Connect Access denied for user ‘johns’@‘localhost’ (using password: YES)
’. Please contact the author in order to get support for this format

Results

Failregex
|- Regular expressions:
| [1] Access denied for user ‘.*’@’’
|
`- Number of matches:
[1] 0 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary

Sorry, no match

Look at the above section ‘Running tests’ which could contain important
information.[/code]

Je n’ai pas de problème de host aparement non ?, mais plutôt de format de date ? Le test indique qu’il trouve des entrées mais le format de la date ne lui convient pas…

Merci

Salut,
il y a quoi dans /etc/fail2ban/filter.d/mysql.conf ?

Salut,

mais plutôt de permission(s)! :033

[code]~ # fail2ban-regex /var/log/mysql/mysql.log /etc/fail2ban/filter.d/mysqld.conf

Running tests

Use regex file : /etc/fail2ban/filter.d/mysqld.conf
Use log file : /var/log/mysql/mysql.log

Results

Failregex
|- Regular expressions:
| [1] Access denied for user ‘.*’@’’
|
`- Number of matches:
[1] 0 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary

Sorry, no match
Look at the above section ‘Running tests’ which could contain important
information.
[root@yunohost] ~ # [/code]

[quote=“lol”]Salut,
il y a quoi dans /etc/fail2ban/filter.d/mysql.conf ?[/quote]

Ce fichier contient :

[code]#Fail2Ban configuration file

Author: x

$Revision: 728 $

[Definition]

Option: failregex

Notes.: regex to match the password failures messages in the logfile. The

host must be matched by a group named “host”. The tag “” can

be used for standard IP/hostname matching and is only an alias for

(?:::f{4,6}:)?(?P[\w-.^_]+)

Values: TEXT

#120811 9:49:21 977 Connect phpmyadmin@localhost on

977 Query SET CHARACTER SET ‘utf8’

977 Query SET collation_connection = ‘utf8_general_ci’

978 Connect Access denied for user ‘john’@‘localhost’ (using password: YES)

failregex = Access denied for user ‘.*’@’’

Option: ignoreregex

Notes.: regex to ignore. If this regex matches, the line is ignored.

Values: TEXT

ignoreregex =
[/code]

Merci

Salut,
Ça ne doit pas être impossible, mais ça va être compliqué…

howtoforge.com/forums/showthread.php?t=51149
fail2ban.org/wiki/index.php/ … timestamps

Je suppose que tu t’es inspiré de ça: debian-fr.org/securite-anti- … ml#p398415

[quote=“lol”]Salut,
Ça ne doit pas être impossible, mais ça va être compliqué…

howtoforge.com/forums/showthread.php?t=51149
fail2ban.org/wiki/index.php/ … timestamps

Je suppose que tu t’es inspiré de ça: securite-anti-brute-force-t39497.html#p398415[/quote]

Oui tout à fait, je me suis inspiré de ce post et j’avais modifié /usr/share/fail2ban/server/datedetector.py pour ajouter ces lignes :

# AAMMJJ HH:MM:SS template = DateStrptime() template.setName("YearMonthDay Hour:Minute:Second") template.setRegex("\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}") template.setPattern("%y%m%d %H:%M:%S") self.__templates.append(template)

Ce qui été censé régler le problème de format de date…

Quel est le retour fail2ban-regex … ?

* edit *

As tu respecté les trois tabulations en l’insérant ?

[code] def addDefaultTemplate(self):
self.__lock.acquire()
try:

                    # AAMMJJ HH:MM:SS                                                                                                                        
                    template = DateStrptime()                                                                                                                
                    template.setName("YearMonthDay Hour:Minute:Second")                                                                                      
                    template.setRegex("\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}")                                                                                   
                    template.setPattern("%y%m%d %H:%M:%S")                                                                                                   
                    self.__templates.append(template)                                                                                                        
                    # standard                                                                [/code]

Et non pas la barre d’espace … :033

Il y avait un peu de tout… J’ai rectifié pour ne mettre que des tabulations mais sans succès…

[code]Running tests

Use regex file : /etc/fail2ban/filter.d/mysql.conf
Use log file : /var/log/mysql/mysql.log

Found a match for ’ 173 Connect Access denied for user ‘john’@‘localhost’ (using password: YES)
’ but no valid date/time found for ’ 173 Connect Access denied for user ‘john’@‘localhost’ (using password: YES)
’. Please contact the author in order to get support for this format
Found a match for ’ 175 Connect Access denied for user ‘johns’@‘localhost’ (using password: YES)
’ but no valid date/time found for ’ 175 Connect Access denied for user ‘johns’@‘localhost’ (using password: YES)
’. Please contact the author in order to get support for this format

Results

Failregex
|- Regular expressions:
| [1] Access denied for user ‘.*’@’’
|
`- Number of matches:
[1] 0 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary

Sorry, no match

Look at the above section ‘Running tests’ which could contain important
information.
[/code]

[quote=“Fr0zen”]Il y avait un peu de tout… J’ai rectifié pour ne mettre que des tabulations mais sans succès…
[/quote]
Les services mysql et fail2ban ont ils été relancer ?

Un souci mysql ?

Les users ?

Les bases ?

Les permissions ?

Sur ce site : howtoforge.com/forums/showthread.php?t=51149 il est écrit

[quote]Fail2ban does not work well with mysql.log because MySQL does not log the client IP address of the failed login attempt.

The part after the ‘@’ in the “Access denied for user ‘name’@‘host.doma.in’” message is the result of a reverse DNS lookup on the client IP address, which may or may not resolve back to the original IP address. If it doesn’t, fail2ban will fail, or worse, ban the wrong address. [/quote]

Donc si je comprend bien :
Le “host.doma.in” est le résultat d’une recherche DNS inversée sur l’adresse IP du client
Dans mon cas c’est du style john@localhost => Donc c’est l’ ip de mon serveur qui rique d’être banni ?

Salut,
Peut-être un problème de variable locale LANG=
Je vois que la date est en Français dans les logs de mysql…

dpkg-reconfigure locales + choisir en_US.UTF-8

Edit pour l’ip de ton serveur il suffit de la mettre en liste blanche
Dans jail.conf: ignoreip =

[quote=“loreleil”]
Les services mysql et fail2ban ont ils été relancer ?
Un souci mysql ?
Les users ?
Les bases ?
Les permissions ?[/quote]
Oui je relance à chaque fois par mesure de précaution Fail2Ban, idem pour mysql

Il existe des bases et les utilisteurs s’y connectent bien. Donc le site/BDD/PhpMyadmin “fonctionnent” bien

Quand je me connecte n’importe comment pour générer des erreurs de login, les logs d’erreurs de myql sont bien enregistrés

C’est juste que Fail2Ban n’arrive pas à les exploiter… à cause (semblerait-il) le format

[quote]Found a match for ’ 175 Connect Access denied for user ‘johns’@‘localhost’ (using password: YES)
’ but no valid date/time found for ’ 175 Connect Access denied for user ‘johns’@‘localhost’ (using password: YES)[/quote]

:083

Tu remarqueras, sans nul doute, qu’à présent le test de ta fail-regex n’inclut plus root! :033

[quote]Found a match for ’ 90 Connect Access denied for user ‘root’@‘localhost’ (using password: YES)
’ but no valid date/time found for ’ 90 Connect Access denied for user ‘root’@‘localhost’ (using password: YES)[/quote]

* edit *

Droits, permissions, privilèges, Grant … ? :033

ps: Si c’est possible (temporairement) supprimes les dits users et relances … ? :think:

J’ai rajouter l’anglais (j’en est mis 3)

~# dpkg-reconfigure locales Generating locales (this might take a while)... fr_FR.ISO-8859-1... done fr_FR.UTF-8... done fr_FR.UTF-8@euro... done fr_FR.ISO-8859-15@euro... done en_US.ISO-8859-1... done en_US.ISO-8859-15... done en_US.UTF-8... done Generation complete.

Cette commande confirme bien que la langue est prise en compte

~# locale -a C en_US en_US.iso88591 en_US.iso885915 en_US.utf8 français french fr_FR fr_FR@euro fr_FR.iso88591 fr_FR.iso885915@euro fr_FR.utf8 fr_FR.utf8@euro POSIX

J’ai bien tout redémarré, j’ai généré de nouveaux log d’erreur… et ce :076 de problème persiste

J’ai tenté d’en rajouter d’autres :

root@xxxxx:~# locale -a C en_GB en_GB.iso88591 en_GB.iso885915 en_GB.utf8 en_US en_US.iso88591 en_US.iso885915 en_US.utf8 eu_ES@euro eu_ES.iso885915@euro eu_FR eu_FR@euro eu_FR.iso88591 eu_FR.iso885915@euro eu_FR.utf8 français french fr_FR fr_FR@euro fr_FR.iso88591 fr_FR.iso885915@euro fr_FR.utf8 fr_FR.utf8@euro POSIX

Mais rien y fait… :confusion-confused:

fail2ban-et-mysql-t39903.html#p402826 :question::whistle:

Le problème n’est pas l’accèss à mySQL/phpMyAdmin, je m’y connecte quand je veux

Je fais exprès de provoquer l’erreur Access denied for user ‘UnUtilisateur’@‘localhost’ (using password: YES) (en tapant un utilisateur/mot de pase erroné)

Ce que je souhaite c’est exploiter cette erreur en demandant à fai2ban de consulter les logs et de chercher l’expression Access denied for user ‘.*’@’’.
Il y arrive mais dans ce qu’il trouve, le format date ne lui convient pas et il n’arrive pas à l’exploiter le résultat

Salut,

J’ai quelques fail2ban installés. Comme mysql n’est pas ouvert à tous les vents je ne me suis jamais soucié de le protéger avec fail2ban.
Tu pourrais déjà changer le port…

Laisse moi un moment que je teste ça.