Ajouter PureFTP dans fail2ban

http://www.maraumax.fr/medias/Billets/fail2ban.pngFail2ban est un excellent framework permettant d'éviter ou du moins limiter les intrusions sur votre serveur. Voici la procédure pour ajouter le serveur ftp PureFTP dans les règles fail2ban. En ajoutant cette règle votre adresse ip peut se retrouver filtré à partir de trois echecs de connexion pendant 10 minutes (par défaut), faites donc attention à vos test !

Ajoutez au fichier /etc/fail2ban/jail.conf dans la section FTP servers de préférence le contenu suivant :

[pure-ftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = pure-ftpd
logpath = /var/log/messages
maxretry = 3

Cette section vas permettre à fail2ban de filtrer (interdire) les ports 21, 20, 990 et 989 en cas de détection d'echec de login dans le fichier /var/log/messages (logs par défaut de PureFtpd)

Le fichier /etc/fail2ban/filter.d/pure-ftpd.conf est normalement crée par défaut sur votre machine, vérifiez son contenu. Il doit ressembler à celà :

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
# Modified: Yaroslav Halchenko for pure-ftpd
#
# $Revision: 3$
#
 
[Definition]
 
# Error message specified in multiple languages
__errmsg = (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur)
 
#
# 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 "<HOST>" can
#         be used for standard IP/hostname matching and is only an alias for
#         (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = pure-ftpd(?:\[\d+\])?: \(.+?@<HOST>\) \[WARNING\] %(__errmsg)s \[.+\]\s*$
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Il s'agit de regex permettant de récupérer l'adresse IP d'un echec de connexion à votre serveur ftp.

Pour tester si votre regex est correcte, vous pouvez exécuter la commande suivante après avoir de préférence effectué une mauvaise connexion à votre serveur ftp.

# Test de la regex
fail2ban-regex /var/log/messages /etc/fail2ban/filter.d/pure-ftpd.conf

Vous devriez retrouver votre adresse IP dans "Addresses found".

Il faut ensuite re-démarrer le service fail2ban :

# On rédémarre
/etc/init.d/fail2ban restart

Pour vérifier si le filtre à bien été pris en compte, vous pouvez utiliser la commande suivante :

# Test
cat /var/log/fail2ban.log |grep pure-ftpd

Et vous devriez avoir le résultat suivant :

2012-03-27 10:23:10,041 fail2ban.jail   : INFO   Creating new jail 'pure-ftpd'
2012-03-27 10:23:10,041 fail2ban.jail   : INFO   Jail 'pure-ftpd' uses poller
2012-03-27 10:23:10,051 fail2ban.jail   : INFO   Jail 'pure-ftpd' started

Et voilà votre serveur ftp est maintenant géré par fail2ban !

Billets relatifs

5 Commentaire(s)

  1. Commenté par chris le dimanche 29 avril à 10:19

    Hello et merci pour ce tuto.
    J'ai bien inséré la rubrique au jail.conf , et vérifier la conformité de pure-ftpd.conf mais à la commande suivante apparait une error sur les actions associées ... Je ne trouve pas de fichier pureftps dans /action.d .
    As-tu une définition de l'action associée ?

    root : cat /var/log/fail2ban.log |grep pure-ftpd

    2012-04-29 10:11:19,321 fail2ban.jail   : INFO   Creating new jail 'pure-ftpd'
    2012-04-29 10:11:19,322 fail2ban.jail   : INFO   Jail 'pure-ftpd' uses poller
    2012-04-29 10:11:19,341 fail2ban.jail   : INFO   Jail 'pure-ftpd' started
    2012-04-29 10:11:19,384 fail2ban.actions.action: ERROR  iptables -N fail2ban-pure-ftpd
    iptables -A fail2ban-pure-ftpd -j RETURN
    iptables -I INPUT -p tcp -m multiport --dports ftp,ftp-data,ftps,ftps-data -j fail2ban-pure-ftpd returned 400

  2. Réponse

    Salut,

    Quand tu as lancé la commande de test, tu as eu un message d'erreur ?

  3. Commenté par chris le dimanche 29 avril à 11:45

    Le test a l'air tout à fait bon. Il trouve bien ce qu'il faut dans le log.


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

    Use regex file : /etc/fail2ban/filter.d/pure-ftpd.conf
    Use log file   : /var/log/messages


    Results
    =======

    Failregex
    |- Regular expressions:
    |  [1] pure-ftpd(?:\[\d+\])?: \(.+?@<HOST>\) \[WARNING\] (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur) \[.+\]\s*$
    |
    `- Number of matches:
       [1] 5 match(es)

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

    Summary
    =======

    Addresses found:
    [1]
        221.xxx.xxx.xxx(Sat Apr 28 04:25:28 2012)
        221.xxx.xxx.xxx (Sat Apr 28 04:25:39 2012)
        221.xxx.xxx.xxx (Sat Apr 28 04:25:52 2012)
        221.xxx.xxx.xxx (Sat Apr 28 04:26:09 2012)
        221.xxx.xxx.xxx (Sat Apr 28 04:26:28 2012)

    Date template hits:
    211 hit(s): MONTH Day Hour:Minute:Second
    0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
    0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
    0 hit(s): Year/Month/Day Hour:Minute:Second
    0 hit(s): Day/Month/Year Hour:Minute:Second
    0 hit(s): Day/Month/Year Hour:Minute:Second
    0 hit(s): Day/MONTH/Year:Hour:Minute:Second
    0 hit(s): Month/Day/Year:Hour:Minute:Second
    0 hit(s): Year-Month-Day Hour:Minute:Second
    0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
    0 hit(s): Day-Month-Year Hour:Minute:Second
    0 hit(s): TAI64N
    0 hit(s): Epoch
    0 hit(s): ISO 8601
    0 hit(s): Hour:Minute:Second
    0 hit(s): <Month/Day/Year@Hour:Minute:Second>

    Success, the total number of match is 5

    However, look at the above section 'Running tests' which could contain important
    information.

  4. Réponse

    Ok j'ai cherché un peu plus sur le net et je suis tombé sur ça : fail2ban.actions.action: ERROR. Je te laisse faire la modification et n'hésite pas à me tenir au courant (j'éditerais mon billet dans ce cas wink )

  5. Commenté par chris le vendredi 11 mai à 11:43

    Merci pour la recherche.

    En ajoutant cela, le diagnostic est toujours le même. Je n'ai pas creusé plus loin en attendant.

    Mon problème reste entier...

  6. Réponse

    Tu as bien redémarrer le service fail2ban après la modification ?

    Que donne le résultat de la commande suivante :

    # Liste les règles iptables
    iptables -L
  7. Commenté par chris le lundi 14 mai à 20:29

    Bon,

    Ca y est. A priori c'est bon. Je n'ai pas bien saisi ce qui a mis les choses en places. Après un restart defail2ban, et avec cette modif (timeout), je n'est plus d'erreur concernant pureftpd dans le log.
    Merci pour l'aide ! Et bon vent à Maraumax !

    A la commande iptables -L, j'ai maintenant:

    iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    fail2ban-apache-phpmyadmin  tcp  --  anywhere             anywhere            multiport dports www,https
    fail2ban-ssh  tcp  --  anywhere             anywhere            multiport dports 12124
    fail2ban-pure-ftpd  tcp  --  anywhere             anywhere            multiport dports ftp,ftp-data,ftps,ftps-data

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    Chain fail2ban-apache-phpmyadmin (1 references)
    target     prot opt source               destination
    RETURN     all  --  anywhere             anywhere

    Chain fail2ban-pure-ftpd (1 references)
    target     prot opt source               destination
    RETURN     all  --  anywhere             anywhere

    Chain fail2ban-ssh (1 references)
    target     prot opt source               destination
    RETURN     all  --  anywhere             anywhere

  8. Réponse

    Bon super !

    J'éditerais l'article dans ce cas. Merci de tes retours.

  9. Commenté par lrayssiguier le lundi 16 septembre à 09:53

    Bonjour,

    J'ai mis en place fail2ban sur pureftpd en suivant votre post, mais j'ai rencontré un problème.

    Il n'y a pas d'action dans la déclaration faite dans le jail.conf.

    J'ai du mettre ceci au final pour que cela fonctionne.

    [pure-ftpd]

    enabled = true
    port = ftp,ftp-data,ftps,ftps-data
    filter = pure-ftpd
    action   = iptables[name=PROFTPD, port=ftp, protocol=tcp]
               sendmail-whois[name=PROFTPD, dest=moi@chezmoi.fr]
    logpath = /var/log/messages
    maxretry = 3


    Merci pour l'article en tout cas, car il est très utile. Le failregex de mon fichier ne fonctionnait pas, alors que le votre est bon :-)

    Cordialement,
    Laurent

Ajouter un commentaire





Les commentaires sont validés manuellement afin d'éviter le spam.