# đŸ›Ąïž WGSecure (WGS) 🚀 v0.7.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 | | 🔍 | **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 — 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) | --- ## 📋 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 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`, 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. **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. **pkexec** (polkit) — dialogue graphique GNOME/KDE ; nĂ©cessite un agent d'authentification actif, absent d'un simple terminal (SSH, tmux) 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. ### 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 ``` ``` ALL=(ALL) NOPASSWD: /usr/bin/wg-quick ALL=(ALL) NOPASSWD: /usr/bin/wg ALL=(ALL) NOPASSWD: /usr/sbin/ip link delete dev * ALL=(ALL) NOPASSWD: /usr/sbin/resolvconf -d * ALL=(ALL) NOPASSWD: /usr/bin/resolvectl revert * ALL=(ALL) NOPASSWD: /usr/bin/resolvectl dns * ALL=(ALL) NOPASSWD: /usr/bin/resolvectl domain * ALL=(ALL) NOPASSWD: /usr/bin/install -D -m 600 -o root -g root * /etc/wireguard/* ``` ### 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 │ ├── app_info.py # â„č Contenu de la page « À propos » │ ├── core/ │ │ ├── config.py # đŸ’Ÿ Configuration JSON persistante + bcrypt │ │ ├── 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 │ ├── 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) | > ⚠ **Recommandation** : chiffrez votre disque pour protĂ©ger le fichier de configuration. --- ## đŸ‘€ Auteur DĂ©veloppĂ© par **Johnny** — [JT-Tools](https://github.com/JT-Tools) Version : ![v0.7.5](https://img.shields.io/badge/v0.7.5-septembre%202026-2980b9?style=flat-square) — Septembre 2026