v0.7.0 : instance unique, handshake ré-affiché, sudoers fiabilisé, À propos refaite

- Instance unique : un second lancement réveille l'instance active.
- Autostart et reconnexion auto activés par défaut (nouvelle installation).
- Page « À propos » refaite en 5 onglets (contenu séparé dans app_info.py).
- Corrige le handshake/RX-TX qui ne s'affichaient plus (wg show sans élévation).
- Corrige le diagnostic sudo trompeur (sondes qui ne matchaient jamais les règles).
- Corrige make setup-sudoers bloqué hors session graphique (pkexec -> sudo), idempotent.
- Corrige le README : Kill Switch inexistant retiré, ordre d'élévation réel documenté.
This commit is contained in:
2026-09-01 19:18:24 +02:00
parent 6251a3ea8e
commit 8c09c02362
13 changed files with 590 additions and 104 deletions
+38 -18
View File
@@ -1,6 +1,6 @@
# 🛡️ WGSecure (WGS)
🚀 v0.6.0 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
🚀 v0.7.0 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP).
@@ -20,11 +20,12 @@
| 👤 | **Multi-profils** | Sauvegarde / bascule entre profils, import/export `.conf` |
| 🛡️ | **Configuration WireGuard** | Serveur, port UDP, DNS, IP client, keepalive |
| 🔐 | **MFA TOTP** | Compatible Bitwarden + QR Code |
| 🔒 | **Kill Switch** | Bloque tout trafic hors tunnel via iptables (Linux) |
| 🔍 | **Test DNS leak** | Vérifie que le DNS passe bien par le tunnel |
| 🏓 | **Ping en temps réel** | Badge de latence dans l'interface principale |
| 🔄 | **Auto-reconnexion** | Surveillance et reconnexion automatique si le tunnel tombe |
| 📡 | **Test de connexion** | Vérification UDP du serveur avant établissement du tunnel |
| 🔄 | **Auto-reconnexion** | Surveillance et reconnexion automatique si le tunnel tombe — activée par défaut (15 s) |
| 📡 | **Test de connexion** | Handshake WireGuard réel, sans monter le tunnel, avec détection du filtrage sur port source |
| 🚀 | **Démarrage automatique** | Lancement au démarrage du système — activé par défaut |
| 1️⃣ | **Instance unique** | Un second lancement réveille l'instance déjà active plutôt que d'en ouvrir une seconde |
| 🪟🐧 | **Cross-platform** | Windows 10+ et Linux (wg-quick) |
---
@@ -110,30 +111,47 @@ python main.py --no-tray
## 🐧 Élévation de privilèges Linux
`wg-quick` nécessite les droits root pour monter/démonter le tunnel.
WGSecure tente dans l'ordre :
`wg-quick`, la lecture de l'état du tunnel (`wg show`) et le nettoyage réseau
(interface orpheline, DNS) nécessitent les droits root. WGSecure tente dans
l'ordre :
1. **pkexec** (polkit) — dialogue graphique GNOME/KDE, aucune configuration requise
1. **sudo -n** — silencieux, fonctionne si une règle NOPASSWD est en place
(voir ci-dessous)
2. **sudo -A** avec programme askpass graphique (`ssh-askpass`, etc.)
3. **sudo -n** — fonctionne si une règle NOPASSWD est en place
3. **pkexec** (polkit) — dialogue graphique GNOME/KDE ; nécessite un agent
d'authentification actif, absent d'un simple terminal (SSH, tmux)
### Supprimer la demande de mot de passe (optionnel)
Le sondage périodique de l'état du tunnel (toutes les 3 s) ne tente que
l'étape 1 : sans règle NOPASSWD, aucun dialogue n'apparaît, le handshake et
les compteurs RX/TX restent simplement vides.
Pour éviter toute invite à chaque connexion, créer une règle sudoers dédiée :
### Supprimer la demande de mot de passe (recommandé)
```bash
make setup-sudoers
```
Invite le mot de passe une fois dans le terminal (via `sudo`, plus fiable que
`pkexec` hors session graphique), puis installe une règle NOPASSWD limitée à
`wg-quick`, `wg`, et au nettoyage d'une interface/DNS orpheline — jamais un
accès root généralisé. Idempotent : une relance ne redemande le mot de passe
que si le contenu a changé. `make check-privileges` affiche l'état courant.
Pour le faire à la main :
```bash
sudo visudo -f /etc/sudoers.d/wgsecure
```
Ajouter la ligne suivante (remplacer `<utilisateur>` par votre login) :
```
<utilisateur> ALL=(ALL) NOPASSWD: /usr/bin/wg-quick
<utilisateur> ALL=(ALL) NOPASSWD: /usr/bin/wg
<utilisateur> ALL=(ALL) NOPASSWD: /usr/sbin/ip link delete dev *
<utilisateur> ALL=(ALL) NOPASSWD: /usr/sbin/resolvconf -d *
<utilisateur> ALL=(ALL) NOPASSWD: /usr/bin/resolvectl revert *
<utilisateur> ALL=(ALL) NOPASSWD: /usr/bin/install -D -m 600 -o root -g root * /etc/wireguard/*
```
> ⚠️ Cette règle accorde l'exécution de `wg-quick` sans mot de passe uniquement,
> et non un accès root général.
### Réinitialiser le mot de passe admin oublié
```bash
@@ -151,9 +169,12 @@ WGSecure/
├── Makefile
├── app/
│ ├── __init__.py # Version
│ ├── app_info.py # ️ Contenu de la page « À propos »
│ ├── core/
│ │ ├── config.py # 💾 Configuration JSON persistante + bcrypt
│ │ ├── wireguard.py # 🛡️ Clés, tunnel, statut, kill switch, DNS leak
│ │ ├── wireguard.py # 🛡️ Clés, tunnel, statut, DNS leak
│ │ ├── wg_handshake.py # 🤝 Sonde de handshake réel, sans monter le tunnel
│ │ ├── single_instance.py # 1️⃣ Garde une seule instance active
│ │ ├── history.py # 🕘 Historique des sessions (sessions.json)
│ │ ├── log.py # 📋 Journal d'événements (events.json)
│ │ └── mfa.py # 🔐 TOTP / QR Code
@@ -179,7 +200,6 @@ WGSecure/
| 🗝️ Clé privée WireGuard | `~/.wgsecure/config.json` (Linux) / `%APPDATA%\WGSecure\` (Windows) |
| 🔐 Secret MFA TOTP | Stocké dans le fichier de configuration local |
| 📄 Fichier `.conf` WireGuard | Permissions `0600` (lecture propriétaire uniquement) |
| 🔒 Kill Switch | Chaîne iptables dédiée `WGS_KILLSWITCH` — isolée du pare-feu système |
> ⚠️ **Recommandation** : chiffrez votre disque pour protéger le fichier de configuration.
@@ -188,4 +208,4 @@ WGSecure/
## 👤 Auteur
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)
Version : ![v0.6.0](https://img.shields.io/badge/v0.6.0-septembre%202026-2980b9?style=flat-square) — Septembre 2026
Version : ![v0.7.0](https://img.shields.io/badge/v0.7.0-septembre%202026-2980b9?style=flat-square) — Septembre 2026