fail2ban et des containers en NAT

J’utilise une configuration simple de containers LXC avec des règles de NAT. J’ai mis en place fail2ban sur le serveur hôte avec certains jails pour protéger les accès vers des containers. Au bout d’un certain temps je me suis aperçu que l’IP était bien ajoutée au jail associé mais la règle de REJECT ne fonctionnait pas.

Le souci vient de la configuration par défaut de fail2ban qui utilise la chaine INPUT dans ces actions. Cette dernière n’est pas utilisée lors des règles de NAT.

Il suffit d’apporter quelques ajouts à la configuration de fail2ban.

Ajouter une action prédéfinie

Dans le fichier /etc/fail2ban/jail.conf, vous avez des actions prédéfinies (blocage uniquement, blocage et envoi d’un mail). J’utilise l’action action_mwl par défaut. Afin de pouvoir conserver mes jails protégeant le serveur hôte, j’ai recopié cette action et l’ai modifiée comme suit :

action_lxc = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="FORWARD"]
             %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="FORWARD"]

J’ai renommé l’action en action_lxc et j’ai surtout modifié la chaine par défaut en FORWARD. Cela aurait pour conséquence que les jails utilisant cette action seront déclarés dans la chaine souhaitée.

Appliquer l’action aux jails concernés

Il faut maintenant surchager les jails qui ont besoin de se retrouver dans la bonne chaine iptables. Voici un exemple :

[ssh-srvlxc]

enabled  = true
action   = %(action_lxc)s
port     = ssh
filter   = sshd
logpath  = /chemin/vers/mon/fichier/de/log/container/auth.log
maxretry = 3

La commande suivante vous permettra de voir les nouvelles tentatives de connexion se faire bloquer par fail2ban.