7.9 KiB
7.9 KiB
==========================================
GUIDE DE DÉPLOIEMENT SÉCURISÉ
InnotexBoard - Production Ready
==========================================
🔐 CHECKLIST DE SÉCURITÉ AVANT DÉPLOIEMENT
1. SECRETS ET CONFIGURATION
# Générer un SECRET_KEY fort
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
# Copier et configurer .env
cp .env.example .env
nano .env
# Vérifier les permissions
chmod 600 .env
chown root:root .env
OBLIGATOIRE:
- ✅ Changer SECRET_KEY
- ✅ Définir DEBUG=False
- ✅ Configurer ALLOWED_ORIGINS avec votre domaine
- ✅ Configurer ALLOWED_HOSTS
- ✅ Réduire ACCESS_TOKEN_EXPIRE_MINUTES à 60 max
2. CERTIFICATS SSL/TLS (Let's Encrypt)
# Installer Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
# Obtenir un certificat SSL GRATUIT
sudo certbot --nginx -d votre-domaine.com -d www.votre-domaine.com
# Vérifier le renouvellement automatique
sudo certbot renew --dry-run
# Générer des paramètres Diffie-Hellman (prend 5-10 min)
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
3. FIREWALL (UFW)
# Installer et activer le firewall
sudo apt install ufw -y
# Politique par défaut: bloquer tout
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Autoriser SSH (IMPORTANT: avant d'activer UFW!)
sudo ufw allow 22/tcp
# Autoriser HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Activer le firewall
sudo ufw enable
# Vérifier le statut
sudo ufw status verbose
4. FAIL2BAN - Protection contre Brute Force
# Installer Fail2Ban
sudo apt install fail2ban -y
# Créer une configuration pour InnotexBoard
sudo nano /etc/fail2ban/jail.local
Contenu de /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = admin@votre-domaine.com
sendername = Fail2Ban
[sshd]
enabled = true
port = 22
[nginx-http-auth]
enabled = true
port = http,https
[innotexboard-auth]
enabled = true
port = http,https
filter = innotexboard-auth
logpath = /var/log/innotexboard/security.log
maxretry = 3
bantime = 7200
Créer le filtre /etc/fail2ban/filter.d/innotexboard-auth.conf:
[Definition]
failregex = ^.*Failed login for '.*' from <HOST>.*$
^.*Failed authentication from <HOST>.*$
^.*Rate limit exceeded for .* from <HOST>.*$
ignoreregex =
# Redémarrer Fail2Ban
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
# Vérifier le statut
sudo fail2ban-client status
sudo fail2ban-client status innotexboard-auth
5. LOGS DE SÉCURITÉ
# Créer le répertoire des logs
sudo mkdir -p /var/log/innotexboard
sudo chown -R $USER:$USER /var/log/innotexboard
sudo chmod 750 /var/log/innotexboard
# Configurer la rotation des logs
sudo nano /etc/logrotate.d/innotexboard
Contenu de /etc/logrotate.d/innotexboard:
/var/log/innotexboard/*.log {
daily
rotate 90
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
6. NGINX - Configuration Production
# Copier la configuration SSL
sudo cp nginx-ssl.conf /etc/nginx/sites-available/innotexboard
# IMPORTANT: Éditer le fichier avec votre domaine
sudo nano /etc/nginx/sites-available/innotexboard
# Remplacer "votre-domaine.com" par votre vrai domaine
# Activer le site
sudo ln -s /etc/nginx/sites-available/innotexboard /etc/nginx/sites-enabled/
# Désactiver le site par défaut
sudo rm /etc/nginx/sites-enabled/default
# Tester la configuration
sudo nginx -t
# Redémarrer Nginx
sudo systemctl restart nginx
sudo systemctl enable nginx
7. DOCKER - Sécurisation
# Limiter l'accès au socket Docker
sudo groupadd docker
sudo usermod -aG docker $USER
sudo chmod 660 /var/run/docker.sock
# Redémarrer pour appliquer les changements
newgrp docker
# Configuration Docker daemon pour plus de sécurité
sudo nano /etc/docker/daemon.json
Contenu de /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true,
"userland-proxy": false,
"no-new-privileges": true
}
# Redémarrer Docker
sudo systemctl restart docker
8. DÉPLOIEMENT AVEC DOCKER COMPOSE
# Installer les dépendances Python
cd /home/innotex/Documents/Projet/innotexboard/backend
pip install -r requirements.txt
# Builder et démarrer les conteneurs
cd /home/innotex/Documents/Projet/innotexboard
docker-compose -f docker-compose.yml up -d --build
# Vérifier les logs
docker-compose logs -f
# Vérifier que tout fonctionne
curl -k https://localhost/health
9. MONITORING ET ALERTES
# Installer des outils de monitoring
sudo apt install htop iotop nethogs -y
# Surveiller les logs en temps réel
tail -f /var/log/innotexboard/security.log
tail -f /var/log/nginx/innotexboard-access.log
tail -f /var/log/nginx/innotexboard-error.log
# Vérifier les tentatives d'intrusion
sudo fail2ban-client status innotexboard-auth
10. BACKUPS AUTOMATIQUES
# Créer un script de backup
sudo nano /usr/local/bin/backup-innotexboard.sh
Contenu de /usr/local/bin/backup-innotexboard.sh:
#!/bin/bash
BACKUP_DIR="/var/backups/innotexboard"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Backup de la configuration
tar -czf $BACKUP_DIR/config_$DATE.tar.gz \
/home/innotex/Documents/Projet/innotexboard/.env \
/home/innotex/Docker \
/etc/nginx/sites-available/innotexboard
# Backup des logs (7 derniers jours)
tar -czf $BACKUP_DIR/logs_$DATE.tar.gz \
/var/log/innotexboard
# Nettoyer les backups > 30 jours
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
echo "Backup completed: $DATE"
# Rendre exécutable
sudo chmod +x /usr/local/bin/backup-innotexboard.sh
# Ajouter au crontab (backup quotidien à 2h du matin)
sudo crontab -e
# Ajouter: 0 2 * * * /usr/local/bin/backup-innotexboard.sh >> /var/log/innotexboard/backup.log 2>&1
🔍 TESTS DE SÉCURITÉ
Test SSL/TLS
# Tester la configuration SSL (note A+ attendue)
# Aller sur: https://www.ssllabs.com/ssltest/
Test des Headers
# Vérifier les headers de sécurité
curl -I https://votre-domaine.com
# Devrait contenir:
# - Strict-Transport-Security
# - X-Frame-Options: DENY
# - X-Content-Type-Options: nosniff
# - Content-Security-Policy
Test Rate Limiting
# Tester la protection brute force (devrait bloquer après 5 tentatives)
for i in {1..10}; do
curl -X POST https://votre-domaine.com/api/v1/auth/login \
-d "username=test&password=wrong" \
-H "Content-Type: application/x-www-form-urlencoded"
sleep 1
done
Scan de Vulnérabilités
# Installer OWASP ZAP ou utiliser:
sudo apt install nikto -y
nikto -h https://votre-domaine.com
🚨 MAINTENANCE
Mise à jour régulière
# Tous les mois
sudo apt update && sudo apt upgrade -y
sudo certbot renew
docker-compose pull
docker-compose up -d --build
# Vérifier les logs après chaque mise à jour
docker-compose logs -f
Surveiller les tentatives d'intrusion
# Voir les IPs bannies
sudo fail2ban-client status innotexboard-auth
# Débannir une IP
sudo fail2ban-client set innotexboard-auth unbanip IP_ADDRESS
📞 EN CAS DE PROBLÈME
- Vérifier les logs:
/var/log/innotexboard/security.log - Vérifier Nginx:
sudo nginx -t - Vérifier Docker:
docker-compose ps - Vérifier le firewall:
sudo ufw status - Vérifier Fail2Ban:
sudo systemctl status fail2ban
✅ CHECKLIST FINALE
- SECRET_KEY changé en production
- DEBUG=False
- Certificat SSL installé et fonctionnel
- Firewall UFW activé
- Fail2Ban configuré et actif
- Logs configurés et rotationnels
- Backups automatiques configurés
- Tests de sécurité passés (SSL Labs, headers, rate limiting)
- Monitoring en place
- Documentation d'incident préparée