• Docker
  • [Docker] Fail2Ban sur l'host avec Nginx dockerisé

Hello tout le monde!

J'ai un petit soucis sur mon dédié:
J'ai mon nginx sous docker qui tourne niquel et j'ai suivi le tuto sécurisation v3 du fofo afin d'y ajouter Fail2Ban.
(La partie portsentry fonctionne niquel)

L'installation Fail2Ban est OK, la conf "semble" correcte, j'ai bien adapté les chemins de mes jails dans filtres.d pour qu'il tappent dans /data/nginx/log/*.log mais pourtant il ne ban rien..
Je vois bien les tentatives de connexion foireuse dans ces mêmes logs pourtant..

Quelqu'un a-t-il déjà eu le soucis ou une idée pour m'aider ?

Merci mes poulets ! 🙂

PS: j ai fait ce mail depuis mon téléphone, du coup désolé si la mise en forme ou l orthographe sont pas tip-top.. 😉

Merci pour ton retour @laster13, mais contrairement à toi, j'ai bien mes accès foireux qui apparaissent dans mes access.log pour les connexions, et les erreurs dans mon error.log, c'est pour ça que je comprends pas pourquoi fail2ban refuse de me ban les adresses correspondantes...
Ensuite effectivement on a l'air de galérer sur la même chose, mais perso j'utilise xataz/nginx comme image (mais ça ne devrait pas changer grand chose )
Merci en tout cas, et si quelqu'un a une piste, je (et laster13 aussi je suppose :p ) suis preneur 🙂

11 jours plus tard

cloneMe Merci beaucoup pour ta réponse, j'ai regardé attentivement (enfin je crois) ta conf :
- j'ai bien rajouté "docker-action" dans ma section banaction du jail.local
- j'ai créé le fichier "action.d/docker-action.conf" et en y copiant/collant la totalité de ton fichier
- j'ai redémarré le service fail2ban mais ça ne fonctionne pas...

Lorsque je fais des tentatives foireuses de connexions pour forcer le jail "nginx-auth", je vois bien mes erreurs de connexions sous mon fichier nginx_error.log, et lorsque je fais un fail2ban-client status nginx-auth, il me définit bien mon jail mais les compteurs restent à 0...

Est-ce que je suis passé à côté d'autre chose ?
Merci encore en tout cas pour la tentative d'aide 🙂

Edit: je viens de capter que tu avais fail2ban sous docker également, moi fail2ban est en dur sur le host, j'ai seulement nginx qui est sous docker..

Qu'as tu dans les logs de fail2ban ? On aurait dû commencer par là 😉

un mois plus tard

Tu peu te servir de la fonction regex pour vérifier ta conf

fail2ban-regex /data/nginx/log/ton-fichier.log /etc/fail2ban/filter.d/ton-fichier.conf

Sinon ne pas oublier de passer l'option
chain = FORWARD dans ta jail

😉

3 mois plus tard

Ho di ho !!!

Bon bah j'avais laché l'affaire, virer fail2ban et tout ça, mais comme j'ai un peu de temps en ce moment, j'me suis dit que j'allais m'y remettre (si jamais il y a eu des avancés chez certains entre temps 🙂 )

Donc depuis je suis passé sous debian 9 - stretch

J'ai réinstallé la dernière version officiel de docker par leurs repots à eux, fail2ban (depuis le repot stretch) et mon portsentry tourne toujours.

J'ai check mes regex fail2ban de mes jails, et j'ai bien des centaines de match dans mes logs, pourtant pas de ban de la part de fail2ban.

@kilroy je ne sais pas si tu es encore sur ce fofo, mais qu'entends-tu par ta dernière ligne ?

Merci anyway =)

    lokiii Dans le fichier "jail.conf" de Fail2ban, tu dois avoir une option avec "chain = INPUT".
    Étant donné que le trafic passent par la chaîne FORWARD avec Docker, essaye de modifier cette option en conséquence.

    rah j'ai espéré de dingue quand j'ai vu ce message, mais malheureusement j'ai modifié la chain = INPUT en FORWARD, redémarré le service, mais non, toujours pas de ban quand je bourrine mon serv depuis mon tel... 🙁

    J'ai bien toujours mes logs qui se peuplent avec toutes mes tentatives foireuses..

    Après y'a un truc que je comprends pas : mon fail2ban est sur mon host, et il parse des logs aussi sur mon host, je connais pas beaucoup le soft, mais j pensais qu'il parsait juste des logs à la recherche de regex et qu'il ajoutait l'IP en question dans un jail qui sera drop ? on est d'accord ? alors pourquoi le fait que docker run mon reverse proxy change la donne ?

    Je suis pas un pro mais oui, tes logs sont également sur ton hôte mais ça n'empêche pas que tout le trafic passe par FORWARD et l'interface réseau "docker0". Donc il peut rien drop à l'heure actuel.

    J'ai peut-être trouvé quelque chose sur le net pour toi.

    Premier fichier : https://github.com/SuperITMan/docker-fail2ban/blob/master/action.d/docker-iptables-multiport.conf

    Deuxième fichier : https://github.com/SuperITMan/docker-fail2ban/blob/master/jail.local

    J'ai check un peu tout ça, mais c'est pour une image docker qui fait tourner fail2ban, et non un fail2ban sur l'hôte avec un docker revers proxy

    Bon et sinon, après maintes modifs et autres tests, j'ai pas plus avancé... voici mon fail2ban-regex:

     fail2ban-regex /docker/data/nginx/log/nginx_error.log /etc/fail2ban/filter.d/nginx-http-auth.conf
    
    Running tests
    =============
    
    Use   failregex filter file : nginx-http-auth, basedir: /etc/fail2ban
    Use         log file : /docker/data/nginx/log/nginx_error.log
    Use         encoding : UTF-8
    
    
    Results
    =======
    
    Failregex: 196 total
    |-  #) [# of hits] regular expression
    |   1) [196] ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(, referrer: "\S+")?\s*$
    `-
    
    Ignoreregex: 0 total
    
    Date template hits:
    |- [# of hits] date format
    |  [241] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
    `-
    
    Lines: 241 lines, 0 ignored, 196 matched, 45 missed
    [processed in 0.02 sec]

    Je sais bien que ça vient d'une image docker, mais sauf erreur de ma part (qui est tout à fait possible) c'est le même réseau et la même chaîne.

    Tu devrais essayer...

    EDIT : Tu vois ce qu'il faudrait modifier ?

    @Rathorian merci, je me doutais que tu avais calé que c'était une image docker, juste pour être sur la même longueur d'ondes =) (et merci encore pour ton aide)

    Alors oui, j'ai bien check et modifier:
    - la directive backend en polling
    - ajouter l'action dans mes déclarations de jails nginx
    - créer le fichier docker_multiports appelés par les jails
    - redémarrer fail2ban

    Toujours pareil, mes jails se chargent, les regex sont bonnes, mes log se peuplent, mais personne ne se fait ban

    Salut,

    Ok. Je pourrais voir ton fichier jail.conf avec les modifications ?
    Il me faudrait aussi la version de fail2ban que tu utilises...

    Fail2ban v0.9.6-2

    Et mon jail.local:

    [DEFAULT]
    
    backend=polling
    
    [nginx-http-auth]
    
    enabled   = true
    filter    = nginx-http-auth
    logpath   = /docker/data/nginx/log/nginx_error.log
    action    = docker-iptables-multiport[name=NoAuthFailures, port="http,https"]
    maxretry  = 6

      lokiii Le fichier docker-iptables-multiports.conf est bien dans "/etc/fail2ban/action.d/" ?

      Pour être sur du truc...

      Sinon je vois pas trop là, si je peux éventuellement te conseiller une dernière chose, c'est de tester carrément l'image docker de fail2ban...

      Yep yep, mon script est bien au bon endroit :/
      J'ai tenté de passé les logs de fail2ban en débug pour voir si y'avait pas un truc louche, et là, OH MY GOD !
      il crache tellement de logs ><
      mais rien de probant non plus... 🙁

      11 jours plus tard

      J'utilise un fail2ban dans un conteneur et ça marche. Mais je sais que j'avais galéré à le faire fonctionner.
      Au final, j'avais dû ajouter une nouvelle action dans le conteneur: docker-action.conf

      Peux-tu tester avec mon script https://github.com/cloneMe/turbo-seedbox ?