Aller au contenu

Création fail2ban pour protéger vaultwarden


seb773

Messages recommandés

Bonjour,

Je suis débutant sur docker et j'ai créé un Projet Vaultwarden qui fonctionne correctement dont voici ci-dessous un extrait du compose.yaml:

version: "3"
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    ports:
     - 3012:3012
     - 3013:80
    volumes:
     - /volume1/docker/vaultwarden:/data:rw
    environment:
     - ........
     - TZ=Europe/Paris
     - LOG_FILE=/data/vaultwarden.log
     - LOG_LEVEL=warn
     - EXTENDED_LOGGING=true
     - ........
networks:
  default:
    name: vaultwarden
    driver: bridge


Je voudrais me protéger un peu des attaques éventuelles, je pense que le mieux est donc de créer un autre projet comme "fail2ban".

Voici donc le code du compose.yaml que j'ai fait pour ce nouveau container:

version: '3'
services:
  fail2ban:
    container_name: fail2ban
    restart: always
    image: crazymax/fail2ban:latest
    environment:
      - TZ=Europe/Paris
      - F2B_DB_PURGE_AGE=30d
      - F2B_LOG_TARGET=/data/fail2ban.log
      - F2B_LOG_LEVEL=INFO
      - F2B_IPTABLES_CHAIN=INPUT
      - SSMTP_HOST=smtp.domain.fr
      - SSMTP_PORT=587
      - SSMTP_HOSTNAME=domain.fr
      - SSMTP_USER=mail@domain.fr
      - SSMTP_PASSWORD=psw
      - SSMTP_TLS=YES
      - SSMTP_STARTTLS=YES

    volumes:
      - /volume1/docker/fail2ban:/data:rw
      - /volume1/docker/vaultwarden:/data:ro

    network_mode: "host"

    privileged: true
    cap_add:
      - NET_ADMIN
      - NET_RAW

J'ai bien les 3 dossiers action.d / filter.d /jail.d que j'ai pris depuis la page suivante:

https://github.com/sosandroid/docker-fail2ban-synology

Je n'ai rien changé dans le dossier action.d, pour les 2 autres j'ai juste conservé les fichiers conf vaultwarden.


Cependant ce container ne fonctionne pas, il démarre puis il s'arrête. 


Il y'a donc probablement quelque chose que je n'ai pas fait correctement, savez-vous à partir de ces éléments me dire d'où peut le problème ?

Me manque t'il quelque chose, ai-je besoin d'autres container, y'a t'il d'autre méthode pour se protéger ?

Merci d'avance,

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je suis très intéressée par la question, ayant l'intention de faire à peu près la même chose. Je ne vais pour le moment pas pouvoir aider (le projet est sur la pile... un jour...). Juste, dans le second compose, le vaultwarden est en ro alors que dans le premier il est en rw. Je ne sais pas si ça peut poser problème ?

Lien vers le commentaire
Partager sur d’autres sites

Il y a 5 heures, MagJ a dit :

Juste, dans le second compose, le vaultwarden est en ro alors que dans le premier il est en rw. Je ne sais pas si ça peut poser problème ?

Je pense que c'est normal car c'est juste pour consulter le log et savoir quoi bloquer.

Lien vers le commentaire
Partager sur d’autres sites

@seb773, avant d''utiliser Fail2ban il faudrait que tu renforces la sécurité de Vaultwarden. Car dans ton fichier de config je ne vois pas les variables LOGIN_RATELIMIT_MAX_BURST, LOGIN_RATELIMIT_SECONDS et autres qui permettent de limiter le nombre de tentatives de connexion infructueuses en bloquant l'attaquant.

Tu as aussi la possibilité de forcer une identification à deux facteurs, ce qui là encore encore limite le risque même si ce n'est pas la panacée.

Lien vers le commentaire
Partager sur d’autres sites

Le 12/03/2024 à 9:18 PM, seb773 a dit :
/volume1/docker/vaultwarden:/data:ro

Comme tu le dis, c'est juste pour lire le log, donc pourquoi monter tout le dossier Vaultwarden dans le conteneur F2B ?
Déjà, tu dois trouver où se situe le fichier de log, et ensuite tu dois le monter dans le conteneur comme attendu par la jail (ou alors modifier la jail vaultwarden et vaultwarden-admin) :

/volume1/docker/vaultwarden/blablabla/.../nom_du_log_vaultwarden.log:/log/vaultwarden.log:ro

Pas besoin de faire tourner ton conteneur en mode privilégié si tu octroies les capacités NET_ADMIN et NET_RAW (je pense que tu as juste copié le compose de l'opened issue ?)

L'utilisateur qui a ouvert cette issue précise qu'il a dû ajouter chain = FORWARD dans sa jail (sinon c'est le type DOCKER-USER qui est utilisé).

Après pour le contexte, tu utilises un proxy inversé pour accéder à Vaultwarden ?

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, CyberFr a dit :

Car dans ton fichier de config je ne vois pas les variables LOGIN_RATELIMIT_MAX_BURST, LOGIN_RATELIMIT_SECONDS et autres qui permettent de limiter le nombre de tentatives de connexion infructueuses en bloquant l'attaquant.

C'est ajouté, merci pour l'info.

il y a une heure, .Shad. a dit :

Déjà, tu dois trouver où se situe le fichier de log, et ensuite tu dois le monter dans le conteneur comme attendu par la jail (ou alors modifier la jail vaultwarden et vaultwarden-admin) :

/volume1/docker/vaultwarden/blablabla/.../nom_du_log_vaultwarden.log:/log/vaultwarden.log:ro

Pas besoin de faire tourner ton conteneur en mode privilégié si tu octroies les capacités NET_ADMIN et NET_RAW (je pense que tu as juste copié le compose de l'opened issue ?)

J'ai modifié comme ci-dessous:

    volumes:
      - /volume1/docker/fail2ban:/data:rw
      - /volume1/docker/vaultwarden/vaultwarden.log:/log/vaultwarden.log:ro

    network_mode: "host"

    cap_add:
      - NET_ADMIN
      - NET_RAW

 

il y a une heure, .Shad. a dit :

L'utilisateur qui a ouvert cette issue précise qu'il a dû ajouter chain = FORWARD dans sa jail (sinon c'est le type DOCKER-USER qui est utilisé).

Quand vous parler du "jail" je suppose que c'est les fichiers conf présent dans le dossier "jail.d", je n'ai rien modifié ci-dessous le contenu:

[DEFAULT]

ignoreip = 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8  # optional
#Ban for 30 days
bantime = 2592000
findtime = 86400
maxretry = 4
banaction = iptables-allports
ignoreself = false

[vaultwarden]

enabled = true
port = 80,443,3012  # alternative: anyport
filter = vaultwarden
logpath = /log/vaultwarden.log

 

il y a une heure, .Shad. a dit :

Après pour le contexte, tu utilises un proxy inversé pour accéder à Vaultwarden ?

Oui effectivement, j'utilise le proxy inversé du nas.

 

Merci pour votre aide

Mon container est "up" depuis plusieurs minutes maintenant, donc j'espère qu'il fonctionne correctement.

 

2024-03-14 11:10:54,394 fail2ban.server         [1]: INFO    --------------------------------------------------
2024-03-14 11:10:54,394 fail2ban.server         [1]: INFO    Starting Fail2ban v1.0.2
2024-03-14 11:10:54,395 fail2ban.observer       [1]: INFO    Observer start...
2024-03-14 11:10:54,431 fail2ban.database       [1]: INFO    Connected to fail2ban persistent database '/data/db/fail2ban.sqlite3'
2024-03-14 11:10:54,432 fail2ban.jail           [1]: INFO    Creating new jail 'vaultwarden-admin'
2024-03-14 11:10:54,452 fail2ban.jail           [1]: INFO    Jail 'vaultwarden-admin' uses pyinotify {}
2024-03-14 11:10:54,452 fail2ban.jail           [1]: INFO    Initiated 'pyinotify' backend
2024-03-14 11:10:54,457 fail2ban.filter         [1]: INFO      maxRetry: 4
2024-03-14 11:10:54,458 fail2ban.filter         [1]: INFO      findtime: 86400
2024-03-14 11:10:54,458 fail2ban.actions        [1]: INFO      banTime: 2592000
2024-03-14 11:10:54,458 fail2ban.filter         [1]: INFO      encoding: UTF-8
2024-03-14 11:10:54,458 fail2ban.filter         [1]: INFO    Added logfile: '/log/vaultwarden.log' (pos = 0, hash = a302e0746052998a8b39892655575de4b59eb37f)
2024-03-14 11:10:54,459 fail2ban.jail           [1]: INFO    Creating new jail 'vaultwarden'
2024-03-14 11:10:54,459 fail2ban.jail           [1]: INFO    Jail 'vaultwarden' uses pyinotify {}
2024-03-14 11:10:54,459 fail2ban.jail           [1]: INFO    Initiated 'pyinotify' backend
2024-03-14 11:10:54,460 fail2ban.filter         [1]: INFO      maxRetry: 4
2024-03-14 11:10:54,460 fail2ban.filter         [1]: INFO      findtime: 86400
2024-03-14 11:10:54,461 fail2ban.actions        [1]: INFO      banTime: 2592000
2024-03-14 11:10:54,461 fail2ban.filter         [1]: INFO      encoding: UTF-8
2024-03-14 11:10:54,461 fail2ban.filter         [1]: INFO    Added logfile: '/log/vaultwarden.log' (pos = 0, hash = a302e0746052998a8b39892655575de4b59eb37f)
2024-03-14 11:10:54,464 fail2ban.jail           [1]: INFO    Jail 'vaultwarden-admin' started
2024-03-14 11:10:54,464 fail2ban.jail           [1]: INFO    Jail 'vaultwarden' started

@CyberFr@.Shad. Merci beaucoup

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

salut, de mon coté je n'ai plus le meme résultat depuis plusieurs jours. soit la mise a jour du DSM 7.2.1-69057 Update 5 ( DS920+ )     iptables v1.8.10

soit la maj de crazymax/fail2ban. crazymax/fail2ban:1.1.0

j'ai tout retourné dans tout les sens ... impossible de regler le probleme pour le moment, cela fonctionnais bien avant 

 

 

2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,678 fail2ban.actions        [1]: ERROR   Failed to execute ban jail 'vaultwarden' action 'iptables-allports' info 'ActionInfo({'ip': 'XX.XX.XX.XX', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7fd7e3965d00>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7fd7e3966480>})': Error starting action Jail('vaultwarden')/iptables-allports: 'Script error'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,677 fail2ban.utils          [1]: ERROR   7fd7e39cd6b0 -- returned 4
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,677 fail2ban.utils          [1]: ERROR   7fd7e39cd6b0 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,677 fail2ban.utils          [1]: ERROR   7fd7e39cd6b0 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,677 fail2ban.utils          [1]: ERROR   7fd7e39cd6b0 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	done
2024/05/04 22:19:23	stdout	{ iptables -w -C INPUT -p $proto -j f2b-vaultwarden >/dev/null 2>&1; } || { iptables -w -I INPUT -p $proto -j f2b-vaultwarden; }
2024/05/04 22:19:23	stdout	for proto in $(echo 'tcp' | sed 's/,/ /g'); do
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,677 fail2ban.utils          [1]: ERROR   7fd7e39cd6b0 -- exec: { iptables -w -C f2b-vaultwarden -j RETURN >/dev/null 2>&1; } || { iptables -w -N f2b-vaultwarden || true; iptables -w -A f2b-vaultwarden -j RETURN; }
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,662 fail2ban.actions        [1]: NOTICE  [vaultwarden] Restore Ban XX.XX.XX.XX
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,579 fail2ban.actions        [1]: ERROR   Failed to execute ban jail 'vaultwarden-admin' action 'iptables-allports' info 'ActionInfo({'ip': 'XX.XX.XX.XX', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7fd7e3965d00>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7fd7e3966480>})': Error starting action Jail('vaultwarden-admin')/iptables-allports: 'Script error'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,579 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- returned 4
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,579 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,579 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,579 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	done
2024/05/04 22:19:23	stdout	{ iptables -w -C INPUT -p $proto -j f2b-vaultwarden-admin >/dev/null 2>&1; } || { iptables -w -I INPUT -p $proto -j f2b-vaultwarden-admin; }
2024/05/04 22:19:23	stdout	for proto in $(echo 'tcp' | sed 's/,/ /g'); do
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,579 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- exec: { iptables -w -C f2b-vaultwarden-admin -j RETURN >/dev/null 2>&1; } || { iptables -w -N f2b-vaultwarden-admin || true; iptables -w -A f2b-vaultwarden-admin -j RETURN; }
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,564 fail2ban.actions        [1]: ERROR   Failed to execute ban jail 'vaultwarden-admin' action 'iptables-allports' info 'ActionInfo({'ip': 'XX.XX.XX.XX', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7fd7e3965d00>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7fd7e3966480>})': Error starting action Jail('vaultwarden-admin')/iptables-allports: 'Script error'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,563 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- returned 4
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,563 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,563 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'
2024/05/04 22:19:23	stdout	2024-05-04 20:19:23,563 fail2ban.utils          [1]: ERROR   7fd7e3224370 -- stderr: 'iptables v1.8.10 (nf_tables): Could not fetch rule set generation id: Invalid argument'

vaultwarden.conf de jail.d

 

[DEFAULT]
ignoreip = 172.0.0.1/8 192.168.10.0/24 10.6.0.0/24
#Ban for 1 day
bantime = 86400
destemail = xxxxxxxxx@gmail.com
sender = fail2ban@host.com(hostname -f)
#findtime for 4h
findtime = 14400
maxretry = 3
backend = auto
banaction = iptables-allports

action = iptables-allports[name=vaultwarden]

[vaultwarden]

enabled = true
port = 80,6603,443,
filter = vaultwarden
logpath = /logs/vaultwarden.log

 

vaultwarden.conf  de filter.d 

 

[INCLUDES]
before = common.conf

[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =
Modifié par syruce76
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.