Sécurité du VPS
Sécurité du VPS
Ce document décrit les mesures de sécurité appliquées sur le VPS de production.
Pare-feu (ufw)
Seuls trois ports sont autorisés en entrée, tous les autres sont bloqués par défaut.
| Port | Protocole | Usage |
|---|---|---|
22 | TCP | SSH |
80 | TCP | HTTP (redirigé vers HTTPS par Traefik) |
443 | TCP | HTTPS |
# Vérifier l'état du pare-feu
sudo ufw status verbose
# En cas de réinstallation
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
Protection brute-force SSH (fail2ban)
fail2ban surveille les tentatives de connexion SSH et bannit automatiquement les IP suspectes.
| Paramètre | Valeur |
|---|---|
| Tentatives avant ban | 5 |
| Fenêtre d'observation | 10 minutes |
| Durée initiale du ban | 1 heure |
| Récidive | Durée × 2 à chaque ban |
# Vérifier les IP bannies
sudo fail2ban-client status sshd
# Débannir une IP manuellement
sudo fail2ban-client set sshd unbanip <IP>
# Voir les logs
sudo journalctl -u fail2ban -f
La configuration est dans /etc/fail2ban/jail.d/sshd.local.
Durcissement SSH
Configuration appliquée dans /etc/ssh/sshd_config.d/99-hardening.conf :
| Directive | Valeur | Raison |
|---|---|---|
PermitRootLogin | no | Login root direct interdit |
PasswordAuthentication | no | Authentification par clé uniquement |
MaxAuthTries | 3 | Maximum 3 tentatives par connexion |
LoginGraceTime | 20 | Fenêtre d'authentification limitée à 20s |
X11Forwarding | no | Inutile sur un serveur |
AllowAgentForwarding | no | Pas de forwarding d'agent SSH |
AllowTcpForwarding | no | Pas de tunnel TCP via SSH |
~/.ssh/authorized_keys avant de modifier cette config.# Vérifier la config SSH sans redémarrer
sudo sshd -t
# Recharger après modification
sudo systemctl reload ssh
Sécurité Docker
Ports exposés
Aucun service applicatif n'est exposé directement sur l'hôte. Tout le trafic transite par Traefik.
| Service | Réseau | Ports hôte |
|---|---|---|
traefik | web | 80, 443 |
back-prod | web + internal | aucun |
front-prod | web | aucun |
doc-prod | web | aucun |
database-prod | internal | aucun |
Segmentation réseau
Deux réseaux Docker sont utilisés :
web— réseau partagé entre Traefik et les services qui doivent être accessibles publiquementinternal— réseau isolé (internal: true), sans accès internet, pour la base de données
Dashboard Traefik
Le dashboard Traefik est désactivé en production. Les options --api.dashboard et --api.insecure ne doivent pas figurer dans la configuration.
Mises à jour automatiques
unattended-upgrades est actif et applique automatiquement les correctifs de sécurité du système.
# Vérifier l'état
systemctl status unattended-upgrades
# Voir l'historique des mises à jour
cat /var/log/unattended-upgrades/unattended-upgrades.log