Template:Note
Installation et configuration d'Anubis avec Nginx
Vue d'ensemble
Anubis est un Web AI Firewall qui protège vos applications web contre les bots malveillants. Ce guide détaille l'installation complète d'Anubis en frontal de Nginx avec communication par socket UNIX.
Architecture
Client → Nginx (HTTPS) → Anubis (socket UNIX) → Application backend
Prérequis
- Système Linux (RHEL 10, Debian, Ubuntu ou similaire)
- Accès root/sudo
- Nginx installé et configuré
- Application backend fonctionnelle (ex: sur port 8080)
- Certificats SSL/TLS (optionnel mais recommandé)
Installation d'Anubis
Méthode 1 : Compilation depuis les sources (RHEL/CentOS)
Étape 1 : Installer les dépendances
sudo dnf install -y git golang nodejs npm
Étape 2 : Installer esbuild globalement
sudo npm install -g esbuild
Vérifier les versions installées :
go version # go1.25.3 ou supérieur
node --version # v22.16.0 ou supérieur
npm --version # 10.9.2 ou supérieur
esbuild --version # 0.27.2 ou supérieur
Étape 3 : Cloner le dépôt Anubis
cd /opt
sudo git clone https://github.com/TecharoHQ/anubis.git
Étape 4 : Corriger les permissions
Note| Le clonage avec sudo crée des fichiers appartenant à root. Il faut corriger cela :
sudo chown -R $USER:$USER /opt/anubis
Étape 5 : Installer les dépendances npm
cd /opt/anubis
sudo npm install
Étape 6 : Générer le code et compiler
cd /opt/anubis
rm -rf bin var # Nettoyer les anciens builds
go mod download # Télécharger les dépendances Go
go generate ./... # Générer le code
go build -o var/anubis cmd/anubis/main.go # Compiler
Warning| Ces commandes doivent être exécutées sans sudo pour éviter les problèmes de permissions.
Vérifier que le binaire a été créé :
ls -l var/anubis
# Devrait afficher : -rwxr-xr-x. 1 user user 52659096 Dec 17 14:46 var/anubis
Étape 7 : Installer le binaire
sudo cp var/anubis /usr/bin/anubis
sudo chmod 755 /usr/bin/anubis
Vérifier l'installation :
/usr/bin/anubis --version
# Devrait afficher : Anubis devel
Méthode 2 : Installation via paquet .deb (Debian/Ubuntu)
sudo apt update
curl -OL https://github.com/TecharoHQ/anubis/releases/download/v1.19.1/anubis_1.19.1_linux_amd64.deb
sudo apt install ./anubis_1.19.1_linux_amd64.deb
Configuration d'Anubis
Étape 1 : Créer le répertoire de configuration
sudo mkdir -p /etc/anubis
sudo mkdir -p /run/anubis
Étape 2 : Créer le fichier de configuration principal
Créer /etc/anubis/site.env :
sudo tee /etc/anubis/site.env <<EOF
# Écoute sur socket UNIX
ANUBIS_LISTEN_ADDR=/run/anubis/site.sock
BIND_NETWORK=unix
SOCKET_MODE=0666
# Backend cible (votre application)
ANUBIS_BACKEND=http://127.0.0.1:8080
TARGET=http://127.0.0.1:8080
# Domaine du site
ANUBIS_SITE_DOMAIN=example.com
# Mode de fonctionnement
ANUBIS_MODE=proxy
# Fichier de politiques
POLICY_FNAME=/etc/anubis/site.botPolicies.yaml
# Niveau de difficulté du challenge (1-5)
DIFFICULTY=3
# Logging
LOG_LEVEL=info
# Workers
WORKERS=2
# Servir robots.txt
SERVE_ROBOTS_TXT=true
EOF
Étape 3 : Créer le fichier de politiques anti-bots
Créer /etc/anubis/site.botPolicies.yaml :
sudo tee /etc/anubis/site.botPolicies.yaml <<EOF
version: 1
policies:
- name: default
rules:
- type: allow
bot: human
- type: challenge
bot: unknown
difficulty: 3
- type: block
bot: malicious
EOF
Étape 4 : Définir les permissions
sudo chmod 644 /etc/anubis/site.env
sudo chmod 644 /etc/anubis/site.botPolicies.yaml
sudo chown -R root:root /etc/anubis
Configuration du service Systemd
Créer le fichier de service
Pour une instance unique, créer /etc/systemd/system/anubis.service :
sudo tee /etc/systemd/system/anubis.service <<EOF
[Unit]
Description=Anubis Web AI Firewall
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/anubis
ExecStart=/usr/bin/anubis
Restart=always
RestartSec=5
EnvironmentFile=/etc/anubis/site.env
[Install]
WantedBy=multi-user.target
EOF
Pour des instances multiples (plusieurs sites), créer /etc/systemd/system/anubis@.service :
sudo tee /etc/systemd/system/anubis@.service <<EOF
[Unit]
Description=Anubis Web AI Firewall - Instance %i
After=network.target
[Service]
Type=simple
User=root
Group=root
EnvironmentFile=/etc/anubis/%i.env
ExecStart=/usr/bin/anubis
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
sudo systemctl daemon-reload
sudo systemctl enable anubis
sudo systemctl start anubisPour les instances multiples :
sudo systemctl enable anubis@site
sudo systemctl start anubis@site
Vérifier le statut du service
sudo systemctl status anubis
Le service devrait afficher :
● anubis.service - Anubis Web AI Firewall
Loaded: loaded
Active: active (running)
Vérifier les logs
sudo journalctl -u anubis -f
Vérifier la création du socket
ls -l /run/anubis/site.sock
# Devrait afficher : srwxrw-rw- 1 root root 0 Dec 17 14:46 /run/anubis/site.sock
Tester Anubis directement
curl --unix-socket /run/anubis/site.sock http://anubis/
Configuration de Nginx
Étape 1 : Créer l'upstream Anubis
Créer /etc/nginx/conf.d/anubis-upstream.conf :
sudo tee /etc/nginx/conf.d/anubis-upstream.conf <<EOF
upstream anubis_backend {
server unix:/run/anubis/site.sock;
keepalive 32;
}
EOF
Étape 2 : Configurer le virtual host
Créer /etc/nginx/sites-available/example.conf (ou /etc/nginx/conf.d/example.conf sur RHEL) :
# Redirection HTTP vers HTTPS
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
# Redirection permanente vers HTTPS
return 301 https://$host$request_uri;
}
# Configuration HTTPS avec Anubis
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
# Certificats SSL/TLS
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Paramètres SSL recommandés
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers HIGH:!aNULL:!MD5;
# Headers de sécurité
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Timeouts adaptés à Anubis
proxy_read_timeout 180s;
proxy_send_timeout 180s;
proxy_connect_timeout 10s;
# Taille maximale des uploads
client_max_body_size 10M;
# Proxy vers Anubis
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_pass http://anubis_backend;
}
}
Étape 3 : Activer le site (Debian/Ubuntu)
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
Note|Sur RHEL/CentOS, le fichier dans /etc/nginx/conf.d/ est automatiquement actif.
Étape 4 : Tester et recharger Nginx
# Tester la configuration
sudo nginx -t
# Si OK, recharger Nginx
sudo systemctl reload nginx
Vérification du déploiement
1. Vérifier qu'Anubis fonctionne
sudo systemctl status anubis
sudo journalctl -u anubis -n 50
2. Vérifier le socket UNIX
ls -l /run/anubis/site.sock
sudo ss -xlp | grep anubis
3. Vérifier Nginx
sudo systemctl status nginx
sudo nginx -t
4. Test d'accès via navigateur
Ouvrir https://example.com dans un navigateur. Vous devriez :
- Voir le challenge Anubis si c'est la première visite
- Être redirigé vers votre application après validation
- Voir le header
X-Anubis-Statusdans les réponses HTTP
5. Test avec curl
# Test complet de la chaîne
curl -I https://example.com
# Devrait retourner un code 200 ou le challenge Anubis
6. Vérifier les logs en temps réel
# Logs Anubis
sudo journalctl -u anubis -f
# Logs Nginx
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Flux des requêtes
1. Client HTTPS → Nginx (port 443) 2. Nginx → Anubis (socket UNIX) 3. Anubis analyse la requête : - Fingerprint du client - Headers HTTP - Comportement 4. Anubis décide : - Challenge JS → Client doit résoudre - Allow → Passe au backend - Block → Requête bloquée 5. Backend traite la requête légitime 6. Backend → Anubis → Nginx → Client
Dépannage
Le service Anubis ne démarre pas
# Vérifier les logs
sudo journalctl -u anubis -xe
# Vérifier la configuration
cat /etc/anubis/site.env
# Vérifier les permissions
ls -l /usr/bin/anubis
ls -ld /run/anubis
Le socket n'est pas créé
# Vérifier que le répertoire existe
sudo mkdir -p /run/anubis
# Vérifier les permissions
sudo chmod 755 /run/anubis
# Redémarrer Anubis
sudo systemctl restart anubis
Nginx ne peut pas se connecter au socket
# Vérifier les permissions du socket
ls -l /run/anubis/site.sock
# Ajuster SOCKET_MODE dans site.env
SOCKET_MODE=0666
# Redémarrer Anubis
sudo systemctl restart anubis
Erreur "permission denied" lors de la compilation
# Corriger la propriété des fichiers
sudo chown -R $USER:$USER /opt/anubis
# Nettoyer et recompiler
cd /opt/anubis
rm -rf bin var
go generate ./...
go build -o var/anubis cmd/anubis/main.go
Erreur "esbuild: command not found"
# Réinstaller esbuild
sudo npm install -g esbuild
# Vérifier l'installation
which esbuild
esbuild --version
Optimisations recommandées
1. Cache Anubis
Ajouter dans /etc/anubis/site.env :
CACHE_SIZE=50000
CACHE_TTL=300
2. Rate limiting
RATE_LIMIT_MODE=smart
FIREWALL_MODE=strict
3. Nginx keepalive
Dans anubis-upstream.conf :
upstream anubis_backend {
server unix:/run/anubis/site.sock;
keepalive 64;
keepalive_requests 1000;
keepalive_timeout 60s;
}
4. Logs structurés
LOG_LEVEL=info
LOG_FORMAT=json
Maintenance
Redémarrer Anubis
sudo systemctl restart anubis
Recharger la configuration sans interruption
# Éditer la configuration
sudo nano /etc/anubis/site.env
# Redémarrer le service
sudo systemctl restart anubis
Mettre à jour Anubis
# Arrêter le service
sudo systemctl stop anubis
# Compiler la nouvelle version
cd /opt/anubis
git pull
rm -rf bin var
go generate ./...
go build -o var/anubis cmd/anubis/main.go
# Installer le nouveau binaire
sudo cp var/anubis /usr/bin/anubis
sudo chmod 755 /usr/bin/anubis
# Redémarrer
sudo systemctl start anubis
Sauvegarder la configuration
sudo tar czf anubis-config-backup-$(date +%Y%m%d).tar.gz /etc/anubis/
Sécurité
Durcissement du service
Éditer /etc/systemd/system/anubis.service et ajouter :
[Service]
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/run/anubis
Firewall
# Bloquer l'accès direct au backend
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="8080" protocol="tcp" reject'
sudo firewall-cmd --reload
# Ou avec iptables
sudo iptables -A INPUT -p tcp --dport 8080 -s 127.0.0.1 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
Instances multiples
Pour gérer plusieurs sites avec Anubis :
1. Créer des configurations séparées
sudo cp /etc/anubis/site.env /etc/anubis/site2.env
sudo cp /etc/anubis/site.botPolicies.yaml /etc/anubis/site2.botPolicies.yaml
2. Modifier les configurations
Éditer /etc/anubis/site2.env :
ANUBIS_LISTEN_ADDR=/run/anubis/site2.sock
ANUBIS_BACKEND=http://127.0.0.1:8081
ANUBIS_SITE_DOMAIN=example2.com
3. Démarrer l'instance
sudo systemctl enable anubis@site2
sudo systemctl start anubis@site2
4. Créer l'upstream Nginx correspondant
upstream anubis_site2 {
server unix:/run/anubis/site2.sock;
}
Monitoring
Métriques Anubis
Anubis expose des métriques (si configuré) :
# Dans site.env
METRICS_ENABLED=true
METRICS_ADDR=127.0.0.1:9090
Monitoring avec Prometheus
scrape_configs:
- job_name: 'anubis'
static_configs:
- targets: ['localhost:9090']
Références
Résumé des commandes
# Installation
cd /opt
sudo git clone https://github.com/TecharoHQ/anubis.git
sudo chown -R $USER:$USER /opt/anubis
cd /opt/anubis
sudo npm install -g esbuild
go generate ./...
go build -o var/anubis cmd/anubis/main.go
sudo cp var/anubis /usr/bin/anubis
# Configuration
sudo mkdir -p /etc/anubis /run/anubis
sudo nano /etc/anubis/site.env
sudo nano /etc/anubis/site.botPolicies.yaml
# Service
sudo systemctl daemon-reload
sudo systemctl enable --now anubis
sudo systemctl status anubis
# Nginx
sudo nginx -t
sudo systemctl reload nginx
# Vérification
curl --unix-socket /run/anubis/site.sock http://anubis/
curl -I https://example.com
