Sécurité - SSL, Authentification et Bonnes Pratiques¶
Vue d'ensemble¶
Configuration de sécurité multi-couches pour protéger les services du serveur srv759970.
SSL/TLS avec Let's Encrypt¶
Certificats actifs (mai 2026)¶
Certbot gère le renouvellement automatique via systemd timer. Vérifier avec certbot certificates.
Services avec certificats actifs : dashy, docs, mail, webmail, calendar, analytics, portainer, glances, cooking, packages, jokers, audioguides, tts, stt, rag (claudito), lobehub, calatea-coaching.fr, solidarlink, incluzhact.fr, panneauxsolidaires.fr
Les certificats des services supprimés (monitoring/Grafana, whisperx, dozzle, faster-whisper, neutts, ragflow, etc.) ont expiré ou ont été révoqués. Supprimer les configs nginx stale correspondantes.
Création d'un nouveau certificat¶
certbot certonly --nginx \
-d <subdomain>.srv759970.hstgr.cloud \
--non-interactive \
--agree-tos \
-m julien@julienfernandez.xyz
Configuration SSL Nginx¶
ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
Renouvellement automatique¶
# Vérifier le timer
systemctl status certbot.timer
# Renouvellement manuel
certbot renew
# Vérifier les certificats
certbot certificates
Authentification¶
Basic Auth Nginx¶
Configuration pour services internes (dashy, portainer, glances, lobehub, mail admin).
Snippet réutilisable¶
/etc/nginx/snippets/basic-auth.conf
Gestion des credentials¶
# Ajouter/modifier un utilisateur
htpasswd /etc/nginx/.htpasswd julien
systemctl reload nginx
# Lister les utilisateurs
cat /etc/nginx/.htpasswd
Services protégés vs publics (mai 2026)¶
Protégés par Basic Auth : - Dashy (dashy.srv759970.hstgr.cloud) - Portainer (portainer.srv759970.hstgr.cloud) - Glances (glances.srv759970.hstgr.cloud) - LobeHub (lobehub.srv759970.hstgr.cloud) - Mail admin (mail.srv759970.hstgr.cloud)
Publics (pas de Basic Auth) : - MkDocs Documentation (docs.srv759970.hstgr.cloud) - Audioguides (audioguides.srv759970.hstgr.cloud) - Sites clients (calatea-coaching.fr, incluzhact.fr, solidarlink, etc.)
Pare-feu (UFW)¶
Ports ouverts¶
Logs et Audit¶
Logs Nginx¶
Logs Docker¶
Via Portainer (logs tab) ou en ligne de commande :
SSH Hardening¶
Configuration recommandée¶
Fail2ban & nftables¶
Vue d'ensemble¶
Fail2ban est installé et actif avec 6 jails. Il utilise nftables (pas iptables) comme mécanisme de ban.
Jails actifs¶
| Jail | Filter | Ports | Max Retry | Ban Time | Purpose |
|---|---|---|---|---|---|
| sshd | sshd | 22 | 5 | 10min | SSH brute-force |
| nginx-http-auth | nginx-401 | 80,443 | 5 | 1h | Nginx basic auth failures |
| opcode-auth | nginx-401 | 80,443 | 5 | 1h | 401 responses (sites protégés) |
| wordpress-auth | wordpress-auth | 80,443 | 5 | 1h | WP login brute-force |
| wordpress-hard | wordpress-hard | 80,443 | 3 | 2h | WP recon attacks |
| wordpress-xmlrpc | wordpress-xmlrpc | 80,443 | 2 | 1h | XML-RPC abuse |
ATTENTION: Le jail
opcode-authbannit les IPs qui recoivent trop de réponses 401. Accéder à un site protégé sans credentials = risque de ban !
Configuration¶
# Fichier principal
/etc/fail2ban/jail.local
# Whitelist (ignoreip)
ignoreip = 127.0.0.1/8 ::1 176.190.166.155 91.164.176.204
Commandes utiles¶
# Status
fail2ban-client status
fail2ban-client status opcode-auth
# Voir IPs bannies (nftables)
nft list set inet f2b-table addr-set-opcode-auth
# Débannir une IP
nft delete element inet f2b-table addr-set-opcode-auth { 1.2.3.4 }
fail2ban-client unban 1.2.3.4
# Ajouter à whitelist
# Éditer /etc/fail2ban/jail.local, ajouter IP à ignoreip
fail2ban-client reload
Troubleshooting: Port 443 bloqué intermittent¶
Si le site marche puis timeout après quelques minutes:
- Cause probable: IP bannie par fail2ban (trop de 401)
- Diagnostic:
nft list ruleset | grep TON_IP - Fix:
nft delete element inet f2b-table addr-set-opcode-auth { TON_IP } - Prévention: Ajouter IP à ignoreip dans jail.local
Checklist Sécurité¶
✅ Implémenté:
- Certificats SSL valides
- Renouvellement auto configuré
- Force HTTPS sur tous les services
- Basic Auth sur services sensibles
- UFW configuré
- Services internes sur 127.0.0.1
- Fail2ban installé (6 jails actifs)
- nftables comme banaction
⚠️ Recommandations:
- Configurer alertes Grafana
- Backup automatique quotidien
- Rate limiting sur API endpoints