docs: audit securite reseau NAS 03/07/2026
This commit is contained in:
parent
646049031c
commit
754b235c5c
|
|
@ -0,0 +1,33 @@
|
|||
# Audit exposition reseau NAS DS920+ — 03/07/2026
|
||||
|
||||
Audit complet de la surface WAN et de la chaine de defense (firewall DSM, CrowdSec, wg-easy, reverse-proxy). Methode : etat REEL (socket Docker, scan de l'IP publique 41.62.94.25, iptables/ipset hote, config firewall DSM) vs registre declare — le registre etait partiellement perime.
|
||||
|
||||
## Etat de la surface WAN (verifie)
|
||||
Seuls **4 ports TCP ouverts au WAN** : 80, 222 (ssh), 443, 8080. Tous les ports applicatifs (3232, 5678, 9000, 3010/3020/3030...) sont filtres. Le vrai gardien n'est PAS le firewall DSM mais le **port-forwarding de la box** qui ne forwarde que ces 4 ports.
|
||||
|
||||
## CrowdSec — fonctionne mais partiellement aveugle
|
||||
- Chaine iptables active, **3,5M paquets DROP (1,35 Go)**, ipset peuple, bans temps-reel confirmes (ssh-bf, CVE, sensitive-files).
|
||||
- Bouncer firewall (custom /sync.sh, ipset crowdsec-blacklists-0) en network_mode host + NET_ADMIN → applique bien au niveau hote.
|
||||
- Acquisition : auth.log OK + nginx/error.log OK (39k lignes, detecte CVE/backdoors).
|
||||
- **TROU : /var/log/nginx/access.log ABSENT** — DSM ne genere aucun access_log sur ses vhosts reverse-proxy. Le montage /var/log (hote→container RO) est correct ; c'est la SOURCE qui n'existe pas. Consequence : le brute-force applicatif REUSSI et l'enumeration lente en 200 passent sous le radar. error.log couvre ~90% (scans, CVE).
|
||||
|
||||
## Faille firewall DSM (laten te) — regle ALLOW avant DENY
|
||||
Firewall actif (profil "Nabil Derouiche Firewall"). Regles evaluees dans l'ordre, 1re match gagne.
|
||||
- **Regle [6] ALLOW mondial** liste `ssh, telnet, cifs, MariaDB10, iscsitrg...` — placee AVANT la **regle [10] DENY mondial** qui liste les MEMES services → **le DENY est neutralise**. SSH 222 est donc autorise MONDIALEMENT (pas juste geo-TN via regle [9] ipList=['TN']).
|
||||
- Autres ALLOW mondiaux trop larges : [1] Pingvin, [12] 5900-5999 (VNC), [14] 5055, [15] 3004. Tous filtres par la box aujourd'hui, mais exposition immediate si un forward est ajoute.
|
||||
|
||||
## Corrige pendant l'audit
|
||||
1. **Bifrost retire du reverse-proxy WAN** (Nabil) — bifrost.bolbol.tn repondait 200 sans auth sur /api/providers, /api/config, /v1/models. Verifie ferme (000). Completion restait protegee (401 x-bf-vk requis), cles non fuitees en clair. Acces interne intact.
|
||||
2. **Mot de passe UI wg-easy renforce** (8 → 28 car alphanum). wg-easy v13 (PASSWORD en clair, pas de hash). Backup docker-compose.yml.bak_<ts>. Recreate → wg0 UP, 3 peers preserves (volume /etc/wireguard non affecte par le password UI), UI 200. Commit+push bolbol/wg-easy.
|
||||
|
||||
## Reste a faire (actions box + panneau DSM — hors portee mcp-nas)
|
||||
- **P1 SSH 222** : retirer le port-forward 222 de la box (acces SSH via WireGuard uniquement) = elimination. Complement : retirer ssh/telnet de la regle firewall ALLOW [6] via panneau DSM pour que [10] DENY s'applique.
|
||||
- **P2 Redirect HTTP→HTTPS** : le toggle DSM global ne couvre PAS les vhosts reverse-proxy (blocks listen 80 font proxy_pass $backend en clair). Solution simple et robuste : retirer le forward du port 80 sur la box (seul 443 expose). server.ReverseProxy.conf est regenere par DSM → ne pas editer a la main.
|
||||
- **P3 access.log CrowdSec** : necessite activer access_log au niveau reverse-proxy DSM (regenere, fragile). Gain marginal vs error.log deja parse. A trancher.
|
||||
- **P4 hygiene** : pihole admin (3001) et prompt-studio (8090) en 0.0.0.0 (LAN-only, pas WAN). Registre ports a resynchroniser (liste des services perimes + pihole/prompt-studio/hermes-mail-proxy manquants).
|
||||
|
||||
## CE QUI NE MARCHE PAS / pieges
|
||||
- **Toggle DSM "rediriger HTTP vers HTTPS" ne s'applique qu'a l'interface DSM (5000→5001), pas aux entrees reverse-proxy applicatives** — verifie : gitea.bolbol.tn repond toujours 200 en http apres activation.
|
||||
- **mcp-nas n'a PAS le binaire docker** (/usr/local/bin/docker absent) ni iptables — piloter Docker depuis mcp-nas = via socket unix /var/run/docker.sock (API HTTP) uniquement. En revanche **l'HOTE a docker+compose (v2.20.1) ET git (2.39.1)** accessibles en SSH Best0f (chemin absolu /usr/local/bin/docker, groupe docker gid 65538, pas de sudo pour docker).
|
||||
- **Regle firewall [9]** : ipList=['TN'] = geo-filtrage Tunisie (rate au 1er parse car champ hors ipList standard).
|
||||
- Push Gitea depuis un clone hote : remote sans creds → utiliser http://bolbol:PWD@192.168.100.33:3232/bolbol/REPO.git main.
|
||||
Loading…
Reference in New Issue