
Sommaire
Introduction
Dans un monde connecté où la sécurité et la confidentialité sont essentielles, restreindre l’accès à une application uniquement aux utilisateurs situés dans un certain pays peut être une mesure cruciale. Ce guide détaille les étapes nécessaires pour configurer la géolocalisation dans le but de limiter l’accès à une application exclusivement depuis le pays de votre choix avec le reverse proxy SWAG. Nous avons aborder l’installation de SWAG avec docker compose dans un précédent article.
Configuration de la base de données MaxMind
SWAG va se baser sur une base de données MaxMind qui est gratuite et qui va lui permettre de localiser la provenance d’une requête.
La première étape consistera à s’enregistrer sur le site de MaxMind à cet URL : https://www.maxmind.com/en/geolite2/signup
Une fois connecté, on crée une clé de licence :

Une clé sera affiché, enregistrez-la dans un endroit sécurisé car elle ne sera visible qu’une seule fois.
Ensuite on peut télécharger la base de données « GeoLite2.City » sur l’interface web

Une fois téléchargé, vous pouvez utiliser WinSCP ou n’importe quel autre outil de transfert de fichier
Le fichier doit être envoyé dans le chemin suivant de votre configuration SWAG :
~/docker/swag/config/geoip2db
Une fois déposé, on peut décompresser le fichier :
sudo tar xvf GeoLite2-City_20240329.tar.gz
On met le fichier comprenant la base de données au niveau inférieur
sudo mv GeoLite2-City_20240329/GeoLite2-City.mmdb ./
Puis on nettoie ce qui ne nous intéresse pas
sudo rm GeoLite2-City_*
Configuration de SWAG
Il est nécessaire d’ajouter un mods docker au fichier docker-compose.yml pour prendre en compte la géolocalisation. Nous allons donc ajouter ces 2 lignes à notre fichier de configuration dans l’onglet variable d’environnement :
DOCKER_MODS=linuxserver/mods:swag-maxmind
MAXMINDDB_LICENSE_KEY=<license-key>
On peut ensuite supprimer et recréer le conteneur :
sudo docker compose down
sudo docker compose up -d
Dans le fichier /config/nginx/nginx.conf nous devons ajouter en dessous de la section http la ligne suivante :
include /config/nginx/maxmind.conf;

Ensuite on édite le fichier /config/nginx/maxmind.conf pour configurer les pays/réseaux que l’on souhaite autoriser :
Dans mon cas, je ne souhaite que la France alors que le code pays sera FR.
La ligne « default no » signifie que par défaut on refuse tous, et la ligne « FR yes » signifie qu’on autorise la connexion depuis la France. Je peux également spécifier les sous réseaux que je possède chez moi

La configuration géographique est effectuée. Pour le mettre en pratique, je dois appliquer les règles dans le fichier d’une de mes applications, dans mon cas Jellyfin.
On édite donc le fichier qui contient la configuration de Jellyfin :
sudo nano nginx/proxy-confs/jellyfin.subdomain.conf
Et on ajoute les lignes suivantes :
if ($lan-ip = yes) { set $geo-whitelist yes; }
if ($geo-whitelist = no) { return 404; }

On redémarre ensuite le conteneur et on vérifie qu’il n’y a pas d’erreur dans les logs de ce dernier :
sudo docker restart swag && sudo docker logs swag
Phase de test
Je possède un VPN qui me permet de me connecter à peu près partout dans le monde, il me sera donc assez aisé de tester la connexion à mon application en effectuant une requête depuis un autre pays.
Je test de me connecter depuis l’Italie par exemple avec mon VPN :

En essayant de joindre mon serveur depuis l’URL, le retour qui m’est affiché est une erreur 404 :

Astuce si plusieurs mods
Si comme moi vous disposez de plusieurs mods, vous devez séparer les différents mods avec un pipe comme ceci :
- DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-maxmind
Conclusion
La mise en place de la géolocalisation pour restreindre l’accès à une application est une démarche importante dans la sécurisation des systèmes informatiques, cela permet de restreindre considérablement la zone d’attaque. En suivant les étapes de cet article, vous pourrez vous-même intégrer efficacement cette fonctionnalité très intéressante au reverse proxy SWAG.
[/et_pb_text][/et_pb_column] [/et_pb_row] [/et_pb_section]
Merci pour ce tuto 🙂
Par contre il semblerait que maintenant une nouvelle variable d’environnement soit demandée : MAXMINDDB_USER_ID
(récupérable dans « My Account » en haut a droit du site MaxMind
Bonjour,
Merci pour votre retour !
Je mettrai à jour de le tutoriel dès que je trouve le temps !