# API ClamAV - Antivirus pour Certificator API de scan antivirus utilisant ClamAV pour vérifier les fichiers avant traitement. ## Port **Port fixe : 3023** Le port est défini de manière fixe dans le code et ne peut pas être modifié. ## Domaine - **Production :** `antivir.certificator.4nkweb.com` ## Installation ### Prérequis 1. ClamAV doit être installé et configuré sur le serveur 2. Le daemon ClamAV (`clamd`) doit être en cours d'exécution sur le port 3310 (par défaut) ### Installation des dépendances ```bash cd api-clamav npm install ``` ### Configuration Créer un fichier `.env` (optionnel) : ```env CLAMAV_HOST=localhost CLAMAV_PORT=3310 CLAMAV_TIMEOUT=30000 LOG_LEVEL=info NODE_ENV=production ``` ## Démarrage ### Manuel ```bash ./start.sh ``` ### Service systemd ```bash sudo cp clamav-api.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable clamav-api sudo systemctl start clamav-api ``` Vérifier le statut : ```bash sudo systemctl status clamav-api ``` ## API Endpoints ### GET /health Vérifie l'état de santé de l'API. **Réponse :** ```json { "ok": true, "service": "clamav-api", "version": "1.0.0", "timestamp": "2026-01-24T12:00:00.000Z" } ``` ### POST /api/scan/buffer Scanne un buffer de données (base64) pour détecter les virus. **Body :** ```json { "data": "base64_encoded_data", "filename": "document.pdf" // optionnel } ``` **Réponse (fichier propre) :** ```json { "clean": true, "infected": false, "viruses": [], "filename": "document.pdf", "size": 12345 } ``` **Réponse (fichier infecté) :** ```json { "clean": false, "infected": true, "viruses": ["Trojan.Example"], "filename": "document.pdf", "size": 12345 } ``` **Codes de statut :** - `200` : Scan réussi (fichier propre ou infecté) - `400` : Requête invalide - `503` : Service ClamAV indisponible - `500` : Erreur interne ## Intégration Cette API est utilisée par : - `api-filigrane` : Scan des fichiers avant traitement - `api-anchorage` : (si nécessaire dans le futur) ## Mode dégradé Si ClamAV n'est pas disponible, l'API retourne une erreur 503. Les services qui utilisent cette API peuvent choisir de continuer en mode dégradé (comme `api-filigrane`) ou de rejeter la requête. ## Sécurité - Le service systemd utilise `NoNewPrivileges=true` et `PrivateTmp=true` - Les fichiers sont scannés en mémoire (pas de fichiers temporaires sur disque) - Limite de taille : 100MB par défaut ## Logs Les logs sont envoyés vers `journald` via le service systemd : ```bash sudo journalctl -u clamav-api -f ``` ## Auteur Équipe 4NK