1. Presentation
rpGUARD (Reverse Proxy GUARD) est un reverse proxy oriente securite. Il se place devant vos serveurs web : les requetes entrantes arrivent sur rpGUARD, qui les inspecte, les filtre, puis les relaie vers les serveurs de backend et renvoie la reponse au client. C'est le meme role qu'un nginx, HAProxy ou un mini-Cloudflare.
Reverse proxy (rpGUARD) : protege et repartit le trafic entrant vers vos serveurs. A ne pas confondre avec un forward proxy, qui sort vers Internet a la place d'un client.
Le moteur tourne in-process (Kestrel) : aucun binaire externe. Tout se pilote depuis la fenetre. rpGUARD est une reecriture .NET autonome du moteur Aenebris et lit un fichier de configuration YAML compatible.
Fonctions
- Repartition de charge (weighted round-robin) et sante des backends
- WAF : injection SQL, XSS, traversee de repertoire, RFI, user-agents de scanners, regex personnalisees
- Limitation de debit (token bucket) globale et par chemin
- Protection DDoS : connexions max par IP, bannissement automatique, delestage memoire
- Filtrage Geo / CIDR (listes autoriser / bloquer)
- Pot de miel (block / tarpit / labyrinth)
- Empreinte JA4H et scoring d'anomalies ML
- HTTP/1.1, HTTP/2 et WebSocket ; TLS par certificats PEM
2. Installation
Option A - Via le programme d'installation
Lancez rpGUARD-Setup-x.y.z.exe et suivez l'assistant. L'application s'installe dans
C:\Program Files\rpGUARD. Voir la section 8 pour generer ce Setup.
Option B - Compilation depuis les sources
- Ouvrir
rpGUARD.csprojdans Visual Studio (ciblenet10.0-windows, WPF). - Restaurer les paquets (YamlDotNet) puis compiler / lancer.
Astuce build : apres un dotnet run interrompu, purger bin et obj
puis relancer dotnet build.
3. Premier demarrage
Au lancement, un ecran de demarrage s'affiche, puis la fenetre principale. rpGUARD lit
config.yaml a cote de l'executable ; s'il est absent, une configuration par defaut est creee
(ecouteur 8080, un backend 127.0.0.1:8000, une route /).
Pour lancer le proxy : bouton Demarrer en haut a droite. La pastille passe au vert (En service). Arreter stoppe le moteur. Le bouton FR / EN bascule la langue.
4. L'interface
Tableau de bord
Vue temps reel : etat du moteur, duree de service, requetes/s, totales, relayees, bloquees ; sante de chaque backend (pastille verte/rouge, connexions actives, servies, echecs) et un decompte des blocages par cause.
Ecouteurs / TLS
Ports d'ecoute. Pour chaque ligne : le Port, l'activation TLS avec le chemin du Certificat et de la Cle (PEM), et l'option Rediriger vers HTTPS. Boutons Ajouter / Supprimer, puis Enregistrer.
Backends (upstreams)
Maitre-detail. A gauche, les groupes de backends (nom). A droite, les serveurs du groupe
selectionne (host:port et poids), plus le chemin de sante et
l'intervalle des sondes. Le poids influe sur la repartition de charge (un poids 3 recoit
environ trois fois plus de trafic qu'un poids 1).
Routes
Maitre-detail. A gauche, les hotes (par ex. localhost, ou *
pour tout hote). A droite, les chemins : Chemin (prefixe, ex. /api),
Backend cible et une Limite de debit optionnelle propre au chemin (ex.
20/second). Le chemin le plus specifique gagne ; / sert de repli.
Securite
| Bloc | Reglages |
|---|---|
| Limite globale | Debit applique a tout le trafic (ex. 100/minute). Vide = desactive. |
| WAF | Actif ; mode block ou log ; cases SQLi, XSS, traversee, RFI, scanners ; regex personnalisees possibles dans le YAML. |
| DDoS | Rejet des donnees anticipees ; connexions max par IP ; delestage memoire (octets) ; duree de bannissement. Apres plusieurs signaux hostiles, l'IP est bannie temporairement. |
| Pot de miel | Actif ; action block, tarpit (reponse lente) ou labyrinth (faux labyrinthe de liens). |
| Geo / CIDR | Listes de plages autorisees / bloquees (une par ligne, ex. 203.0.113.0/24). Une autorisation explicite l'emporte sur un blocage. |
Detection ML
Active un scoreur d'anomalies (longueur d'URL, ratio de caracteres speciaux, entropie, nombre de
parametres, absence de user-agent, methode inhabituelle...). Reglez le seuil (0 a 1) et le
mode (log ou block). C'est une base de reference autonome, sans
modele externe.
Journaux
Flux d'evenements en direct, colore par niveau (info, avertissement, blocage, erreur). Bouton Effacer. Les 500 dernieres lignes sont conservees.
A propos
Version, description, liste des fonctionnalites, developpeur et lien vers m365expertise.
5. Le pipeline de traitement
Chaque requete traverse les etages dans cet ordre ; le premier qui refuse arrete la requete :
6. TLS / certificats
Sur un ecouteur TLS, indiquez les chemins du certificat et de la cle au format PEM. rpGUARD
charge la paire et la sert directement (pas de liaison netsh requise). Pour un test local, un
certificat auto-signe suffit.
# Exemple de certificat de test auto-signe (PowerShell + OpenSSL) openssl req -x509 -newkey rsa:2048 -nodes -keyout server.key -out server.crt -days 365 -subj "/CN=localhost"
7. Fichier de configuration
Format YAML compatible Aenebris (cle en snake_case), lu/ecrit dans config.yaml.
Un modele commente est fourni : config.sample.yaml.
version: 1
listen:
- port: 8080
- port: 8443
tls:
cert: certs/server.crt
key: certs/server.key
rate_limit: "100/minute"
ddos:
per_ip_connections: 100
memory_shed_bytes: 1073741824
jail_cooldown_seconds: 300
waf:
enabled: true
mode: block
sqli: true
xss: true
upstreams:
- name: default-backend
servers:
- host: "127.0.0.1:8000"
weight: 3
- host: "127.0.0.1:8001"
weight: 1
health_check:
path: /health
interval: 10s
routes:
- host: localhost
paths:
- path: /api
upstream: default-backend
rate_limit: "20/second"
- path: /
upstream: default-backend
8. Generer le programme d'installation
Deux scripts a la racine du projet, plus le script Inno Setup :
| Fichier | Role |
|---|---|
publish.ps1 | Publie l'application dans .\publish (self-contained win-x64 par defaut). |
rpGUARD.iss | Script Inno Setup qui empaquette .\publish en programme d'installation. |
build-installer.ps1 | Enchaine la publication puis la compilation du Setup (recupere la version depuis le csproj). |
Prerequis
- .NET SDK 10 (
dotnet) - Inno Setup 6 (
ISCC.exe) : jrsoftware.org/isdl.php
Commande
# Depuis la racine du projet .\build-installer.ps1 # Variante sans runtime embarque (necessite .NET 10 Desktop + ASP.NET Core sur la cible) .\build-installer.ps1 -SelfContained:$false
Le Setup est genere dans installer-output\rpGUARD-Setup-<version>.exe. La version est
la source unique <Version> du rpGUARD.csproj.
9. Depannage
| Symptome | Piste |
|---|---|
| Le proxy ne demarre pas (port occupe) | Un autre service ecoute deja sur le port ; changez le port de l'ecouteur ou liberez-le. |
| 503 "no-healthy-backends" | Aucun serveur du backend ne repond a la sonde de sante ; verifiez host:port et le chemin de sante. |
| 502 "bad-gateway" | Le backend refuse la connexion ; verifiez qu'il ecoute bien en HTTP sur l'hote/port indique. |
| Erreur de certificat au demarrage TLS | Chemins PEM invalides ou paire cert/cle incoherente. |
| Trafic legitime bloque par le WAF | Passez le WAF en mode log pour observer, puis affinez les regles. |
| ISCC.exe introuvable | Installez Inno Setup 6 ou ajoutez-le au PATH. |