Fail2Ban avec Deluge Web

Deluge web ne propose pas de sécurité anti-brute force par défaut. Il faut ajouter une rêgle Fail2Ban.

Pour rappel, Fail2Ban est un programme écrit en python et disponible dans la plupart des dépôts Linux qui à pour but de prévenir des attaques de type brute-force.  fail2ban lit les logs de divers serveurs (SSH, Apache, FTP…) à la recherche d’erreurs d’authentification répétées et ajoute une règle iptables pour bannir l’adresse IP de la source.

Par défaut, Deluge ne log pas les erreurs d’authentifications. Il faut dans un premier temps modifier le programme pour prendre en compte ce log.

Modification de Deluge

Editer le fichier /usr/share/pyshared/deluge/ui/web/auth.py. A la fin de celui-ci se trouve une fonction “login(self,password)”. Dans le “else” on ajoute le log de l’erreur

Il faut ensuite préciser au script de lancement du daemon que l’on souhaite activer les journaux d’événements. On édite le fichier “/etc/init.d/deluge-daemon” et modifie la ligne 24 correspondant aux arguments de lancement.

Il faut avoir créé le fichier correspondant et donné les droits sur celui-ci à l’utilisateur deluge.

Fail2ban à besoin de 2 choses pour fonctionner:

  • Un ip en cause de l’echec de l’authentification

  • Une date dans un des formats supportés

Le script python de deluge qui gère le format de la date ne fait pas partie des formats supportés par Fail2Ban. Il faut donc modifier également celui-ci. On édite le fichier “/usr/share/pyshared/deluge/log.py”. A la ligne 62 on commente le format puis on insere le nouveau en dessous.

Pour prendre en compte les changements il faut relancer deluge.

Modification sur Fail2Ban

Création de la regex fail2ban. Une regex est une expression qui permet d’identifier un motif particulier dans un fichier selon une syntaxe précise. Nous avons précédemment modifié Deluge afin qu’il log en cas d’erreur d’authentification la phrase « Login failed from adresse_ip ». Nous allons donc faire une regex qui recherche cette phrase.

On edite un nouveau fichier de conf “/etc/fail2ban/filter.d/deluge-web.conf”

Pour tester la regex. On se rend sur l’interface web de deluge et on fait une erreur d’authentification. Le fichier de log devrait afficher une ligne correspondant à cette erreur.
On va tester que fail2ban retrouve bien cette ligne grâce à la regex

Cela doit donner la sortie suivante

Création de la prison qui utilise cette regex. On édite “/etc/fail2ban/jail.conf”

Enfin on redémarre Fail2Ban pour prendre en compte les changements et c’est bon. Pour tester il faut faire 3 erreurs d’authentifications consécutives.

 

6 thoughts on “Fail2Ban avec Deluge Web”

  1. eldwane dit :

    merci pour ces précieuses infos (ça me faisait toujours un peu mal de voir ce port ouvert sans aucune protection de base…)

    Par contre, il manque les parenthèses de fin de la modif proposée pour auth.py
    > log.error(‘Login failed from %s’, __request__.getClientIP())

    1. Sispheor dit :

      Merci c’est corrigé !

  2. Narthe dit :

    Il manque aussi des guillemets fermants a la fin de :
    DAEMON2_ARGS= »-L error -l /var/log/deluge.log »

  3. Qisuige dit :

    Salut

    Merci pour ces tuto sur Deluge et Fail2ban pour deluge 😀
    Ils sont nickel et tres didactique.

    J’ai un probleme, malgre des erreurs de login, aucun enregistrement ne ce fait /var/log/deluge.log
    J’ai deja verifie tout reverifier mais j’ai rien trouve. J’ai peut etre laisse passer un truc.

    Seul point de doute que j’ai, c’est au niveau de la modification de /usr/share/pyshared/deluge/ui/web/auth.py.
    Est ce que la fonction doit etre comme ca:
    def login(self, password):
    «  » »
    Test a password to see if it’s valid.

    :param password: the password to test
    :type password: string
    :returns: a session id or False
    :rtype: string or False
    «  » »

    if self.check_password(password):
    return self._create_session(__request__)
    else:
    return log.error(‘Login failed from %s’, __request__.getClientIP())
    # return False

    Cordialement

    1. N.i.c.O dit :

      Je n’ai pas testé à nouveau. Peut être qu’il y a eu une mise à jour à ce niveau la dans le code de Deluge en effet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *