fix: la clé pré-partagée n'était écrite dans aucune config client L'assistant de génération produisait une PresharedKey affichée à l'écran mais stockée nulle part, et l'import d'un .conf ignorait la ligne. Face à un serveur qui en attend une, le tunnel montait et l'interface existait — sans qu'aucun handshake n'aboutisse jamais. La PSK devient un champ à part entière. fix: options de ligne de commande wireguard.exe incorrectes sous Windows /installtunnel et /uninstalltunnel n'existent pas ; les vrais verbes sont /installtunnelservice et /uninstalltunnelservice. S'y ajoutaient l'absence de résolution du chemin d'installation (WireGuard n'est pas dans le PATH), l'absence totale d'élévation UAC alors que ces commandes l'exigent, et une détection d'installation qui sondait une application graphique avec --help. feat: diagnostic de bout en bout de la chaîne de connexion Le bouton de test s'arrêtait à la joignabilité UDP et concluait « serveur joignable » sur un tunnel qui n'échangeait rien. Il déroule désormais quatorze étapes, de la configuration locale jusqu'au DNS dans le tunnel, et désigne l'étape qui bloque. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
192 lines
6.6 KiB
Markdown
192 lines
6.6 KiB
Markdown
# 🛡️ WGSecure (WGS)
|
|
|
|
🚀 v0.4.5 · 🐍 · 🪟🐧 · 🔐 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).
|
|
|
|
---
|
|
|
|
## ✨ Fonctionnalités
|
|
|
|
| # | Fonctionnalité | Détail |
|
|
|---|---|---|
|
|
| 🖥️ | **Interface systray** | Icône bouclier dans la barre de notification, connexion en un clic |
|
|
| 👤 | **Mode User** (défaut) | Connexion / déconnexion WireGuard, statut RX/TX en temps réel |
|
|
| 📊 | **Graphique bande passante** | Courbes RX/TX en direct sur les 30 dernières secondes |
|
|
| 📋 | **Journal d'événements** | Horodatage de chaque connexion, déconnexion, erreur |
|
|
| 🕘 | **Historique des sessions** | Durée, données transférées, serveur par session |
|
|
| ⚙️ | **Mode Admin** | Configuration complète, protégé par mot de passe |
|
|
| 🔑 | **Génération de clés** | Paire Curve25519 native (sans dépendance au binaire `wg`) |
|
|
| 👤 | **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 |
|
|
| 🪟🐧 | **Cross-platform** | Windows 10+ et Linux (wg-quick) |
|
|
|
|
---
|
|
|
|
## 📋 Prérequis
|
|
|
|
### 🐧 Linux
|
|
```bash
|
|
sudo apt install wireguard-tools # Debian/Ubuntu
|
|
sudo dnf install wireguard-tools # Fedora
|
|
```
|
|
|
|
### 🪟 Windows
|
|
- [WireGuard for Windows](https://www.wireguard.com/install/) installé
|
|
|
|
### 🐍 Python
|
|
```
|
|
Python >= 3.11
|
|
```
|
|
|
|
---
|
|
|
|
## 📦 Installation
|
|
|
|
```bash
|
|
git clone <repo>
|
|
cd WGSecure
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Utilisation
|
|
|
|
### Mode User (par défaut)
|
|
```bash
|
|
python main.py
|
|
# ou via Makefile :
|
|
make run
|
|
```
|
|
|
|
### ⚙️ Mode Administrateur (configuration)
|
|
```bash
|
|
python main.py --admin
|
|
# ou via Makefile :
|
|
make run-admin
|
|
```
|
|
|
|
### Sans systray
|
|
```bash
|
|
python main.py --no-tray
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Makefile
|
|
|
|
| Commande | Description |
|
|
|---|---|
|
|
| `make install` | Installe les dépendances Python |
|
|
| `make linux` | Compile un binaire Linux autonome (PyInstaller) |
|
|
| `make windows` | Compile un binaire Windows via Wine |
|
|
| `make release` | Binaire Linux renommé avec la version |
|
|
| `make install-gnome` | Installe dans le menu GNOME (`~/.local/`) |
|
|
| `make uninstall-gnome` | Désinstalle du menu GNOME |
|
|
| `make reset-password` | Supprime le mot de passe administrateur |
|
|
| `make run` | Lance l'application |
|
|
| `make run-admin` | Lance en mode administrateur |
|
|
| `make clean` | Supprime les artefacts de build |
|
|
|
|
---
|
|
|
|
## 🗺️ Workflow recommandé
|
|
|
|
1. 🚀 Lancer `python main.py --admin`
|
|
2. 🛡️ Onglet **WireGuard** : renseigner l'adresse, le port et la clé publique du serveur
|
|
3. 🔑 Onglet **Clés** : générer une paire de clés → copier la clé publique sur le serveur
|
|
4. 🔐 Onglet **MFA** : activer le MFA, générer un secret, scanner le QR Code avec Bitwarden
|
|
5. 🔒 Onglet **Sécurité** : définir un mot de passe pour l'accès admin
|
|
6. ✅ **Enregistrer** → quitter → lancer `python main.py` en mode user
|
|
|
|
---
|
|
|
|
## 🐧 Élévation de privilèges Linux
|
|
|
|
`wg-quick` nécessite les droits root pour monter/démonter le tunnel.
|
|
WGSecure tente dans l'ordre :
|
|
|
|
1. **pkexec** (polkit) — dialogue graphique GNOME/KDE, aucune configuration requise
|
|
2. **sudo -A** avec programme askpass graphique (`ssh-askpass`, etc.)
|
|
3. **sudo -n** — fonctionne si une règle NOPASSWD est en place
|
|
|
|
### Supprimer la demande de mot de passe (optionnel)
|
|
|
|
Pour éviter toute invite à chaque connexion, créer une règle sudoers dédiée :
|
|
|
|
```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
|
|
```
|
|
|
|
> ⚠️ 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
|
|
make reset-password
|
|
```
|
|
|
|
---
|
|
|
|
## 🏗️ Architecture
|
|
|
|
```
|
|
WGSecure/
|
|
├── main.py # 🚀 Point d'entrée
|
|
├── requirements.txt
|
|
├── Makefile
|
|
├── app/
|
|
│ ├── __init__.py # Version
|
|
│ ├── core/
|
|
│ │ ├── config.py # 💾 Configuration JSON persistante + bcrypt
|
|
│ │ ├── wireguard.py # 🛡️ Clés, tunnel, statut, kill switch, DNS leak
|
|
│ │ ├── history.py # 🕘 Historique des sessions (sessions.json)
|
|
│ │ ├── log.py # 📋 Journal d'événements (events.json)
|
|
│ │ └── mfa.py # 🔐 TOTP / QR Code
|
|
│ ├── ui/
|
|
│ │ ├── icons.py # 🎨 Icônes bouclier générées par QPainter
|
|
│ │ ├── main_window.py # 👤 Fenêtre principale (mode user)
|
|
│ │ ├── admin_window.py # ⚙️ Panneau admin (onglets, thème sombre)
|
|
│ │ ├── bw_graph.py # 📊 Widget graphique bande passante
|
|
│ │ ├── history_dialog.py # 🕘 Dialogue historique des sessions
|
|
│ │ ├── mfa_dialog.py # 🔐 Dialogue de vérification MFA
|
|
│ │ └── systray.py # 🖥️ Icône systray + menu contextuel
|
|
│ └── utils/
|
|
│ └── platform_utils.py # 🔧 Détection OS, élévation de privilèges
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 Sécurité
|
|
|
|
| Élément | Protection |
|
|
|---|---|
|
|
| 🔑 Mot de passe admin | **bcrypt** (rounds=12) + sel intégré — migration transparente depuis SHA-256 |
|
|
| 🗝️ 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.
|
|
|
|
---
|
|
|
|
## 👤 Auteur
|
|
|
|
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)
|
|
Version :  — Août 2026
|