Zoraxy, un nouveau reverse proxy complet

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.

GitHub - tobychui/zoraxy: A general purpose HTTP reverse proxy and forwarding tool. Now written in Go!
A general purpose HTTP reverse proxy and forwarding tool. Now written in Go! - tobychui/zoraxy

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.

✳️
La gestion des WebSocket en automatique n'est pas encore totalement aboutie à mon avis, certaines redirections ne sont pas détectées et il n'est pas possible de forcer son activation.
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.

🔗
Vérifiez que vous téléchargez bien la dernière version disponible ici.
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".

  1. Définissez le nom de domaine ou sous-domaine pour lequel vous souhaitez créer la redirection.
  2. Indiquez l'adresse IP et le port du service que vous souhaitez joindre.
  3. Cochez la case "Proxy Target require TLS Connection" pour que la redirection soit sécurisée avec un certificat.
  4. 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.
  5. 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.