Mise à jour de 'docker-compose/plex_et_tautulli/docker-compose.yml' #54
@ -41,23 +41,18 @@
|
||||
##===========================================================================================================
|
||||
## ##
|
||||
## Ma commande à lancer : ##
|
||||
## bash /volume1//docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh mon-ndd-a-moi.tld 8001 30120 ##
|
||||
## bash /volume1/docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh mon-ndd-a-moi.tld 8001 30120 ##
|
||||
## ##
|
||||
##===========================================================================================================
|
||||
|
||||
LOC_DIR="/etc/nginx"
|
||||
part1=0
|
||||
part2=0
|
||||
# declare -r nb_param=$# # Nombre d'argument(s) fourni(s) au script.
|
||||
# declare -r param_1="$1" # 1er argument fourni
|
||||
# declare -r param_2="$2" # 1er argument fourni
|
||||
# declare -r param_3="$3" # 1er argument fourni
|
||||
|
||||
echo -e "\n$(date "+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh pour activer les Notifications Websockets"
|
||||
echo "$(date "+%R:%S - ") Exécution des commandes..."
|
||||
|
||||
f_affiche_parametre() {
|
||||
echo " bash /volume1/docker/bitwarden/enable_ws.sh vault.example.com 5555 5556 "
|
||||
echo " bash /volume1/docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh vault.example.com 5555 5556 "
|
||||
echo " -- vault.example.com = Nom de domaine de Bitwarden_rs (celui du Reverse Proxy de DSM) "
|
||||
echo " -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM)"
|
||||
echo " -- 5556 = Port exposé WEBSOCKET_PORT par Docker"
|
||||
@ -73,9 +68,11 @@ if [ ! $# -eq 3 ]; then
|
||||
f_affiche_parametre
|
||||
fi
|
||||
echo -e "$(date "+%R:%S - ") ECHEC de lancement du script !!!!!!!!!\n"
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$(date "+%R:%S - ") Exécution des commandes..."
|
||||
|
||||
|
||||
#############################################################################################################
|
||||
## Début de la partie de création/modification de fichiers
|
||||
@ -96,31 +93,29 @@ location /notifications/hub/negotiate {
|
||||
}
|
||||
""" >> $LOC_DIR/ws.locations
|
||||
|
||||
if [ $part1 -eq 1 ]; then
|
||||
echo "$(date "+%R:%S - ") -- 1ère étape du script : le fichier existait déjà, il a été supprimé."
|
||||
fi
|
||||
echo "$(date "+%R:%S - ") -- 1ère étape du script : écriture du fichier $LOC_DIR/ws.locations ."
|
||||
|
||||
|
||||
if ! grep -q "ws.locations" /etc/nginx/app.d/server.ReverseProxy.conf; then
|
||||
sed -i "/$1;/ a\ include $LOC_DIR/ws.locations;" /etc/nginx/app.d/server.ReverseProxy.conf
|
||||
if nginx -t 2>/dev/null; then synoservicecfg --reload nginx; else exit 1; fi
|
||||
|
||||
echo "$(date "+%R:%S - ") -- Étape finale du script atteinte : Écriture dans le fichier server.ReverseProxy.conf."
|
||||
part2=1
|
||||
part2=1 # Variable pour indiquer que cette partie a été exécutée
|
||||
fi
|
||||
##
|
||||
## Fin de la partie de création/modification de fichiers
|
||||
#############################################################################################################
|
||||
|
||||
|
||||
|
||||
echo "$(date "+%R:%S - ") -- Vérification du fichier créé lors de la 1ère étape du script (qu'elle ait été exécuté maintenant ou précédemment) :"
|
||||
echo "cat /etc/nginx/ws.locations"
|
||||
cat /etc/nginx/ws.locations
|
||||
if [ ! $part2 -eq 1 ]; then
|
||||
echo "$(date "+%R:%S - ") -- 2ème étape du script inutile donc non exécutée : la modification du fichier server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution"
|
||||
if [ $part1 -eq 1 ]; then
|
||||
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/ws.locations existait déjà, il a été supprimé puis recréé."
|
||||
else
|
||||
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/ws.locations n'existait pas, il a été créé."
|
||||
fi
|
||||
if [ $part2 -eq 1 ]; then
|
||||
echo "$(date "+%R:%S - ") -- !!!!!! ---> La modification dans le fichier /etc/nginx/app.d/server.ReverseProxy.conf n'existait pas. Elle a été écrite."
|
||||
echo "$(date "+%R:%S - ") -- !!!!!! ---> Le fichier /etc/nginx/app.d/server.ReverseProxy.conf a du être réinitialisé après un reboot ou lors d'une modification du reverse-proxy dans DSM."
|
||||
else
|
||||
echo "$(date "+%R:%S - ") -- La modification du fichier /etc/nginx/app.d/server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution. Aucune modification n'est donc nécessaire."
|
||||
fi
|
||||
|
||||
echo "$(date "+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh terminé"
|
||||
|
||||
exit
|
552
docker-compose/bitwardenrs_backup/Tuto - forum-nas.bbcode
Normal file
552
docker-compose/bitwardenrs_backup/Tuto - forum-nas.bbcode
Normal file
@ -0,0 +1,552 @@
|
||||
[size=200][color=#800000][b]( [u] > TUTO mis à jour < [/u] )[/b][/color][/size]
|
||||
|
||||
|
||||
Bonjour à toutes et à tous,
|
||||
|
||||
[color=#BF40BF][b][size=200]Préambule[/size][/b][/color]
|
||||
Tout d'abord, pourquoi je fais un nouveau tuto d'installation de [url=https://github.com/dani-garcia/bitwarden_rs]Bitwarden_rs[/url]... En fait je n'ai pas vu de tuto vraiment à mon goût sur l'installation de [url=https://github.com/dani-garcia/bitwarden_rs]Bitwarden_rs[/url], soit il manque des explications, soit c'est fait via l'interface DSM de docker... Donc je me décide à en faire un moi-même.
|
||||
Je précise qu'il n'y aura pas beaucoup de différences avec ceux trouvés sur le NET, si ce n'est ceci :
|
||||
[list]
|
||||
[*] L'utilisation de Portainer ou de la ligne de commande (=CLI) avec docker-compose
|
||||
[*] Des commentaires expliquants la plupart des options utilisées tout le long du docker-compose.yml
|
||||
[*] Une utilisation combinée avec un conteneur faisant automatiquement des sauvegardes de la base de données, là aussi avec des commentaires dans le docker-compose.yml : [url]https://gitlab.com/1O/bitwarden_rs-backup[/url]
|
||||
[/list]
|
||||
|
||||
|
||||
[color=#4040BF][b][size=200]Sommaire :[/size][/b]
|
||||
1. Prérequis
|
||||
2- Mise en place et création des conteneurs [color=#800000][b]( [u] > Mise à jour < [/u] )[/b][/color]
|
||||
2.1- Petites explications sur ce qui suivra
|
||||
2.2- Création du docker-compose.yml [color=#800000][b]( [u] > Mise à jour < [/u] )[/b][/color]
|
||||
2.3- Création des dossiers et du réseau
|
||||
2.4- Création des conteneurs (2 méthodes)
|
||||
3- 1er lancement et sécurisation 2FA
|
||||
4- Ajout d'un script pour les notifications Websocket [color=#800000][b]( [u] > Ajout < [/u] )[/b][/color]
|
||||
4.1- Explications : Pourquoi ? Comment ? [color=#800000][b]( [u] > Ajout < [/u] )[/b][/color]
|
||||
4.2- Comment lancer le script ? [color=#800000][b]( [u] > Ajout < [/u] )[/b][/color]
|
||||
4.3- Enfin le script lui même ! [color=#800000][b]( [u] > Ajout < [/u] )[/b][/color]
|
||||
...
|
||||
[/color]
|
||||
|
||||
[color=#BF40BF][b][size=200]1- Prérequis[/size][/b][/color]
|
||||
|
||||
Pour mettre en oeuvre ce tuto, il faudra au préalable :
|
||||
[list][*] que vous ayez mis en place [b][u]Portainer[/u][/b] ([url=https://www.forum-nas.fr/viewtopic.php?f=56&t=14030]voir le tuto d'EVOTk[/url]) ;
|
||||
[*] que vous sachiez vous connecter en SSH au NAS et lancer [i]docker-compose up -d[/i] si vous optez pour la création des conteneurs en ligne de commande (vous trouverez ici un tuto explicatif : [url=https://www.forum-nas.fr/viewtopic.php?f=56&t=11461][Tuto] Acceder à son NAS en lignes de commande[/url]) ;
|
||||
[*] savoir identifier les PUID et PGID d'un utilisateur avec une ligne de commande en SSH sur le NAS.
|
||||
[/list]
|
||||
|
||||
|
||||
[size=200][color=#BF40BF][b]2- Mise en place et création des conteneurs[/b][/color] [color=#800000][b]( [u] > Mise à jour < [/u] )[/b][/color][/size]
|
||||
|
||||
[color=#BF40BF][b][size=150]2.1- Petites explications sur ce qui suivra[/size][/b][/color]
|
||||
|
||||
Le but de ce tuto est de tout préparer sur l'ordinateur avant de placer les fichiers/dossiers au bon endroit, tout en comprenant bien ce qui est fait et les implications de certaines options.
|
||||
On va tout d'abord commencer par créer un fichier [i]docker-compose.yml[/i] qui pourra servir pour les deux méthodes d'installation (Portainer, ou CLI).
|
||||
J'opte pour combiner la création des deux conteneurs ([b]bitwarden_rs[/b] et [b]Bitwarden_rs Backup[/b]) en un seul fichier [i]docker-compose.yml[/i]. J'ai également choisi de placer ces deux conteneurs dans un même réseau (network) que je nomme [i]bitwarden_network[/i].
|
||||
Ensuite il faudra créer ce réseau et les dossiers utilisés avant de créer les conteneurs.
|
||||
Pour les dossiers, je pars sur cette organisation : (sur le volume1)
|
||||
[url=https://i.imgur.com/4A40l2A.png][img]https://i.imgur.com/4A40l2A.png[/img][/url]
|
||||
|
||||
|
||||
[b][color=#800000]Note : Tout ce qui sera XXxxXX sera à remplacer par vos valeurs. J'indiquerais comment les obtenir si ce n'est pas évident.[/color][/b]
|
||||
|
||||
[size=150][color=#BF40BF][b]2.2- Création du docker-compose.yml[/b][/color] [color=#800000][b]( [u] > Mise à jour < [/u] )[/b][/color][/size]
|
||||
Vous pouvez télécharger le fichier ci-joint :
|
||||
[list][*] Ancienne version [attachment=1]ANCIEN--docker-compose--bitwardenrs-et-backup.7z[/attachment]
|
||||
[*] [b][color=#800000]Nouvelle version du fichier docker-compose :[/color][/b] [attachment=2]NOUVEAU - bitwardenrs_backup_docker-compose.7z[/attachment]
|
||||
[/list]
|
||||
[size=150][color=#800000][b]( Dans la mise à jour du tuto, j'ai ajouté pas mal de commentaires dans le fichier docker-compose.yml. Lisez-les attentivement )[/b][/color][/size]
|
||||
|
||||
Ce fichier est composé de trois parties : une partie dédiée à bitwarden_rs et à sa configuration, et une autre partie dédiée à bitwarden_rs backup et à sa configuration, et enfin une pour le réseau.
|
||||
|
||||
[u][b]Explications sur la partie configuration ([b][color=#4040FF]partie 1[/color][/b]) de bitwarden_rs (1ère partie du docker-compose.yml) :[/b][/u]
|
||||
|
||||
Ce qui suit met en place la version de docker-compose à utiliser : pour plus de compatibilité (et par simplicité car je ne maitrise pas la v3...) on part sur une v2.
|
||||
Je place dans l'extrait ci-dessous des commentaires supplémentaires (non présents dans le fichier joint) pour expliquer les choix faits.
|
||||
[code]##==============================================================================================
|
||||
## ##
|
||||
## Fichier docker-compose.yml pour Bitwarden_RS avec Bitwarden-Backup ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Attention, avec ce fichier, il faut avoir créer le réseau "bitwarden_network" avant de ##
|
||||
## créer les conteneurs. ##
|
||||
## ##
|
||||
## La mise en place de fail2ban se fera avec un docker-compose dédié. ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Ajout des Notifications Websocket ##
|
||||
## ##
|
||||
## Pour qu'elles'fonctionnent, il faut configurer le reverse-proxy correctement. ##
|
||||
## Pour celui de DSM, il n'est malheureusement pas possible de configurer les ##
|
||||
## redirections /notifications/hub vers le serveur WebSocket ni celles vers le port normal ##
|
||||
## /notifications/hub/negotiate ##
|
||||
## Voir cet article pour tout ce qui n'est pas possible via l'interface de DSM : ##
|
||||
## https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-WebSocket-notifications ##
|
||||
## ##
|
||||
## Dès lors, il faut ruser et passer par l'exécution d'un petit script qui va créer un ##
|
||||
## fchier ws.locations contenant les modifications précédentes, et qui va écrire une ##
|
||||
## ligne dans le fichier /etc/nginx/app.d/server.ReverseProxy.conf pour inclure le ##
|
||||
## fichier ws.locations au niveau de la section concernant le nom de domaine pour ##
|
||||
## bitwarden_RS. ##
|
||||
## Comme cela, il n'est pas nécessaire de passer par le changement de reverse-proxy, assez ##
|
||||
## complexe à mettre en oeuvre... ##
|
||||
## ##
|
||||
## Le script est : Bitwarden_RS__Enable_Websocket.sh ##
|
||||
## ##
|
||||
## Il faudra la lancer régulièrement et à chaque redémarrage du NAS, via deux tâches ##
|
||||
## plannifiées dédiées, en donnant 3 paramètres au fichier : ##
|
||||
## - le nom de domaine de bitwarden ##
|
||||
## - le port HTTP exposé (donc pas l'interne du conteneur) pour l'interface graphique ##
|
||||
## - le port websocket exposé (donc pas l'interne du conteneur) ##
|
||||
## Voir les commentaires de ce fichier Bitwarden_RS__Enable_Websocket.sh pour plus ##
|
||||
## d'explications. ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
|
||||
---
|
||||
version: "2"
|
||||
|
||||
services:
|
||||
bitwardenrs: # Voir : https://github.com/dani-garcia/bitwarden_rs
|
||||
image: bitwardenrs/server:latest
|
||||
container_name: bitwardenrs
|
||||
networks:
|
||||
- bitwarden_network
|
||||
environment:
|
||||
# Utiliser la commande (en SSH) : id NOM_UTILISATEUR
|
||||
- PUID=XXxxXX
|
||||
- PGID=XXxxXX
|
||||
- TZ=Europe/Paris
|
||||
|
||||
# Pour l'envoi d'emails
|
||||
- SMTP_HOST=XXxxXX
|
||||
- SMTP_FROM=XXxxXX
|
||||
- SMTP_FROM_NAME=BlaBla
|
||||
- SMTP_PORT=XXxxXX
|
||||
- SMTP_SSL=true
|
||||
- SMTP_USERNAME=XXxxXX
|
||||
- SMTP_PASSWORD=XXxxXX
|
||||
|
||||
- INVITATION_ORG_NAME=Bitwarden_RS [Votre Nom, pseudo...] # Permet de spécifier un nom d'application pour les invitations d'organisation
|
||||
|
||||
# Nécessaire pour activer le 2FA pour la connexion à notre serveur bitwarden_rs
|
||||
# Il est possible de spécifier un port de connexion dans l'URL. Le https:// est obligatoire.
|
||||
# Pour cette option, il est donc OBLIGATOIRE d'avoir fait le nécessaire pour avoir du HTTPS (certificats, reverse-proxy, ...)
|
||||
- DOMAIN=XXxxXX
|
||||
|
||||
# Pour enregistrer les log avec un niveau particulier
|
||||
- LOG_FILE=/data/bitwarden.log
|
||||
- LOG_LEVEL=warn
|
||||
- EXTENDED_LOGGING=true
|
||||
|
||||
# je n'aime pas les indices pour les mots de passe...
|
||||
- SHOW_PASSWORD_HINT=false
|
||||
|
||||
# Pour activer la console d'administation, accessible via : https://mon.domaine.tld/admin/
|
||||
# Voir détails ici : https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-admin-page
|
||||
# /!\
|
||||
# /!\ N'importe qui pourra accéder à la page de connexion, alors blinder le token d'amdin ci-dessous (64 caractères pour moi) !
|
||||
# /!\ Il est de plus TRÈS important d'avoir ACTIVÉ le HTTPS avant l'activation de cette option.
|
||||
# /!\
|
||||
# Je conseille de ne l'activer qu'en cas de nécessité, et de la désactiver après.
|
||||
# Pour désactiver, il suffit de commenter la ligne ci-dessous.
|
||||
- ADMIN_TOKEN=XXxxXX
|
||||
# À noter :
|
||||
# La première fois que vous enregistrez un paramètre dans la page d'administration, 'config.json' sera généré
|
||||
# dans votre 'DATA_FOLDER'. Les valeurs de ce fichier auront priorité sur les valeurs 'environnement'.
|
||||
|
||||
- SIGNUPS_ALLOWED=false # Fait en sorte que les inscriptions soient bloquées, seul l'admin pourra inviter
|
||||
# des utilisateurs avec un envoi d'email depuis la console d'administation
|
||||
|
||||
- WEBSOCKET_ENABLED=true # Active les WebSocket notifications (Nécessite la configuration du reverse-proxy)
|
||||
# Durant le nombre importants d'essais, j'en suis venu à laisser le port par défaut
|
||||
# pour le WEBSOCKET_PORT. Il est possible que ça fonctionne avec un port différent.
|
||||
# Il faudra alors décommenter la ligne suivante, et changer le port exposé plus bas.
|
||||
#- WEBSOCKET_PORT=3012 # Par défaut = 3012
|
||||
|
||||
# Pour activer la récupération des icones des IP LAN, il faut mettre sur false la variable ICON_BLACKLIST_NON_GLOBAL_IPS
|
||||
- ICON_BLACKLIST_NON_GLOBAL_IPS=false # Par défaut = true
|
||||
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
|
||||
volumes:
|
||||
- "/volume1/docker/bitwarden_rs/bitwarden-data/:/data/"
|
||||
ports:
|
||||
- XXxxXX:3012 # Choisir un port libre pour le websocket
|
||||
- XXxxXX:80 # Choisir un port libre pour l'interface WEB
|
||||
restart: unless-stopped[/code]
|
||||
|
||||
|
||||
[u][b]Maintenant la deuxième partie ([b][color=#4040FF]partie 2[/color][/b]) qui peut ne pas être utilisée si vous ne souhaitez pas sauvegarder automatiquement la BDD :[/b][/u] [color=#800000][b]( [u] > Mise à jour < [/u] )[/b][/color]
|
||||
|
||||
Comme précédemment, les indications sont en commentaires)
|
||||
[code] # Sauvegarde automatique de la base de données, au-cas-où !
|
||||
bitwarden_backup: # Voir : https://gitlab.com/1O/bitwarden_rs-backup
|
||||
image: bruceforce/bw_backup:latest
|
||||
container_name: bitwarden_backup
|
||||
networks:
|
||||
- bitwarden_network
|
||||
restart: always
|
||||
depends_on:
|
||||
bitwardenrs:
|
||||
condition: service_healthy
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
volumes:
|
||||
#- /etc/localtime:/etc/localtime:ro # Devenu inutile sur nos Syno avec la variable d'env. TZ (voir plus bas)
|
||||
- /volume1/docker/bitwarden_rs/bitwarden-data/:/data/
|
||||
# Chemin d'accès pour stocker le backup, voir https://gitlab.com/1O/bitwarden_rs-backup#wrong-permissions
|
||||
- /volume1/docker/bitwarden_rs/bitwarden-backup:/backup_folder/
|
||||
|
||||
environment:
|
||||
# Path to the Bitwarden sqlite3 database inside the container
|
||||
- DB_FILE=/data/db.sqlite3
|
||||
|
||||
# Path to the desired backup location inside the container
|
||||
# - BACKUP_FILE=/data/db_backup/backup.sqlite3
|
||||
- BACKUP_FILE=/backup_folder/backup.sqlite3
|
||||
|
||||
# Sets the permissions of the backup file
|
||||
# The permissions should at least be 700 since the backup folder itself gets the same permissions
|
||||
# and with 600 it would not be accessible.
|
||||
- BACKUP_FILE_PERMISSIONS=700
|
||||
|
||||
# Cronjob format "Minute Hour Day_of_month Month_of_year Day_of_week Year"
|
||||
# https://crontab.guru/#0_9_*_*_*
|
||||
# minutes | heures | jour du mois | mois | jour de la semaine
|
||||
- CRON_TIME=0 18 * * *
|
||||
|
||||
# Set to true to append timestamp to the BACKUP_FILE
|
||||
- TIMESTAMP=true
|
||||
|
||||
# User ID to run the cron job with
|
||||
- UID=1038 # J'ai créé un utilisateur dédié à Bitwarden, utiliser la commande 'id nom_user'
|
||||
|
||||
# Group ID to run the cron job with
|
||||
- GID=100
|
||||
|
||||
# Path to the logfile inside the container
|
||||
#- LOGFILE
|
||||
|
||||
# Path to the cron file inside the container
|
||||
#- CRONFILE
|
||||
|
||||
# Delete old backups after X many days
|
||||
- DELETE_AFTER=14
|
||||
|
||||
# If you need timestamps in your local timezone you should mount /etc/timezone:/etc/timezone:ro and
|
||||
# /etc/localtime:/etc/localtime:ro like it's done in the docker-compose.yml.
|
||||
# An other possible solution is to set the environment variable accordingly (like TZ=Europe/Berlin)
|
||||
# (see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for more information).
|
||||
- TZ=Europe/Paris
|
||||
[/code]
|
||||
|
||||
|
||||
[u][b]Et enfin une dernière partie ([b][color=#4040FF]partie 3[/color][/b]) qui est obligatoire, celle qui concerne le réseau :[/b][/u]
|
||||
[code]networks: # On indique ici de quel réseau on parlait précédement
|
||||
bitwarden_network:
|
||||
external: # C'est un réseau créé en dehors du docker-compose.
|
||||
name: bitwarden_network # Je précise toujours un nom, car sinon ça va prendre un nom à rallonge avec
|
||||
# le nom du conteneur et du réseau voulu...
|
||||
[/code]
|
||||
|
||||
Il est à préciser que ces trois parties sont à fusionner en un seul et même fichier. Je les ai séparer pour les explications.
|
||||
Voir le fichier docker-compose.yml joint précédement.
|
||||
|
||||
[color=#BF40BF][b][size=150]2.3- Création des dossiers et du réseau[/size][/b][/color]
|
||||
|
||||
La partie explications des options à placer dans le fichier [i]docker-compose.yml[/i] étant faite, passons à la [b]création des dossiers sur le NAS[/b].
|
||||
Vous pouvez soit passer par DSM, soit par la ligne de commande.
|
||||
Si vous optez pour la CLI, voilà les commandes à taper :
|
||||
[code]sudo -i
|
||||
cd /volume1/docker
|
||||
mkdir -p bitwarden_rs bitwarden_rs/bitwarden-data bitwarden_rs/bitwarden-backup[/code]
|
||||
Une fois ces dossiers créés, copier votre [i]docker-compose.yml[/i] dans le dossier [b]/volume1/docker/bitwarden_rs[/b].
|
||||
|
||||
Il faut maintenant créer le réseau. Plusieurs possibilités existent.
|
||||
Soit vous passez par DSM (non expliquée ici), soit vous passez par Portainer, soit enfin via la CLI.
|
||||
[list][*] [b][color=#008040] Utilisation de Portainer :[/color][/b]
|
||||
Dans Portainer, il faut aller dans la section [b]Networks[/b], et ensuite cliquer sur le bouton [b]Add Network[/b] :
|
||||
[url=https://i.imgur.com/GleZg5t.png][img]https://i.imgur.com/GleZg5t.png[/img][/url]
|
||||
Ensuite, il suffit juste de rentrer le nom du réseau à créer (ici : ) et de bien choisir Bridge comme Driver :
|
||||
[url=https://i.imgur.com/g3AJxFC.png][img]https://i.imgur.com/g3AJxFCl.png[/img][/url]
|
||||
Il n'y a pas besoin de toucher au reste. Portainer choisir les IP en fonction de ce qui est déjà créé chez vous.
|
||||
________________
|
||||
|
||||
[*] [b][color=#008040] Utilisation de la CLI :[/color][/b]
|
||||
Pour créer le réseau bitwarden_network :
|
||||
[code]sudo docker network create bitwarden_network[/code]
|
||||
Si vous voulez supprimer le réseau ainsi créé, il faut taper :
|
||||
[code]sudo docker network rm bitwarden_network[/code]
|
||||
Au besoin, si vous voulez lister les réseeaux :
|
||||
[code]sudo docker network ls[/code]
|
||||
Note : Si vous avez plusieurs commandes à taper en mode root, il faut faire : [i]sudo -i[/i]
|
||||
Et ensuite taper vos commande sans le [i]sudo[/i] devant.
|
||||
[/list]
|
||||
|
||||
|
||||
|
||||
[color=#BF40BF][b][size=150]2.4- Création des conteneurs (2 méthodes)[/size][/b][/color]
|
||||
Maintenant tout est prêt pour qu'on se lance dans la création des conteneurs.
|
||||
Deux possibilités : passer par Portainer, ou bien la CLI.
|
||||
[list]
|
||||
[*] [b][color=#008040] Par [u]Portainer[/u] :[/color][/b]
|
||||
Il faut aller dans la section "[b]Stacks[/b]", puis cliquer sur le bouton "[b]+ Add stack[/b]" :
|
||||
[url=https://i.imgur.com/CIMB1gp.png][img]https://i.imgur.com/CIMB1gp.png[/img][/url]
|
||||
Ensuite, on donne un nom à la stack que l'on va créer et on copie/colle le contenu du fichier [b][i]docker-compose.yml[/i][/b] créé précédemment :
|
||||
[url=https://i.imgur.com/c1oY59d.png][img]https://i.imgur.com/c1oY59dl.png[/img][/url]
|
||||
Il est également possible d'uploader ce dit fichier en utilisant le bouton "Upload" : (je n'ai personnellement jamais utiliser cette option, mais il n'y a pas de raison pour qu'elle ne fonctionne pas)
|
||||
[url=https://i.imgur.com/XxbFs6F.png][img]https://i.imgur.com/XxbFs6Fl.png[/img][/url]
|
||||
|
||||
Il ne reste plus qu'à cliquer sur le bouton "Deploy the stack" tout en bas à gauche de la page :
|
||||
[url=https://i.imgur.com/nJE7Z2R.png][img]https://i.imgur.com/nJE7Z2Rl.png[/img][/url]
|
||||
|
||||
Si une erreur apparait, ce sera dans le coin supérieur droit dans un rectangle rouge, essayer d'en faire une capture avant sa disparition.
|
||||
Si non, un message en vert apparait et les conteneurs seront créés :
|
||||
[url=https://i.imgur.com/3jMl1BF.png][img]https://i.imgur.com/3jMl1BF.png[/img][/url]
|
||||
[url=https://i.imgur.com/fixEiJh.png][img]https://i.imgur.com/fixEiJh.png[/img][/url]
|
||||
Vous noterez dans cette stack, il est possible de l'éditer pour la modifier avec l'onglet [b]Editor[/b] :
|
||||
[url=https://i.imgur.com/IaHNqZZ.png][img]https://i.imgur.com/IaHNqZZ.png[/img][/url]
|
||||
__________
|
||||
|
||||
[*] [b][color=#008040] Par [u]la CLI[/u] :[/color][/b]
|
||||
Avec la ligne de commande, il faut être en root (voir remarque faite précédemment à ce propos...).
|
||||
Il faut aussi être dans le dossier contenant le fichier docker-compose, sinon il faut spécifier avec un argument supplémentaire le fichier et son chemin. Je choisi la facilité : on se place dans le bon dossier :
|
||||
[code]cd /volume1/docker/bitwarden_rs
|
||||
sudo docker-compose up -d[/code]
|
||||
La création des deux conteneurs se fait et ils démarrent.
|
||||
[/list]
|
||||
|
||||
|
||||
|
||||
[color=#BF40BF][b][size=200]3- 1er lancement et sécurisation 2FA[/size][/b][/color]
|
||||
Une fois les étapes précédentes accomplies, il faut accéder au serveur avec l'url que vous avez indiqué dans la configuration.
|
||||
Si vous essayer d'accéder via l'IP LAN en http ça ne fonctionnera pas, car le HTTPS est activé, vous aurez l'erreur suivante :
|
||||
[url=https://i.imgur.com/fgfVIHs.png][img]https://i.imgur.com/fgfVIHs.png[/img][/url]
|
||||
Et si vous essayer toujours avec l'IP mais en HTTPS, vous aurez cette erreur :
|
||||
[url=https://i.imgur.com/NpwOycm.png][img]https://i.imgur.com/NpwOycml.png[/img][/url]
|
||||
Bref, il faut y accéder avec votre nom de domaine :
|
||||
[url=https://i.imgur.com/YnfDVX9.png][img]https://i.imgur.com/YnfDVX9l.png[/img][/url]
|
||||
Il faut ensuite créer votre compte et vous pourrez alors créer vos mots de passe, importer depuis un autre logiciel de mot de passe...
|
||||
[url=https://i.imgur.com/5sIki2u.png][img]https://i.imgur.com/5sIki2u.png[/img][/url]
|
||||
|
||||
Voilà voilà.
|
||||
Reste plus qu'à sécuriser le compte avec le 2FA. Pour cela, il faut aller dans le compte :
|
||||
[url=https://i.imgur.com/f9Kfhru.png][img]https://i.imgur.com/f9Kfhru.png[/img][/url]
|
||||
[url=https://i.imgur.com/IlJMcNs.png][img]https://i.imgur.com/IlJMcNsl.png[/img][/url]
|
||||
Puis il faut choisir votre méthode. J'ai choisi de passer par une application d'authentification comme MS Authenticator, ou Authy, ou même une autre application de mot de passe comme EnPass que j'utilise aussi.
|
||||
Cliquer sur le bouton Gérer de la méthode choisie : [url=https://i.imgur.com/SX17nHB.png][img]https://i.imgur.com/SX17nHB.png[/img][/url]
|
||||
Entre votre mot de passe maitre (celui du compte BW) :
|
||||
[url=https://i.imgur.com/wiwWUcd.png][img]https://i.imgur.com/wiwWUcdl.png[/img][/url]
|
||||
À l'aide de l'application d'authentification, après y avoir entrer les infos (QR-Code ou Code alphanumérique), entrer le code à usage unique générer pour valider le 2FA :
|
||||
[url=https://i.imgur.com/dCv6lEB.png][img]https://i.imgur.com/dCv6lEBl.png[/img][/url]
|
||||
|
||||
Voilà, le compte est protégé :)
|
||||
|
||||
PS : si vous n'avez plus besoin de compte sur votre serveur, il est possible de désactiver la création des comptes.
|
||||
Dans la section :
|
||||
[code] environment:[/code]
|
||||
Il faut ajouter ceci :
|
||||
[code] - SIGNUPS_ALLOWED=false[/code]
|
||||
|
||||
|
||||
|
||||
|
||||
[size=200][color=#800000][b]( [u] > Mise à jour : AJOUT < [/u] )[/b][/color][/size]
|
||||
|
||||
|
||||
[color=#BF00BF][size=200][b]4- Ajout d'un script pour les notifications Websocket[/b][/size][/color]
|
||||
Alors, après pas mal de temps de recherche, j'ai finalement trouvé comment activer les notifications Websocket et j'ai aussi compris leur utilité.
|
||||
J'ai trouvé la méthode sur le forum officiel de Bitwarden_RS, où ce lien a été posté : https://gist.github.com/nstanke/3949ae1c4706854d8f166d1fb3dadc81
|
||||
J'ai pris ce script, et je l'ai amélioré selon mes goûts de sureté, et d'explications (vous verrez plus bas de quoi je parle).
|
||||
|
||||
[color=#BF40BF][b][size=150]4.1- Explications : Pourquoi ? Comment ?[/size][/b][/color]
|
||||
|
||||
Ces notifications servent à mettre à jour automatiquement les extensions navigateurs et les clients non mobiles, donc les applications windows, macos, etc, mais pas android et iOS. Pour ces derniers OS, ce n'est juste pas possible avec Bitwarden_RS, car il faudrait passer par les serveurs de Bitwarden pour les notifications push. Et Bitwarden_RS ne peut pas le faire.
|
||||
|
||||
Pour activer ces notifications Websocket, il faut faire plusieurs choses. Seul ce qui suit est faisable directement depuis DSM, dans le reverse-proxy :
|
||||
[url=https://i.imgur.com/LP6lRid.png][img]https://i.imgur.com/LP6lRid.png[/img][/url]
|
||||
Lors de la création de la règle pour BitwardenRS, il faut ajouter les entêtes personnalisés suivants : (pensez à utiliser le bouton pour créer automatiquement les deux premières lignes)
|
||||
[url=https://i.imgur.com/PenfXww.png][img]https://i.imgur.com/PenfXww.png[/img][/url] [url=https://i.imgur.com/B3nlyXP.png][img]https://i.imgur.com/B3nlyXP.png[/img][/url]
|
||||
|
||||
Pour le reste, malheureusement il n'est pas possible de le faire depuis DSM... car bien le moteur du reverse-proxy est nginx, il n'y a pas d'interface graphique pour le faire.
|
||||
Il faut faire passer /notifications/hub avec les mêmes entêtes et /notifications/hub/negotiate au conteneur. Et ça, pas moyen de le faire depuis DSM.
|
||||
Il faut passer par un script qui va créer un fichier [b]ws.locations[/b] contenant ces propriétés, et modifier le fichier de configuration [b]/etc/nginx/app.d/server.ReverseProxy.conf[/b] afin d'inclure le fichier créé [b]ws.locations[/b] au bon endroit, c'est-à-dire dans la section du nom de domaine pour bitwardenRS.
|
||||
C'est donc un prérequis (voir les captures précédentes).
|
||||
Le fichier qui sera créé ressemblera à ceci :
|
||||
[url=https://i.imgur.com/BFfTHvA.png][img]https://i.imgur.com/BFfTHvA.png[/img][/url]
|
||||
[color=#800040][b]Il faudra adapter le script suivant [u]pour tenir compte de votre adresse IP de l'hôte[/u] du conteneur bitwarden.[/b][/color] C'est-à-dire remplacer 192.168.2.200 par l'IP de votre NAS.
|
||||
|
||||
Il est à noter que le fichier [b]/etc/nginx/app.d/server.ReverseProxy.conf[/b] est réinitialisé à chaque démarrage du NAS, mais aussi à chaque changement dans l'interface graphique du reverse-proxy dans DSM. Il faut donc le lancer périodiquement.
|
||||
Il faudra créer une tâche planifiée en conséquence.
|
||||
En ce qui me concerne j'ai créé une tâche déclenchée à chaque démarrage du NAS, et une programmée toutes les 6h. Vous pouvez mettre une fréquence plus grande (toutes les 1h) ou moins, c'est selon votre utilisation du NAS et des modifications dans le reverse-proxy.
|
||||
La modification du fichier ressemblera à ceci :
|
||||
[url=https://i.imgur.com/TPJOBIk.png][img]https://i.imgur.com/TPJOBIk.png[/img][/url]
|
||||
|
||||
[color=#BF40BF][b][size=150]4.2- Comment lancer le script ?[/size][/b][/color]
|
||||
|
||||
Le script (présent dans le § suivant) doit être lancé avec 3 arguments, sinon vous aurez un beau message indiquant que vous avez fait n'importe quoi... (mais sans rien casser, j'ai bien fait les choses).
|
||||
Si le script n'est pas lancé avec le bon nombre d'arguments, vous aurez ce message :
|
||||
[url=https://i.imgur.com/YpocS4D.png][img]https://i.imgur.com/YpocS4D.png[/img][/url]
|
||||
|
||||
Attention, s'il y a bien 3 arguments, je n'ai pas fait de vérification, à vous de savoir ce que vous faites !
|
||||
Voici quelques explications sur les arguments à placer.
|
||||
[list=][*] Le premier est votre nom de domaine pour Bitwarden-RS.
|
||||
[*] Le second est le port déclaré dans le reverse proxy pour accéder à l'interface web : par défaut c'est 80. Il sera probablement modifié dans votre installation (voir fichier docker-compose).
|
||||
[*] Le troisième est le port websocket qui par défaut est le 3012. Il sera probablement modifié dans votre installation (voir fichier docker-compose).[/list]
|
||||
|
||||
Exemple de commande à placer dans le planificateur de tâches :
|
||||
[code]bash /volume1/docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh mon-ndd-a-moi.tld 8001 3012[/code]
|
||||
|
||||
Voilà voilà pour les explications.
|
||||
Il faudra le lancer une fois après avoir paramétré les tâches.
|
||||
|
||||
[color=#BF40BF][b][size=150]4.3- Enfin le script lui même ![/size][/b][/color]
|
||||
|
||||
Voilà le script. Attention, j'ai mis pas mal de commentaires dans le script, et que j'ai mis des lignes echo permettant d'avoir un retour d'exécution pour le log qu'on obtient.
|
||||
Lisez bien les commentaire ;) (pièce jointe : [attachment=0]Bitwarden_RS__Enable_Websocket.7z[/attachment]
|
||||
|
||||
[code]#!/bin/bash
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Script Bitwarden_RS__Enable_Websocket.sh ##
|
||||
## ##
|
||||
## Source : https://gist.github.com/nstanke/3949ae1c4706854d8f166d1fb3dadc81 ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Ce script pemet de router ce qui ne peut pas être fait avec le reverse-proxy ##
|
||||
## de DSM (Synology) pour faire fonctionner les notifications Websocket ##
|
||||
## Doc. Bitwarden_RS : ##
|
||||
## Route the /notifications/hub endpoint to the WebSocket server, by default ##
|
||||
## at port 3012, making sure to pass the Connection and Upgrade headers. ##
|
||||
## (Note the port can be changed with WEBSOCKET_PORT variable) ##
|
||||
## https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-WebSocket-notifications ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Principe de Tâche planifier à créer ##
|
||||
## ##
|
||||
## Il faut lancer régulièrement le script car toutes modifications faites dans l'interface ##
|
||||
## graphique du Reverse-Proxy de DSM va modifier le fichier de configuration. Il en va de ##
|
||||
## même lorsque le NAS redémarre. ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## /!\ Il faut modifier l'adresse IP en ligne 89 et 95 par l'IP du NAS /!\ ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Paramètres de lancement du script : ##
|
||||
## bash /volume1/docker/bitwarden/enable_ws.sh vault.example.com 5555 5556 ##
|
||||
## ##
|
||||
## -- vault.example.com = Nom de domaine de Bitwarden_rs (celui du Reverse Proxy de DSM) ##
|
||||
## -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM) ##
|
||||
## -- 5556 = Port exposé WEBSOCKET_PORT par Docker ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
|
||||
##===========================================================================================================
|
||||
## ##
|
||||
## Ma commande à lancer : ##
|
||||
## bash /volume1//docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh mon-ndd-a-moi.tld 8001 30120 ##
|
||||
## ##
|
||||
##===========================================================================================================
|
||||
|
||||
LOC_DIR="/etc/nginx"
|
||||
part1=0
|
||||
part2=0
|
||||
|
||||
echo -e "\n$(date "+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh pour activer les Notifications Websockets"
|
||||
|
||||
f_affiche_parametre() {
|
||||
echo " bash /volume1//docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh vault.example.com 5555 5556 "
|
||||
echo " -- vault.example.com = Nom de domaine de Bitwarden_rs (celui du Reverse Proxy de DSM) "
|
||||
echo " -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM)"
|
||||
echo " -- 5556 = Port exposé WEBSOCKET_PORT par Docker"
|
||||
}
|
||||
|
||||
if [ ! $# -eq 3 ]; then
|
||||
if [ $# -eq 0 ]; then
|
||||
# Aucun paramètre n'a été fourni. On va afficher la liste de ce qui peut être utilisé.
|
||||
echo "$(date "+%R:%S - ") Aucun paramètre fourni ! Revoir l'appel du script :"
|
||||
f_affiche_parametre
|
||||
else
|
||||
echo "$(date "+%R:%S - ") Le nombre de paramètres fournis n'est pas correct ! Revoir l'appel du script :"
|
||||
f_affiche_parametre
|
||||
fi
|
||||
echo -e "$(date "+%R:%S - ") ECHEC de lancement du script !!!!!!!!!\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$(date "+%R:%S - ") Exécution des commandes..."
|
||||
|
||||
|
||||
#############################################################################################################
|
||||
## Début de la partie de création/modification de fichiers
|
||||
##
|
||||
if [ -f $LOC_DIR/ws.locations ]; then
|
||||
rm /etc/nginx/ws.locations
|
||||
part1=1
|
||||
fi
|
||||
echo """
|
||||
location /notifications/hub {
|
||||
proxy_pass http://192.168.2.200:$3;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection \"upgrade\";
|
||||
}
|
||||
|
||||
location /notifications/hub/negotiate {
|
||||
proxy_pass http://192.168.2.200:$2;
|
||||
}
|
||||
""" >> $LOC_DIR/ws.locations
|
||||
|
||||
|
||||
if ! grep -q "ws.locations" /etc/nginx/app.d/server.ReverseProxy.conf; then
|
||||
sed -i "/$1;/ a\ include $LOC_DIR/ws.locations;" /etc/nginx/app.d/server.ReverseProxy.conf
|
||||
if nginx -t 2>/dev/null; then synoservicecfg --reload nginx; else exit 1; fi
|
||||
|
||||
part2=1 # Variable pour indiquer que cette partie a été exécutée
|
||||
fi
|
||||
##
|
||||
## Fin de la partie de création/modification de fichiers
|
||||
#############################################################################################################
|
||||
|
||||
if [ $part1 -eq 1 ]; then
|
||||
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/ws.locations existait déjà, il a été supprimé puis recréé."
|
||||
else
|
||||
echo "$(date "+%R:%S - ") -- Le fichier $LOC_DIR/ws.locations n'existait pas, il a été créé."
|
||||
fi
|
||||
if [ $part2 -eq 1 ]; then
|
||||
echo "$(date "+%R:%S - ") -- !!!!!! ---> La modification dans le fichier /etc/nginx/app.d/server.ReverseProxy.conf n'existait pas. Elle a été écrite."
|
||||
echo "$(date "+%R:%S - ") -- !!!!!! ---> Le fichier /etc/nginx/app.d/server.ReverseProxy.conf a du être réinitialisé après un reboot ou lors d'une modification du reverse-proxy dans DSM."
|
||||
else
|
||||
echo "$(date "+%R:%S - ") -- La modification du fichier /etc/nginx/app.d/server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution. Aucune modification n'est donc nécessaire."
|
||||
fi
|
||||
|
||||
echo "$(date "+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh terminé"
|
||||
|
||||
exit[/code]
|
||||
|
||||
|
||||
|
||||
[i][size=150]Plus tard viendra la partie fail2ban.[/size][/i]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
________________
|
||||
|
||||
[size=150][color=#00BF80]À venir : intégration de fail2ban pour sécuriser un poil plus, même si avec le HTTPS et la 2FA c'est déjà bien :)
|
||||
[/color][/size]
|
@ -66,13 +66,13 @@ services:
|
||||
- SMTP_USERNAME=XXxxXX
|
||||
- SMTP_PASSWORD=XXxxXX
|
||||
|
||||
- INVITATION_ORG_NAME=Bitwarden_RS [Votre Nom, pseudo...] # Permet de spécifier un nom d'application pour les invitations d'organisation
|
||||
|
||||
# Nécessaire pour activer le 2FA pour la connexion à notre serveur bitwarden_rs
|
||||
# Il est possible de spécifier un port de connexion dans l'URL. Le https:// est obligatoire.
|
||||
# Pour cette option, il est donc OBLIGATOIRE d'avoir fait le nécessaire pour avoir du HTTPS (certificats, reverse-proxy, ...)
|
||||
- DOMAIN=XXxxXX
|
||||
|
||||
- INVITATION_ORG_NAME=Bitwarden_RS [Votre Nom, pseudo...] # Permet de spécifier un nom d'application pour les invitations d'organisation
|
||||
|
||||
# Pour enregistrer les log avec un niveau particulier
|
||||
- LOG_FILE=/data/bitwarden.log
|
||||
- LOG_LEVEL=warn
|
||||
@ -84,7 +84,7 @@ services:
|
||||
# Pour activer la console d'administation, accessible via : https://mon.domaine.tld/admin/
|
||||
# Voir détails ici : https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-admin-page
|
||||
# /!\
|
||||
# /!\ N'importe qui pourra accéder à la page de connextion, alors blinder le token d'amdin ci-dessous (64 caractères pour moi) !
|
||||
# /!\ N'importe qui pourra accéder à la page de connexion, alors blinder le token d'amdin ci-dessous (64 caractères pour moi) !
|
||||
# /!\ Il est de plus TRÈS important d'avoir ACTIVÉ le HTTPS avant l'activation de cette option.
|
||||
# /!\
|
||||
# Je conseille de ne l'activer qu'en cas de nécessité, et de la désactiver après.
|
||||
@ -101,8 +101,13 @@ services:
|
||||
# Durant le nombre importants d'essais, j'en suis venu à laisser le port par défaut
|
||||
# pour le WEBSOCKET_PORT. Il est possible que ça fonctionne avec un port différent.
|
||||
# Il faudra alors décommenter la ligne suivante, et changer le port exposé plus bas.
|
||||
#- WEBSOCKET_PORT=3012
|
||||
#- WEBSOCKET_PORT=3012 # Par défaut = 3012
|
||||
|
||||
# Pour activer la récupération des icones des IP LAN, il faut mettre sur false la variable ICON_BLACKLIST_NON_GLOBAL_IPS
|
||||
- ICON_BLACKLIST_NON_GLOBAL_IPS=false # Par défaut = true
|
||||
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
|
||||
volumes:
|
||||
- "/volume1/docker/bitwarden_rs/bitwarden-data/:/data/"
|
||||
@ -119,11 +124,14 @@ services:
|
||||
- bitwarden_network
|
||||
restart: always
|
||||
depends_on:
|
||||
- bitwardenrs
|
||||
bitwardenrs:
|
||||
condition: service_healthy
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
#- /etc/localtime:/etc/localtime:ro # Devenu inutile sur nos Syno avec la variable d'env. TZ (voir plus bas)
|
||||
- /volume1/docker/bitwarden_rs/bitwarden-data/:/data/
|
||||
# Chemin d'accès pour stocker le backup
|
||||
# Chemin d'accès pour stocker le backup, voir https://gitlab.com/1O/bitwarden_rs-backup#wrong-permissions
|
||||
- /volume1/docker/bitwarden_rs/bitwarden-backup:/backup_folder/
|
||||
|
||||
environment:
|
||||
@ -161,6 +169,13 @@ services:
|
||||
|
||||
# Delete old backups after X many days
|
||||
- DELETE_AFTER=14
|
||||
|
||||
# If you need timestamps in your local timezone you should mount /etc/timezone:/etc/timezone:ro and
|
||||
# /etc/localtime:/etc/localtime:ro like it's done in the docker-compose.yml.
|
||||
# An other possible solution is to set the environment variable accordingly (like TZ=Europe/Berlin)
|
||||
# (see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for more information).
|
||||
- TZ=Europe/Paris
|
||||
|
||||
|
||||
networks:
|
||||
bitwarden_network:
|
||||
|
90
docker-compose/fail2ban/TUTO--fail2ban_docker-compose.yml
Normal file
90
docker-compose/fail2ban/TUTO--fail2ban_docker-compose.yml
Normal file
@ -0,0 +1,90 @@
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Docker-compose file for Fail2ban ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
|
||||
---
|
||||
version: "2"
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## Sources utilisées pour personnaliser ce fichier et ceux dans les sous-dossiers ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
## ##
|
||||
## https://www.linode.com/docs/guides/using-fail2ban-to-secure-your-server-a-tutorial/ ##
|
||||
## https://www.linuxtricks.fr/wiki/print.php?id=40 ##
|
||||
## https://github.com/dani-garcia/bitwarden_rs/wiki/Fail2Ban-Setup#synology-dsm ##
|
||||
## https://github.com/sosandroid/docker-fail2ban-synology ##
|
||||
## ##
|
||||
##──── ────────────────────────────────────────────────────────────────────────────────────────
|
||||
##──── ────────────────────────────────────────────────────────────────────────────────────────
|
||||
## ##
|
||||
## Cloner/télécharger le dépôt suivant qui contient les fichiers à utiliser : ##
|
||||
## https://github.com/sosandroid/docker-fail2ban-synology.git ##
|
||||
## Il faudra juste modifier le docker-compose.yml qui vient avec ou utiliser celui-ci. ##
|
||||
## ##
|
||||
##──── ────────────────────────────────────────────────────────────────────────────────────────
|
||||
## ##
|
||||
## Pour supprimer une IP bannie, lancer la commande suivante : ##
|
||||
## sudo docker exec -t fail2ban fail2ban-client set bitwarden_rs unbanip xx.xx.xx.xx ##
|
||||
## ##
|
||||
## Pour Voir le log de fail2ban, lancer la commande : ##
|
||||
## cat /volume1/docker/fail2ban/fail2ban.log ##
|
||||
## ##
|
||||
## ##
|
||||
## Quelques commandes utiles : ##
|
||||
## docker exec -t fail2ban fail2ban-client status ##
|
||||
## docker exec -t fail2ban fail2ban-client status bitwarden_rs ##
|
||||
## ##
|
||||
## unbans <IP> (in all jails and database) : ##
|
||||
## docker exec -t fail2ban fail2ban-client unban <IP> ... <IP> ##
|
||||
## ##
|
||||
## docker exec -t fail2ban fail2ban-client --help ##
|
||||
## docker exec -t fail2ban fail2ban-client restart ##
|
||||
## docker exec -t fail2ban fail2ban-client reload --restart --unban --all ##
|
||||
## ##
|
||||
## flushes the logtarget if a file and reopens it. For log rotation. : ##
|
||||
## docker exec -t fail2ban fail2ban-client flushlogs ##
|
||||
## ##
|
||||
##==============================================================================================
|
||||
|
||||
services:
|
||||
fail2ban:
|
||||
image: ghcr.io/crazy-max/fail2ban:latest
|
||||
container_name: fail2ban
|
||||
network_mode: host
|
||||
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- F2B_DB_PURGE_AGE=30d
|
||||
- F2B_LOG_TARGET=/data/fail2ban.log
|
||||
- F2B_LOG_LEVEL=INFO
|
||||
- F2B_IPTABLES_CHAIN=INPUT
|
||||
|
||||
# Il faut adapter ces variables à votre fournisseur d'email.
|
||||
- SSMTP_HOST=smtp.gmail.com
|
||||
- SSMTP_PORT=587 # Pour gmail : 587
|
||||
- SSMTP_HOSTNAME=Docker-Fail2ban # Ce sera le nom qui sera affiché dans les emails
|
||||
- SSMTP_USER=XXxxXX@gmail.com
|
||||
- SSMTP_PASSWORD=XXxxXX # Pensez à générer un mot de passe application si la 2FA est activée
|
||||
- SSMTP_TLS=YES # Pour gmail : YES
|
||||
- SSMTP_STARTTLS=YES # Pour gmail : YES
|
||||
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
|
||||
volumes:
|
||||
- "/volume1/docker/fail2ban:/data"
|
||||
|
||||
# Les différents chemins d'accès vers les fichiers log des services à protéger par fail2ban
|
||||
# On ajoute ro pour read-only (lecture seule)
|
||||
- "/volume1/docker/bitwarden_rs/bitwarden-data:/bitwarden:ro" # Bitwarden_RS
|
||||
- "/volume1/docker/gitea/data/gitea/log:/gitea:ro" # Gitea
|
||||
#- "/var/log/auth.log:/log/host_ssh_auth.log:ro" # SSH sur l'hôte (Synology)
|
||||
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- NET_RAW
|
||||
|
||||
restart: always
|
@ -0,0 +1,4 @@
|
||||
[Init]
|
||||
blocktype = DROP
|
||||
[Init?family=inet6]
|
||||
blocktype = DROP
|
@ -0,0 +1,8 @@
|
||||
# /volume1/docker/fail2ban/filter.d/bitwarden_rs-admin.conf
|
||||
|
||||
[INCLUDES]
|
||||
before = common.conf
|
||||
|
||||
[Definition]
|
||||
failregex = ^.*Invalid admin token\. IP: <ADDR>.*$
|
||||
ignoreregex =
|
@ -0,0 +1,8 @@
|
||||
# /volume1/docker/fail2ban/filter.d/bitwarden_rs.conf
|
||||
|
||||
[INCLUDES]
|
||||
before = common.conf
|
||||
|
||||
[Definition]
|
||||
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
|
||||
ignoreregex =
|
@ -0,0 +1,5 @@
|
||||
# /volume1/docker/fail2ban/filter.d/gitea.conf
|
||||
|
||||
[Definition]
|
||||
failregex = .*(Failed authentication attempt|invalid credentials|Attempted access of unknown user).* from <HOST>
|
||||
ignoreregex =
|
@ -0,0 +1,964 @@
|
||||
#
|
||||
# WARNING: heavily refactored in 0.9.0 release. Please review and
|
||||
# customize settings for your setup.
|
||||
#
|
||||
# Changes: in most of the cases you should not modify this
|
||||
# file, but provide customizations in jail.local file,
|
||||
# or separate .conf files under jail.d/ directory, e.g.:
|
||||
#
|
||||
# HOW TO ACTIVATE JAILS:
|
||||
#
|
||||
# YOU SHOULD NOT MODIFY THIS FILE.
|
||||
#
|
||||
# It will probably be overwritten or improved in a distribution update.
|
||||
#
|
||||
# Provide customizations in a jail.local file or a jail.d/customisation.local.
|
||||
# For example to change the default bantime for all jails and to enable the
|
||||
# ssh-iptables jail the following (uncommented) would appear in the .local file.
|
||||
# See man 5 jail.conf for details.
|
||||
#
|
||||
# [DEFAULT]
|
||||
# bantime = 1h
|
||||
#
|
||||
# [sshd]
|
||||
# enabled = true
|
||||
#
|
||||
# See jail.conf(5) man page for more information
|
||||
|
||||
|
||||
|
||||
# Comments: use '#' for comment lines and ';' (following a space) for inline comments
|
||||
|
||||
|
||||
[INCLUDES]
|
||||
|
||||
#before = paths-distro.conf
|
||||
before = paths-debian.conf
|
||||
|
||||
# The DEFAULT allows a global definition of the options. They can be overridden
|
||||
# in each jail afterwards.
|
||||
|
||||
[DEFAULT]
|
||||
|
||||
#
|
||||
# MISCELLANEOUS OPTIONS
|
||||
#
|
||||
|
||||
# "bantime.increment" allows to use database for searching of previously banned ip's to increase a
|
||||
# default ban time using special formula, default it is banTime * 1, 2, 4, 8, 16, 32...
|
||||
#bantime.increment = true
|
||||
|
||||
# "bantime.rndtime" is the max number of seconds using for mixing with random time
|
||||
# to prevent "clever" botnets calculate exact time IP can be unbanned again:
|
||||
#bantime.rndtime =
|
||||
|
||||
# "bantime.maxtime" is the max number of seconds using the ban time can reach (doesn't grow further)
|
||||
#bantime.maxtime =
|
||||
|
||||
# "bantime.factor" is a coefficient to calculate exponent growing of the formula or common multiplier,
|
||||
# default value of factor is 1 and with default value of formula, the ban time
|
||||
# grows by 1, 2, 4, 8, 16 ...
|
||||
#bantime.factor = 1
|
||||
|
||||
# "bantime.formula" used by default to calculate next value of ban time, default value below,
|
||||
# the same ban time growing will be reached by multipliers 1, 2, 4, 8, 16, 32...
|
||||
#bantime.formula = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
|
||||
#
|
||||
# more aggressive example of formula has the same values only for factor "2.0 / 2.885385" :
|
||||
#bantime.formula = ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)
|
||||
|
||||
# "bantime.multipliers" used to calculate next value of ban time instead of formula, coresponding
|
||||
# previously ban count and given "bantime.factor" (for multipliers default is 1);
|
||||
# following example grows ban time by 1, 2, 4, 8, 16 ... and if last ban count greater as multipliers count,
|
||||
# always used last multiplier (64 in example), for factor '1' and original ban time 600 - 10.6 hours
|
||||
#bantime.multipliers = 1 2 4 8 16 32 64
|
||||
# following example can be used for small initial ban time (bantime=60) - it grows more aggressive at begin,
|
||||
# for bantime=60 the multipliers are minutes and equal: 1 min, 5 min, 30 min, 1 hour, 5 hour, 12 hour, 1 day, 2 day
|
||||
#bantime.multipliers = 1 5 30 60 300 720 1440 2880
|
||||
|
||||
# "bantime.overalljails" (if true) specifies the search of IP in the database will be executed
|
||||
# cross over all jails, if false (dafault), only current jail of the ban IP will be searched
|
||||
#bantime.overalljails = false
|
||||
|
||||
# --------------------
|
||||
|
||||
# "ignoreself" specifies whether the local resp. own IP addresses should be ignored
|
||||
# (default is true). Fail2ban will not ban a host which matches such addresses.
|
||||
#ignoreself = true
|
||||
|
||||
# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
|
||||
# will not ban a host which matches an address in this list. Several addresses
|
||||
# can be defined using space (and/or comma) separator.
|
||||
#ignoreip = 127.0.0.1/8 ::1
|
||||
|
||||
# External command that will take an tagged arguments to ignore, e.g. <ip>,
|
||||
# and return true if the IP is to be ignored. False otherwise.
|
||||
#
|
||||
# ignorecommand = /path/to/command <ip>
|
||||
ignorecommand =
|
||||
|
||||
# "bantime" is the number of seconds that a host is banned.
|
||||
bantime = 10m
|
||||
|
||||
# A host is banned if it has generated "maxretry" during the last "findtime"
|
||||
# seconds.
|
||||
findtime = 10m
|
||||
|
||||
# "maxretry" is the number of failures before a host get banned.
|
||||
maxretry = 5
|
||||
|
||||
# "maxmatches" is the number of matches stored in ticket (resolvable via tag <matches> in actions).
|
||||
maxmatches = %(maxretry)s
|
||||
|
||||
# "backend" specifies the backend used to get files modification.
|
||||
# Available options are "pyinotify", "gamin", "polling", "systemd" and "auto".
|
||||
# This option can be overridden in each jail as well.
|
||||
#
|
||||
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
|
||||
# If pyinotify is not installed, Fail2ban will use auto.
|
||||
# gamin: requires Gamin (a file alteration monitor) to be installed.
|
||||
# If Gamin is not installed, Fail2ban will use auto.
|
||||
# polling: uses a polling algorithm which does not require external libraries.
|
||||
# systemd: uses systemd python library to access the systemd journal.
|
||||
# Specifying "logpath" is not valid for this backend.
|
||||
# See "journalmatch" in the jails associated filter config
|
||||
# auto: will try to use the following backends, in order:
|
||||
# pyinotify, gamin, polling.
|
||||
#
|
||||
# Note: if systemd backend is chosen as the default but you enable a jail
|
||||
# for which logs are present only in its own log files, specify some other
|
||||
# backend for that jail (e.g. polling) and provide empty value for
|
||||
# journalmatch. See https://github.com/fail2ban/fail2ban/issues/959#issuecomment-74901200
|
||||
backend = auto
|
||||
|
||||
# "usedns" specifies if jails should trust hostnames in logs,
|
||||
# warn when DNS lookups are performed, or ignore all hostnames in logs
|
||||
#
|
||||
# yes: if a hostname is encountered, a DNS lookup will be performed.
|
||||
# warn: if a hostname is encountered, a DNS lookup will be performed,
|
||||
# but it will be logged as a warning.
|
||||
# no: if a hostname is encountered, will not be used for banning,
|
||||
# but it will be logged as info.
|
||||
# raw: use raw value (no hostname), allow use it for no-host filters/actions (example user)
|
||||
usedns = warn
|
||||
|
||||
# "logencoding" specifies the encoding of the log files handled by the jail
|
||||
# This is used to decode the lines from the log file.
|
||||
# Typical examples: "ascii", "utf-8"
|
||||
#
|
||||
# auto: will use the system locale setting
|
||||
logencoding = auto
|
||||
|
||||
# "enabled" enables the jails.
|
||||
# By default all jails are disabled, and it should stay this way.
|
||||
# Enable only relevant to your setup jails in your .local or jail.d/*.conf
|
||||
#
|
||||
# true: jail will be enabled and log files will get monitored for changes
|
||||
# false: jail is not enabled
|
||||
enabled = false
|
||||
|
||||
|
||||
# "mode" defines the mode of the filter (see corresponding filter implementation for more info).
|
||||
mode = normal
|
||||
|
||||
# "filter" defines the filter to use by the jail.
|
||||
# By default jails have names matching their filter name
|
||||
#
|
||||
filter = %(__name__)s[mode=%(mode)s]
|
||||
|
||||
|
||||
#
|
||||
# ACTIONS
|
||||
#
|
||||
|
||||
# Some options used for actions
|
||||
|
||||
# Destination email address used solely for the interpolations in
|
||||
# jail.{conf,local,d/*} configuration files.
|
||||
destemail = root@localhost
|
||||
|
||||
# Sender email address used solely for some actions
|
||||
sender = root@<fq-hostname>
|
||||
|
||||
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
|
||||
# mailing. Change mta configuration parameter to mail if you want to
|
||||
# revert to conventional 'mail'.
|
||||
mta = sendmail
|
||||
|
||||
# Default protocol
|
||||
protocol = tcp
|
||||
|
||||
# Specify chain where jumps would need to be added in ban-actions expecting parameter chain
|
||||
chain = <known/chain>
|
||||
|
||||
# Ports to be banned
|
||||
# Usually should be overridden in a particular jail
|
||||
port = 0:65535
|
||||
|
||||
# Format of user-agent https://tools.ietf.org/html/rfc7231#section-5.5.3
|
||||
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
|
||||
|
||||
#
|
||||
# Action shortcuts. To be used to define action parameter
|
||||
|
||||
# Default banning action (e.g. iptables, iptables-new,
|
||||
# iptables-multiport, shorewall, etc) It is used to define
|
||||
# action_* variables. Can be overridden globally or per
|
||||
# section within jail.local file
|
||||
banaction = iptables-multiport
|
||||
banaction_allports = iptables-allports
|
||||
|
||||
# The simplest action to take: ban only
|
||||
action_ = %(banaction)s[port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||
|
||||
# ban & send an e-mail with whois report to the destemail.
|
||||
action_mw = %(action_)s
|
||||
%(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||
|
||||
# ban & send an e-mail with whois report and relevant log lines
|
||||
# to the destemail.
|
||||
action_mwl = %(action_)s
|
||||
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
|
||||
|
||||
# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
|
||||
#
|
||||
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
|
||||
# to the destemail.
|
||||
action_xarf = %(action_)s
|
||||
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]
|
||||
|
||||
# ban IP on CloudFlare & send an e-mail with whois report and relevant log lines
|
||||
# to the destemail.
|
||||
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
|
||||
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
|
||||
|
||||
# Report block via blocklist.de fail2ban reporting service API
|
||||
#
|
||||
# See the IMPORTANT note in action.d/blocklist_de.conf for when to use this action.
|
||||
# Specify expected parameters in file action.d/blocklist_de.local or if the interpolation
|
||||
# `action_blocklist_de` used for the action, set value of `blocklist_de_apikey`
|
||||
# in your `jail.local` globally (section [DEFAULT]) or per specific jail section (resp. in
|
||||
# corresponding jail.d/my-jail.local file).
|
||||
#
|
||||
action_blocklist_de = blocklist_de[email="%(sender)s", service="%(__name__)s", apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]
|
||||
|
||||
# Report ban via badips.com, and use as blacklist
|
||||
#
|
||||
# See BadIPsAction docstring in config/action.d/badips.py for
|
||||
# documentation for this action.
|
||||
#
|
||||
# NOTE: This action relies on banaction being present on start and therefore
|
||||
# should be last action defined for a jail.
|
||||
#
|
||||
action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]
|
||||
#
|
||||
# Report ban via badips.com (uses action.d/badips.conf for reporting only)
|
||||
#
|
||||
action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]
|
||||
|
||||
# Report ban via abuseipdb.com.
|
||||
#
|
||||
# See action.d/abuseipdb.conf for usage example and details.
|
||||
#
|
||||
action_abuseipdb = abuseipdb
|
||||
|
||||
# Choose default action. To change, just override value of 'action' with the
|
||||
# interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local
|
||||
# globally (section [DEFAULT]) or per specific section
|
||||
action = %(action_)s
|
||||
|
||||
|
||||
#
|
||||
# JAILS
|
||||
#
|
||||
|
||||
#
|
||||
# SSH servers
|
||||
#
|
||||
|
||||
[sshd]
|
||||
|
||||
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
|
||||
# normal (default), ddos, extra or aggressive (combines all).
|
||||
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
|
||||
#mode = normal
|
||||
port = ssh
|
||||
logpath = %(sshd_log)s
|
||||
backend = %(sshd_backend)s
|
||||
|
||||
|
||||
[dropbear]
|
||||
|
||||
port = ssh
|
||||
logpath = %(dropbear_log)s
|
||||
backend = %(dropbear_backend)s
|
||||
|
||||
|
||||
[selinux-ssh]
|
||||
|
||||
port = ssh
|
||||
logpath = %(auditd_log)s
|
||||
|
||||
|
||||
#
|
||||
# HTTP servers
|
||||
#
|
||||
|
||||
[apache-auth]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
|
||||
|
||||
[apache-badbots]
|
||||
# Ban hosts which agent identifies spammer robots crawling the web
|
||||
# for email addresses. The mail outputs are buffered.
|
||||
port = http,https
|
||||
logpath = %(apache_access_log)s
|
||||
bantime = 48h
|
||||
maxretry = 1
|
||||
|
||||
|
||||
[apache-noscript]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
|
||||
|
||||
[apache-overflows]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
maxretry = 2
|
||||
|
||||
|
||||
[apache-nohome]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
maxretry = 2
|
||||
|
||||
|
||||
[apache-botsearch]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
maxretry = 2
|
||||
|
||||
|
||||
[apache-fakegooglebot]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_access_log)s
|
||||
maxretry = 1
|
||||
ignorecommand = %(ignorecommands_dir)s/apache-fakegooglebot <ip>
|
||||
|
||||
|
||||
[apache-modsecurity]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
maxretry = 2
|
||||
|
||||
|
||||
[apache-shellshock]
|
||||
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
maxretry = 1
|
||||
|
||||
|
||||
[openhab-auth]
|
||||
|
||||
filter = openhab
|
||||
banaction = %(banaction_allports)s
|
||||
logpath = /opt/openhab/logs/request.log
|
||||
|
||||
|
||||
[nginx-http-auth]
|
||||
|
||||
port = http,https
|
||||
logpath = %(nginx_error_log)s
|
||||
|
||||
# To use 'nginx-limit-req' jail you should have `ngx_http_limit_req_module`
|
||||
# and define `limit_req` and `limit_req_zone` as described in nginx documentation
|
||||
# http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
|
||||
# or for example see in 'config/filter.d/nginx-limit-req.conf'
|
||||
[nginx-limit-req]
|
||||
port = http,https
|
||||
logpath = %(nginx_error_log)s
|
||||
|
||||
[nginx-botsearch]
|
||||
|
||||
port = http,https
|
||||
logpath = %(nginx_error_log)s
|
||||
maxretry = 2
|
||||
|
||||
|
||||
# Ban attackers that try to use PHP's URL-fopen() functionality
|
||||
# through GET/POST variables. - Experimental, with more than a year
|
||||
# of usage in production environments.
|
||||
|
||||
[php-url-fopen]
|
||||
|
||||
port = http,https
|
||||
logpath = %(nginx_access_log)s
|
||||
%(apache_access_log)s
|
||||
|
||||
|
||||
[suhosin]
|
||||
|
||||
port = http,https
|
||||
logpath = %(suhosin_log)s
|
||||
|
||||
|
||||
[lighttpd-auth]
|
||||
# Same as above for Apache's mod_auth
|
||||
# It catches wrong authentifications
|
||||
port = http,https
|
||||
logpath = %(lighttpd_error_log)s
|
||||
|
||||
|
||||
#
|
||||
# Webmail and groupware servers
|
||||
#
|
||||
|
||||
[roundcube-auth]
|
||||
|
||||
port = http,https
|
||||
logpath = %(roundcube_errors_log)s
|
||||
# Use following line in your jail.local if roundcube logs to journal.
|
||||
#backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[openwebmail]
|
||||
|
||||
port = http,https
|
||||
logpath = /var/log/openwebmail.log
|
||||
|
||||
|
||||
[horde]
|
||||
|
||||
port = http,https
|
||||
logpath = /var/log/horde/horde.log
|
||||
|
||||
|
||||
[groupoffice]
|
||||
|
||||
port = http,https
|
||||
logpath = /home/groupoffice/log/info.log
|
||||
|
||||
|
||||
[sogo-auth]
|
||||
# Monitor SOGo groupware server
|
||||
# without proxy this would be:
|
||||
# port = 20000
|
||||
port = http,https
|
||||
logpath = /var/log/sogo/sogo.log
|
||||
|
||||
|
||||
[tine20]
|
||||
|
||||
logpath = /var/log/tine20/tine20.log
|
||||
port = http,https
|
||||
|
||||
|
||||
#
|
||||
# Web Applications
|
||||
#
|
||||
#
|
||||
|
||||
[drupal-auth]
|
||||
|
||||
port = http,https
|
||||
logpath = %(syslog_daemon)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
[guacamole]
|
||||
|
||||
port = http,https
|
||||
logpath = /var/log/tomcat*/catalina.out
|
||||
#logpath = /var/log/guacamole.log
|
||||
|
||||
[monit]
|
||||
#Ban clients brute-forcing the monit gui login
|
||||
port = 2812
|
||||
logpath = /var/log/monit
|
||||
/var/log/monit.log
|
||||
|
||||
|
||||
[webmin-auth]
|
||||
|
||||
port = 10000
|
||||
logpath = %(syslog_authpriv)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[froxlor-auth]
|
||||
|
||||
port = http,https
|
||||
logpath = %(syslog_authpriv)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
#
|
||||
# HTTP Proxy servers
|
||||
#
|
||||
#
|
||||
|
||||
[squid]
|
||||
|
||||
port = 80,443,3128,8080
|
||||
logpath = /var/log/squid/access.log
|
||||
|
||||
|
||||
[3proxy]
|
||||
|
||||
port = 3128
|
||||
logpath = /var/log/3proxy.log
|
||||
|
||||
|
||||
#
|
||||
# FTP servers
|
||||
#
|
||||
|
||||
|
||||
[proftpd]
|
||||
|
||||
port = ftp,ftp-data,ftps,ftps-data
|
||||
logpath = %(proftpd_log)s
|
||||
backend = %(proftpd_backend)s
|
||||
|
||||
|
||||
[pure-ftpd]
|
||||
|
||||
port = ftp,ftp-data,ftps,ftps-data
|
||||
logpath = %(pureftpd_log)s
|
||||
backend = %(pureftpd_backend)s
|
||||
|
||||
|
||||
[gssftpd]
|
||||
|
||||
port = ftp,ftp-data,ftps,ftps-data
|
||||
logpath = %(syslog_daemon)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[wuftpd]
|
||||
|
||||
port = ftp,ftp-data,ftps,ftps-data
|
||||
logpath = %(wuftpd_log)s
|
||||
backend = %(wuftpd_backend)s
|
||||
|
||||
|
||||
[vsftpd]
|
||||
# or overwrite it in jails.local to be
|
||||
# logpath = %(syslog_authpriv)s
|
||||
# if you want to rely on PAM failed login attempts
|
||||
# vsftpd's failregex should match both of those formats
|
||||
port = ftp,ftp-data,ftps,ftps-data
|
||||
logpath = %(vsftpd_log)s
|
||||
|
||||
|
||||
#
|
||||
# Mail servers
|
||||
#
|
||||
|
||||
# ASSP SMTP Proxy Jail
|
||||
[assp]
|
||||
|
||||
port = smtp,465,submission
|
||||
logpath = /root/path/to/assp/logs/maillog.txt
|
||||
|
||||
|
||||
[courier-smtp]
|
||||
|
||||
port = smtp,465,submission
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[postfix]
|
||||
# To use another modes set filter parameter "mode" in jail.local:
|
||||
mode = more
|
||||
port = smtp,465,submission
|
||||
logpath = %(postfix_log)s
|
||||
backend = %(postfix_backend)s
|
||||
|
||||
|
||||
[postfix-rbl]
|
||||
|
||||
filter = postfix[mode=rbl]
|
||||
port = smtp,465,submission
|
||||
logpath = %(postfix_log)s
|
||||
backend = %(postfix_backend)s
|
||||
maxretry = 1
|
||||
|
||||
|
||||
[sendmail-auth]
|
||||
|
||||
port = submission,465,smtp
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[sendmail-reject]
|
||||
# To use more aggressive modes set filter parameter "mode" in jail.local:
|
||||
# normal (default), extra or aggressive
|
||||
# See "tests/files/logs/sendmail-reject" or "filter.d/sendmail-reject.conf" for usage example and details.
|
||||
#mode = normal
|
||||
port = smtp,465,submission
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[qmail-rbl]
|
||||
|
||||
filter = qmail
|
||||
port = smtp,465,submission
|
||||
logpath = /service/qmail/log/main/current
|
||||
|
||||
|
||||
# dovecot defaults to logging to the mail syslog facility
|
||||
# but can be set by syslog_facility in the dovecot configuration.
|
||||
[dovecot]
|
||||
|
||||
port = pop3,pop3s,imap,imaps,submission,465,sieve
|
||||
logpath = %(dovecot_log)s
|
||||
backend = %(dovecot_backend)s
|
||||
|
||||
|
||||
[sieve]
|
||||
|
||||
port = smtp,465,submission
|
||||
logpath = %(dovecot_log)s
|
||||
backend = %(dovecot_backend)s
|
||||
|
||||
|
||||
[solid-pop3d]
|
||||
|
||||
port = pop3,pop3s
|
||||
logpath = %(solidpop3d_log)s
|
||||
|
||||
|
||||
[exim]
|
||||
# see filter.d/exim.conf for further modes supported from filter:
|
||||
#mode = normal
|
||||
port = smtp,465,submission
|
||||
logpath = %(exim_main_log)s
|
||||
|
||||
|
||||
[exim-spam]
|
||||
|
||||
port = smtp,465,submission
|
||||
logpath = %(exim_main_log)s
|
||||
|
||||
|
||||
[kerio]
|
||||
|
||||
port = imap,smtp,imaps,465
|
||||
logpath = /opt/kerio/mailserver/store/logs/security.log
|
||||
|
||||
|
||||
#
|
||||
# Mail servers authenticators: might be used for smtp,ftp,imap servers, so
|
||||
# all relevant ports get banned
|
||||
#
|
||||
|
||||
[courier-auth]
|
||||
|
||||
port = smtp,465,submission,imap,imaps,pop3,pop3s
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[postfix-sasl]
|
||||
|
||||
filter = postfix[mode=auth]
|
||||
port = smtp,465,submission,imap,imaps,pop3,pop3s
|
||||
# You might consider monitoring /var/log/mail.warn instead if you are
|
||||
# running postfix since it would provide the same log lines at the
|
||||
# "warn" level but overall at the smaller filesize.
|
||||
logpath = %(postfix_log)s
|
||||
backend = %(postfix_backend)s
|
||||
|
||||
|
||||
[perdition]
|
||||
|
||||
port = imap,imaps,pop3,pop3s
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[squirrelmail]
|
||||
|
||||
port = smtp,465,submission,imap,imap2,imaps,pop3,pop3s,http,https,socks
|
||||
logpath = /var/lib/squirrelmail/prefs/squirrelmail_access_log
|
||||
|
||||
|
||||
[cyrus-imap]
|
||||
|
||||
port = imap,imaps
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[uwimap-auth]
|
||||
|
||||
port = imap,imaps
|
||||
logpath = %(syslog_mail)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
# DNS servers
|
||||
#
|
||||
|
||||
|
||||
# !!! WARNING !!!
|
||||
# Since UDP is connection-less protocol, spoofing of IP and imitation
|
||||
# of illegal actions is way too simple. Thus enabling of this filter
|
||||
# might provide an easy way for implementing a DoS against a chosen
|
||||
# victim. See
|
||||
# http://nion.modprobe.de/blog/archives/690-fail2ban-+-dns-fail.html
|
||||
# Please DO NOT USE this jail unless you know what you are doing.
|
||||
#
|
||||
# IMPORTANT: see filter.d/named-refused for instructions to enable logging
|
||||
# This jail blocks UDP traffic for DNS requests.
|
||||
# [named-refused-udp]
|
||||
#
|
||||
# filter = named-refused
|
||||
# port = domain,953
|
||||
# protocol = udp
|
||||
# logpath = /var/log/named/security.log
|
||||
|
||||
# IMPORTANT: see filter.d/named-refused for instructions to enable logging
|
||||
# This jail blocks TCP traffic for DNS requests.
|
||||
|
||||
[named-refused]
|
||||
|
||||
port = domain,953
|
||||
logpath = /var/log/named/security.log
|
||||
|
||||
|
||||
[nsd]
|
||||
|
||||
port = 53
|
||||
action_ = %(default/action_)s[name=%(__name__)s-tcp, protocol="tcp"]
|
||||
%(default/action_)s[name=%(__name__)s-udp, protocol="udp"]
|
||||
logpath = /var/log/nsd.log
|
||||
|
||||
|
||||
#
|
||||
# Miscellaneous
|
||||
#
|
||||
|
||||
[asterisk]
|
||||
|
||||
port = 5060,5061
|
||||
action_ = %(default/action_)s[name=%(__name__)s-tcp, protocol="tcp"]
|
||||
%(default/action_)s[name=%(__name__)s-udp, protocol="udp"]
|
||||
logpath = /var/log/asterisk/messages
|
||||
maxretry = 10
|
||||
|
||||
|
||||
[freeswitch]
|
||||
|
||||
port = 5060,5061
|
||||
action_ = %(default/action_)s[name=%(__name__)s-tcp, protocol="tcp"]
|
||||
%(default/action_)s[name=%(__name__)s-udp, protocol="udp"]
|
||||
logpath = /var/log/freeswitch.log
|
||||
maxretry = 10
|
||||
|
||||
|
||||
# enable adminlog; it will log to a file inside znc's directory by default.
|
||||
[znc-adminlog]
|
||||
|
||||
port = 6667
|
||||
logpath = /var/lib/znc/moddata/adminlog/znc.log
|
||||
|
||||
|
||||
# To log wrong MySQL access attempts add to /etc/my.cnf in [mysqld] or
|
||||
# equivalent section:
|
||||
# log-warnings = 2
|
||||
#
|
||||
# for syslog (daemon facility)
|
||||
# [mysqld_safe]
|
||||
# syslog
|
||||
#
|
||||
# for own logfile
|
||||
# [mysqld]
|
||||
# log-error=/var/log/mysqld.log
|
||||
[mysqld-auth]
|
||||
|
||||
port = 3306
|
||||
logpath = %(mysql_log)s
|
||||
backend = %(mysql_backend)s
|
||||
|
||||
|
||||
# Log wrong MongoDB auth (for details see filter 'filter.d/mongodb-auth.conf')
|
||||
[mongodb-auth]
|
||||
# change port when running with "--shardsvr" or "--configsvr" runtime operation
|
||||
port = 27017
|
||||
logpath = /var/log/mongodb/mongodb.log
|
||||
|
||||
|
||||
# Jail for more extended banning of persistent abusers
|
||||
# !!! WARNINGS !!!
|
||||
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
|
||||
# is not at DEBUG level -- which might then cause fail2ban to fall into
|
||||
# an infinite loop constantly feeding itself with non-informative lines
|
||||
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
|
||||
# to maintain entries for failed logins for sufficient amount of time
|
||||
[recidive]
|
||||
|
||||
logpath = /var/log/fail2ban.log
|
||||
banaction = %(banaction_allports)s
|
||||
bantime = 1w
|
||||
findtime = 1d
|
||||
|
||||
|
||||
# Generic filter for PAM. Has to be used with action which bans all
|
||||
# ports such as iptables-allports, shorewall
|
||||
|
||||
[pam-generic]
|
||||
# pam-generic filter can be customized to monitor specific subset of 'tty's
|
||||
banaction = %(banaction_allports)s
|
||||
logpath = %(syslog_authpriv)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[xinetd-fail]
|
||||
|
||||
banaction = iptables-multiport-log
|
||||
logpath = %(syslog_daemon)s
|
||||
backend = %(syslog_backend)s
|
||||
maxretry = 2
|
||||
|
||||
|
||||
# stunnel - need to set port for this
|
||||
[stunnel]
|
||||
|
||||
logpath = /var/log/stunnel4/stunnel.log
|
||||
|
||||
|
||||
[ejabberd-auth]
|
||||
|
||||
port = 5222
|
||||
logpath = /var/log/ejabberd/ejabberd.log
|
||||
|
||||
|
||||
[counter-strike]
|
||||
|
||||
logpath = /opt/cstrike/logs/L[0-9]*.log
|
||||
tcpport = 27030,27031,27032,27033,27034,27035,27036,27037,27038,27039
|
||||
udpport = 1200,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015
|
||||
action_ = %(default/action_)s[name=%(__name__)s-tcp, port="%(tcpport)s", protocol="tcp"]
|
||||
%(default/action_)s[name=%(__name__)s-udp, port="%(udpport)s", protocol="udp"]
|
||||
|
||||
[softethervpn]
|
||||
port = 500,4500
|
||||
protocol = udp
|
||||
logpath = /usr/local/vpnserver/security_log/*/sec.log
|
||||
|
||||
[gitlab]
|
||||
port = http,https
|
||||
logpath = /var/log/gitlab/gitlab-rails/application.log
|
||||
|
||||
[grafana]
|
||||
port = http,https
|
||||
logpath = /var/log/grafana/grafana.log
|
||||
|
||||
[bitwarden]
|
||||
port = http,https
|
||||
logpath = /home/*/bwdata/logs/identity/Identity/log.txt
|
||||
|
||||
[centreon]
|
||||
port = http,https
|
||||
logpath = /var/log/centreon/login.log
|
||||
|
||||
# consider low maxretry and a long bantime
|
||||
# nobody except your own Nagios server should ever probe nrpe
|
||||
[nagios]
|
||||
|
||||
logpath = %(syslog_daemon)s ; nrpe.cfg may define a different log_facility
|
||||
backend = %(syslog_backend)s
|
||||
maxretry = 1
|
||||
|
||||
|
||||
[oracleims]
|
||||
# see "oracleims" filter file for configuration requirement for Oracle IMS v6 and above
|
||||
logpath = /opt/sun/comms/messaging64/log/mail.log_current
|
||||
banaction = %(banaction_allports)s
|
||||
|
||||
[directadmin]
|
||||
logpath = /var/log/directadmin/login.log
|
||||
port = 2222
|
||||
|
||||
[portsentry]
|
||||
logpath = /var/lib/portsentry/portsentry.history
|
||||
maxretry = 1
|
||||
|
||||
[pass2allow-ftp]
|
||||
# this pass2allow example allows FTP traffic after successful HTTP authentication
|
||||
port = ftp,ftp-data,ftps,ftps-data
|
||||
# knocking_url variable must be overridden to some secret value in jail.local
|
||||
knocking_url = /knocking/
|
||||
filter = apache-pass[knocking_url="%(knocking_url)s"]
|
||||
# access log of the website with HTTP auth
|
||||
logpath = %(apache_access_log)s
|
||||
blocktype = RETURN
|
||||
returntype = DROP
|
||||
action = %(action_)s[blocktype=%(blocktype)s, returntype=%(returntype)s,
|
||||
actionstart_on_demand=false, actionrepair_on_unban=true]
|
||||
bantime = 1h
|
||||
maxretry = 1
|
||||
findtime = 1
|
||||
|
||||
|
||||
[murmur]
|
||||
# AKA mumble-server
|
||||
port = 64738
|
||||
action_ = %(default/action_)s[name=%(__name__)s-tcp, protocol="tcp"]
|
||||
%(default/action_)s[name=%(__name__)s-udp, protocol="udp"]
|
||||
logpath = /var/log/mumble-server/mumble-server.log
|
||||
|
||||
|
||||
[screensharingd]
|
||||
# For Mac OS Screen Sharing Service (VNC)
|
||||
logpath = /var/log/system.log
|
||||
logencoding = utf-8
|
||||
|
||||
[haproxy-http-auth]
|
||||
# HAProxy by default doesn't log to file you'll need to set it up to forward
|
||||
# logs to a syslog server which would then write them to disk.
|
||||
# See "haproxy-http-auth" filter for a brief cautionary note when setting
|
||||
# maxretry and findtime.
|
||||
logpath = /var/log/haproxy.log
|
||||
|
||||
[slapd]
|
||||
port = ldap,ldaps
|
||||
logpath = /var/log/slapd.log
|
||||
|
||||
[domino-smtp]
|
||||
port = smtp,ssmtp
|
||||
logpath = /home/domino01/data/IBM_TECHNICAL_SUPPORT/console.log
|
||||
|
||||
[phpmyadmin-syslog]
|
||||
port = http,https
|
||||
logpath = %(syslog_authpriv)s
|
||||
backend = %(syslog_backend)s
|
||||
|
||||
|
||||
[zoneminder]
|
||||
# Zoneminder HTTP/HTTPS web interface auth
|
||||
# Logs auth failures to apache2 error log
|
||||
port = http,https
|
||||
logpath = %(apache_error_log)s
|
||||
|
||||
[traefik-auth]
|
||||
# to use 'traefik-auth' filter you have to configure your Traefik instance,
|
||||
# see `filter.d/traefik-auth.conf` for details and service example.
|
||||
port = http,https
|
||||
logpath = /var/log/traefik/access.log
|
@ -0,0 +1,37 @@
|
||||
# /volume1/docker/fail2ban/jail.d/bitwarden_rs-admin.conf
|
||||
|
||||
[DEFAULT]
|
||||
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
|
||||
# ban a host which matches an address in this list. Several addresses can be
|
||||
# defined using space separator.
|
||||
ignoreip = 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8
|
||||
|
||||
# Changes the default ban action from "iptables-multiport", which causes issues on some platforms, to "iptables-allports".
|
||||
banaction = iptables-allports
|
||||
|
||||
# "bantime" is the number of seconds that a host is banned.
|
||||
bantime = 600
|
||||
|
||||
# A host is banned if it has generated "maxretry" during the last "findtime"
|
||||
# seconds.
|
||||
findtime = 600
|
||||
|
||||
# "maxretry" is the number of failures before a host get banned.
|
||||
maxretry = 5
|
||||
|
||||
destemail = email@gmail.com
|
||||
sender = email@gmail.com
|
||||
sendername = Fail2Ban
|
||||
action = %(action_mwl)s
|
||||
|
||||
backend = auto
|
||||
|
||||
|
||||
[bitwarden_rs-admin]
|
||||
enabled = true
|
||||
port = 882,3012
|
||||
|
||||
# Doit correspondre au nom du fichier .conf dans le dossier filter.d
|
||||
filter = bitwarden_rs-admin
|
||||
|
||||
logpath = /bitwarden/bitwarden.log
|
@ -0,0 +1,37 @@
|
||||
# /volume1/docker/fail2ban/jail.d/bitwarden_rs.conf
|
||||
|
||||
[DEFAULT]
|
||||
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
|
||||
# ban a host which matches an address in this list. Several addresses can be
|
||||
# defined using space separator.
|
||||
ignoreip = 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8
|
||||
|
||||
# Changes the default ban action from "iptables-multiport", which causes issues on some platforms, to "iptables-allports".
|
||||
banaction = iptables-allports
|
||||
|
||||
# "bantime" is the number of seconds that a host is banned.
|
||||
bantime = 600
|
||||
|
||||
# A host is banned if it has generated "maxretry" during the last "findtime"
|
||||
# seconds.
|
||||
findtime = 600
|
||||
|
||||
# "maxretry" is the number of failures before a host get banned.
|
||||
maxretry = 5
|
||||
|
||||
destemail = email@gmail.com
|
||||
sender = email@gmail.com
|
||||
sendername = Fail2Ban
|
||||
action = %(action_mwl)s
|
||||
|
||||
backend = auto
|
||||
|
||||
|
||||
[bitwarden_rs]
|
||||
enabled = true
|
||||
port = 882,3012
|
||||
|
||||
# Doit correspondre au nom du fichier .conf dans le dossier filter.d
|
||||
filter = bitwarden_rs
|
||||
|
||||
logpath = /bitwarden/bitwarden.log
|
@ -0,0 +1,39 @@
|
||||
# /volume1/docker/fail2ban/jail.d/gitea.conf
|
||||
|
||||
[DEFAULT]
|
||||
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
|
||||
# ban a host which matches an address in this list. Several addresses can be
|
||||
# defined using space separator.
|
||||
ignoreip = 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8
|
||||
|
||||
# Changes the default ban action from "iptables-multiport", which causes issues on some platforms, to "iptables-allports".
|
||||
banaction = iptables-allports
|
||||
|
||||
# "bantime" is the number of seconds that a host is banned.
|
||||
bantime = 600
|
||||
|
||||
# A host is banned if it has generated "maxretry" during the last "findtime"
|
||||
# seconds.
|
||||
findtime = 600
|
||||
|
||||
# "maxretry" is the number of failures before a host get banned.
|
||||
maxretry = 5
|
||||
|
||||
destemail = email@gmail.com
|
||||
sender = email@gmail.com
|
||||
sendername = Fail2Ban
|
||||
action = %(action_mwl)s
|
||||
|
||||
backend = auto
|
||||
|
||||
|
||||
[gitea]
|
||||
enabled = true
|
||||
|
||||
# Doit correspondre au nom du fichier .conf dans le dossier filter.d
|
||||
filter = gitea
|
||||
|
||||
logpath = /gitea/gitea.log
|
||||
maxretry = 10
|
||||
findtime = 3600
|
||||
bantime = 900
|
Loading…
Reference in New Issue
Block a user