This commit is contained in:
2026-06-02 07:34:09 +02:00
parent d927afbb87
commit b3f0a2eecc
9 changed files with 261 additions and 69 deletions
+76 -17
View File
@@ -18,10 +18,18 @@
|---|---|---|
| 🖥️ | **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 Google Authenticator / Aegis + QR Code |
| 🔐 | **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) |
@@ -60,11 +68,15 @@ pip install -r requirements.txt
### 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
@@ -74,34 +86,90 @@ 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
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
│ │ ├── wireguard.py # 🛡️ Clés, tunnel, statut
│ │ ├── 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 (6 onglets, thème sombre)
│ │ ├── mfa_dialog.py # 🔐 Dialog de vérification MFA
│ │ ├── 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
@@ -113,25 +181,16 @@ WGSecure/
| Élément | Protection |
|---|---|
| 🔑 Mot de passe admin | Hash SHA-256 + salt aléatoire 16 octets |
| 🔑 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.
---
## 🖼️ Interface
| Fenêtre principale | Panneau Admin |
|---|---|
| Statut connexion en temps réel | 6 onglets thème sombre |
| Bouton connexion / déconnexion | WireGuard · Clés · MFA · Test · Sécurité · À propos |
| Icône systray bouclier colorée | Bandeau coloré par onglet |
---
## 👤 Auteur
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)