Zoraxy, un nouveau reverse proxy complet

Après avoir rapidement évoqué et installé Zoraxy sur un routeur Ubiquiti UDM, il est temps de prendre un peu de temps pour vous présenter cet outil.
Zoraxy est donc un reverse proxy (ou proxy inversé), comme NPM, Caddy ou bien encore Traefik, qui permet de gérer les redirections de sous-domaines vers vos services hébergés, tout en sécurisant ces accès. Ecrit en langage Go, il offre d'excellentes performances et est surtout axé sur l'interface utilisateur, promettant une gestion simple et la plus complète possible.
Zoraxy permet de faire des redirections web, que ce soit vers des URL, des Virtual Directory, du WebSocket (qu'il gère en automatique*). Il supporte les alias, peut ajouter une authentification basique, gère un système de liste blanche / noire pour autoriser uniquement ou bloquer le trafic provenant de certains pays ou adresses IP. Il permet également de remonter quelques statistiques sur les accès effectués sur vos redirections ou de surveiller la disponibilité et la latence de celles-ci avec un moniteur intégré. Quelques utilitaires sont également présents : terminal web-ssh, convertisseurs IP CIDR, scanner mDNS, wake-On-Lan, debug forward, proxy, scanner IP ... ce qui peut être bien pratique et dépanner.
De plus, certaines rustines ont été ajoutées dans le code pour détecter certains flux WebSocket (par exemple Proxmox), ce qui fait que la détection n'est pas si automatique que cela.
Installation du binaire
Deux méthodes pour déployer Zoraxy sont disponibles, la première étant l'installation du binaire mis à disposition sur le github du développeur.
mkdir /opt/zoraxy && cd /opt/zoraxy
wget https://github.com/tobychui/zoraxy/releases/download/3.1.7/zoraxy_linux_arm64
mv zoraxy_linux_arm64 /opt/zoraxy && chmod +x zoraxy
Pour démarrer Zoraxy, il vous suffit de lancer la commande suivante en précisant le port que vous souhaitez utiliser :
./zoraxy -port=:8000
Il est nécessaire d'ajouter Zoraxy en tant que service et permettre d'utiliser des commandes de gestion plus classiques ainsi qu'un lancement automatique au démarrage du système.
Pour cela, créez un fichier start.sh
dans le répertoire d'installation de Zoraxy :
cd /opt/zoraxy && nano start.sh
Et collez le contenu suivant :
#!/bin/bash
/opt/zoraxy/zoraxy -port=:8000
Rendez le script exécutable avec la commande :
chmod +x start.sh
Créez un fichier de service systemd :
nano /etc/systemd/system/zoraxy.service
Et collez le contenu suivant :
[Unit]
Description=Zoraxy Reverse Proxy Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/zoraxy
ExecStart=/opt/zoraxy/start.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=zoraxy
[Install]
WantedBy=multi-user.target
Rechargez systemd et relancez Zoraxy en tant que service cette fois :
systemctl daemon-reload
systemctl enable zoraxy
systemctl start zoraxy
Vérifiez que Zoraxy est en cours d’exécution en accédant à l’interface web via l’adresse IP de votre serveur et le port configuré 8000 pour créer le compte administrateur.
Installation sous Docker
Il est également possible d’installer Zoraxy en tant que conteneur Docker. Pour cela, créez un répertoire pour stocker la configuration et créez un fichier docker compose :
mkdir zoraxy && cd zoraxy && nano compose.yaml
Et collez le contenu suivant :
services:
zoraxy:
image: zoraxydocker/zoraxy:latest
container_name: zoraxy
restart: unless-stopped
ports:
- 80:80
- 443:443
- 8000:8000
volumes:
- ./config/:/opt/zoraxy/config/
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime
environment:
FASTGEOIP: "true"
Démarrez le conteneur avec la commande :
docker-compose up -d
Vérifiez que Zoraxy est en cours d’exécution en accédant à l’interface web via l’adresse IP de votre serveur et le port configuré 8000 pour créer le compte administrateur.


Ajout d'une redirection
Pour ajouter une redirection et donc rediriger un nom de domaine que vous possédez vers un service que vous hébergez, rendez vous sur la page "Create Proxy Rules".
- Définissez le nom de domaine ou sous-domaine pour lequel vous souhaitez créer la redirection.
- Indiquez l'adresse IP et le port du service que vous souhaitez joindre.
- Cochez la case "Proxy Target require TLS Connection" pour que la redirection soit sécurisée avec un certificat.
- Des options avancées sont disponible pour désactiver la vérification du certificat, définir un contrôle d'accès par liste ou bien activer une authentification basique par identifiant / mot de passe.
- Cliquez sur "Create Endpoint" pour valider la création de la redirection.




Ajout d'un Certificat Wildcard pour sécuriser vos redirections
Un certificat wildcard peut être généré pour votre domaine, garantissant la sécurité de tous les sous-domaines. Par exemple, pour le domaine domaine.tld
, le certificat wildcard fonctionnera pour *.domaine.tld
. Utilisons la fonctionnalité de Zoraxy pour interroger l’API de votre registrar, avec OVH en exemple.
Configuration de l’API OVH
- Enregistrement DNS : Créez un enregistrement DNS de type A pour
domaine.tld
vers l’IP de votre serveur, et un enregistrement de type A ou CNAME pour*.domaine.tld
. - Accès à l’API OVH : Créez un jeton API sur la page de création de Token API d’OVH. Configurez le jeton avec une validité illimitée et les droits suivants :
- GET /domain/zone/*
- PUT /domain/zone/*
- POST /domain/zone/*
- DELETE /domain/zone/*



Configuration dans Zoraxy
Dans l’onglet “TLS / SSL Certificates”, cliquez sur "Open ACME Tool".
Renseignez votre adresse mail, activez “Enable Certificate Auto Renew” et entrez votre domaine *.domaine.tld
.
Cochez “Use a DNS Challenge” et choisissez OVH ou Infomaniak.
Pour OVH, sélectionnez ovh-eu
pour l’APIEndpoint, collez les clés API ApplicationKey
, ApplicationSecret
et ConsumerKey
obtenues précédemment et enfin cliquez sur “Get Certificate”.

- Vérification et activation : L’opération prend quelques minutes. Une fois le certificat généré, activez le sur la page d’accueil. En cas d’erreur, vérifiez les étapes suivies

Pour consulter les applications autorisées à utiliser l’API OVH, rendez-vous sur la console API OVH et utilisez les endpoints suivants :
- Liste des applications :
GET /me/api/application
- Détails d’une application :
GET /me/api/application/{applicationId}
- Suppression d’une application :
DELETE /me/api/application/{applicationId}
Conclusion
Nous voici à la fin de cet article sur Zoraxy, un nouveau venu dans les reverse proxy, qui se veut simple mais complet, pour vous aider dans la gestion de vos domaines et certificats.
Personnellement (Guillaume), j'ai testé Zoraxy en production en tant que reverse proxy principal pendant environ 15 jours chez moi, mais suis finalement revenu à NPM, majoritairement dû au fait des quelques détections de websocket qui ne fonctionnaient pas correctement en automatique et qu'on ne peut pas forcer. Je lui redonnerais sa chance d'ici quelques mois quand il aura évolué et gagné en maturité.
Si vous avez des questions sur l’utilisation de Zoraxy ou la génération de certificats wildcard, n'hésitez pas à laisser un commentaire ou rejoignez la communauté sur Telegram.