Fix bugs
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user