Template:Note

From Nasqueron Agora

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 anubis

Pour 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 :

  1. Voir le challenge Anubis si c'est la première visite
  2. Être redirigé vers votre application après validation
  3. Voir le header X-Anubis-Status dans 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