web-dev-qa-db-fra.com

Comment implémenter fail2ban avec Traefik

Je suis intéressé par la configuration de fail2ban avec mon déploiement Traefik. J'ai trouvé un Gist qui contient des extraits , mais je ne sais pas comment les utiliser. Quelqu'un peut-il remplir les blancs s'il vous plaît? Ou, existe-t-il un meilleur moyen de mettre en œuvre la sécurité de style fail2ban avec Traefik?

6
Seffyroff

J'ai pu accomplir cela en commençant par le Gist que vous avez publié. C'est sous l'hypothèse que Traefik fonctionne déjà, que vous souhaitez bloquer les adresses IP qui ont des échecs d'authentification HTTP de base et les interdire avec iptables. Il y a quelques morceaux alors permettez-moi de commencer par les configurations de conteneurs:

Traefik docker-compose.yaml

version: '2'
services:
  traefik:
    image: traefik:Alpine
    volumes:
    - /apps/docker/traefik/traefik.toml:/traefik.toml:ro
    - /apps/docker/traefik/acme:/etc/traefik/acme
    - /var/log/traefik:/var/log
    ports:
    - 8080:8080/tcp
    - 80:80/tcp
    - 443:443/tcp
    command:
    - --web
    - --accessLog.filePath=/var/log/access.log
    - --accessLog.filters.statusCodes=400-499

Vous pouvez voir ici que j'écris le fichier journal dans /var/log/access.log et obtenir uniquement les codes d'accès à 400-499. Je monte ensuite ce fichier sur mon hôte /var/log/traefik:/var/log

Maintenant, pour la partie fail2ban, j'utilise un conteneur docker fail2ban plutôt que d'installer sur mon hôte, mais vous pouvez techniquement le faire là aussi.

Fail2ban docker-compose.yaml

version: '2'
services:
  fail2ban:
    image: crazymax/fail2ban:latest
    network_mode: "Host"
    cap_add:
    - NET_ADMIN
    - NET_RAW
    volumes:
    - /var/log:/var/log:ro
    - /apps/docker/fail2ban/data:/data

Vous pouvez voir que je monte le /var/log répertoire dans le conteneur fail2ban en lecture seule.

Configuration de Fail2ban

Le /apps/docker/fail2ban/data/jail.d/traefik.conf le fichier contient:

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

Le /apps/docker/fail2ban/data/filter.d/traefik-auth.conf le fichier contient:

[Definition]
failregex = ^<Host> \- \S+ \[\] \"(GET|POST|HEAD) .+\" 401 .+$
ignoreregex =

Supplémentaire

L'action d'interdiction par défaut consiste à interdire via iptables. Si vous voulez changer cela, vous pouvez changer le banaction par défaut dans le traefik.conf, par exemple:

[DEFAULT]
banaction = cloudflare

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

Les actions sont ici: https://github.com/fail2ban/fail2ban/tree/0.11/config/action.d

Si vous devez en modifier un, copiez le fichier dans le /apps/docker/fail2ban/data/action.d répertoire et redémarrez le conteneur.

14
Devin B.