Public Access
feat: Whitelist VPN pour les réseaux locaux de supervision et passe-droit VIP
Build and Push Docker Image / build-and-push (push) Successful in 33s
Build and Push Docker Image / build-and-push (push) Successful in 33s
This commit is contained in:
1 parent
34163a630c
commit
5a4e7dd094
4 files changed
+253
-11
No files matched your search
+13
-5
@@ -7,21 +7,29 @@ from modules.logger import log_event
|
||||
|
||||
LOG_FILE = "aethas_ip_logs.json"
|
||||
|
||||
def verifier_et_bloquer_vpn(ip_address):
|
||||
# --- DÉFINITION CENTRALISÉE DES PROFILS PRIVILÉGIÉS ---
|
||||
UTILISATEURS_VIP = ["xavier", "céline", "anaëlle", "renan", "audric", "admin"]
|
||||
|
||||
def verifier_et_bloquer_vpn(ip_address, utilisateur="visiteur"):
|
||||
"""
|
||||
Vérifie si une IP appartient à un VPN, un Proxy ou un Datacenter.
|
||||
Utilise l'API publique gratuite blackbox.ipinfo.app (Renvoie 'Y' si VPN, 'N' si clean).
|
||||
Intègre une liste blanche (Whitelist) pour les réseaux locaux et les VIP.
|
||||
"""
|
||||
# On ne bloque jamais les requêtes locales du serveur (localhost)
|
||||
if ip_address in ["127.0.0.1", "localhost", "::1"]:
|
||||
# 1. Bypass matériel : On ne bloque jamais les requêtes locales (Serveur, MeshCentral, Beszel, Gluetun)
|
||||
if ip_address in ["127.0.0.1", "localhost", "::1"] or ip_address.startswith(("192.168.", "10.", "172.")):
|
||||
return False
|
||||
|
||||
# 2. Bypass profil : Passe-droit pour les VIP et Administrateurs
|
||||
if utilisateur.lower() in UTILISATEURS_VIP:
|
||||
log_event("INFO", "SECURITY", f"Passe-droit VPN accordé à l'utilisateur VIP : {utilisateur} ({ip_address})")
|
||||
return False
|
||||
|
||||
try:
|
||||
# Requête ultra-légère, timeout court pour ne pas ralentir le site
|
||||
reponse = requests.get(f"https://blackbox.ipinfo.app/lookup/{ip_address}", timeout=3)
|
||||
if reponse.text.strip() == "Y":
|
||||
log_event("WARNING", "SECURITY", f"Tentative de connexion VPN bloquée pour l'IP : {ip_address}")
|
||||
return True # True = C'est un VPN, il faut bloquer
|
||||
return True # True = C'est un VPN public/datacenter, il faut bloquer
|
||||
except requests.RequestException as e:
|
||||
# En cas de panne de l'API de vérification, on laisse passer pour ne pas bloquer les utilisateurs légitimes
|
||||
log_event("ERROR", "SECURITY", f"Erreur lors de la vérification VPN pour {ip_address}: {e}")
|
||||
|
||||
Reference in new issue
Block a user