This commit is contained in:
2026-06-03 09:55:39 +02:00
parent b3f0a2eecc
commit 2f9ca6b553
2 changed files with 0 additions and 114 deletions
-63
View File
@@ -245,69 +245,6 @@ def ping_server(host: str, timeout: int = 2) -> int | None:
return None
# ── Kill switch ──────────────────────────────────────────────────────────
_KS_CHAIN = "WGS_KILLSWITCH"
def enable_kill_switch(cfg: Config) -> tuple[bool, str]:
"""Active le kill switch : bloque tout trafic hors du tunnel WireGuard."""
if is_windows():
return False, "Kill switch non disponible sur Windows (utilisez le pare-feu Windows)"
iface = cfg.wg.get("interface_name", "wgs0")
server = cfg.wg.get("server_endpoint", "")
port = str(cfg.wg.get("server_port", 51820))
# Créer la chaîne dédiée (idempotent)
run_privileged(["iptables", "-N", _KS_CHAIN])
run_privileged(["iptables", "-F", _KS_CHAIN])
rules = [
["iptables", "-A", _KS_CHAIN, "-o", "lo", "-j", "ACCEPT"],
["iptables", "-A", _KS_CHAIN, "-o", iface, "-j", "ACCEPT"],
["iptables", "-A", _KS_CHAIN, "-m", "state",
"--state", "ESTABLISHED,RELATED", "-j", "ACCEPT"],
]
if server:
rules.append(["iptables", "-A", _KS_CHAIN,
"-d", server, "-p", "udp", "--dport", port, "-j", "ACCEPT"])
rules.append(["iptables", "-A", _KS_CHAIN, "-j", "REJECT",
"--reject-with", "icmp-net-unreachable"])
for rule in rules:
code, _, err = run_privileged(rule)
if code != 0:
disable_kill_switch(cfg)
return False, f"Erreur iptables : {err}"
# Insérer la chaîne dans OUTPUT (évite les doublons)
run_privileged(["iptables", "-D", "OUTPUT", "-j", _KS_CHAIN])
code, _, err = run_privileged(["iptables", "-I", "OUTPUT", "-j", _KS_CHAIN])
if code != 0:
disable_kill_switch(cfg)
return False, err
return True, f"Kill switch activé (interface {iface})"
def disable_kill_switch(cfg: Config) -> tuple[bool, str]:
"""Désactive le kill switch."""
if is_windows():
return True, "N/A"
run_privileged(["iptables", "-D", "OUTPUT", "-j", _KS_CHAIN])
run_privileged(["iptables", "-F", _KS_CHAIN])
run_privileged(["iptables", "-X", _KS_CHAIN])
return True, "Kill switch désactivé"
def kill_switch_active() -> bool:
if is_windows():
return False
code, out, _ = run_command(["iptables", "-L", "OUTPUT", "-n"])
return _KS_CHAIN in out
# ── Test DNS leak ─────────────────────────────────────────────────────────
def dns_leak_test(cfg: Config) -> dict: