# Setup VPS rapide Configuration sécurisée d'un VPS en 30-45 minutes. **Vous voulez comprendre en détail ?** → [vps-setup-complet.md](vps-setup-complet.md) --- ## 🎯 Vue d'ensemble ``` 1. Connexion SSH (5 min) 2. Mises à jour (5 min) 3. Utilisateur (5 min) - Type A uniquement 4. Clés SSH (10 min) 5. Sécuriser SSH (5 min) 6. Pare-feu UFW (5 min) 7. Fail2ban (5 min) 8. Mises à jour auto (5 min) 9. Apache (5 min) 10. SSL (Let's Encrypt) (5 min) ──────────────────────────────── Total: 30-50 min ``` --- ## Prérequis - VPS avec IP publique - Terminal (macOS/Linux) - [Vim basics](linux-essentials/vim-guide-essentiel.md) : `i` pour éditer, `Esc :wq` pour sauvegarder **Types d'accès :** - **Type A** (OVH, Hetzner) : accès `root` direct - **Type B** (Infomaniak) : utilisateur `debian`/`ubuntu` avec sudo → **Sautez étape 3** --- ## 1. Première connexion (5 min) ```bash # Type A ssh root@IP-DU-VPS # Type B ssh debian@IP-DU-VPS # ou ubuntu, admin selon l'hébergeur ``` **Type A seulement - Changer le mot de passe root :** ```bash passwd # Mot de passe fort (20+ caractères) ``` --- ## 2. Mises à jour (5 min) ```bash # Type A apt update && apt upgrade -y && apt autoremove -y # Type B sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y ``` --- ## 3. Créer un utilisateur (5 min) **⚠️ Type B : SAUTEZ cette étape** **Type A uniquement :** ```bash # Créer l'utilisateur (remplacez "monuser") adduser monuser # Ajouter au groupe sudo usermod -aG sudo monuser # Vérifier groups monuser # Doit afficher : monuser sudo ``` --- ## 4. Clés SSH (10 min) **Sur votre machine locale :** ```bash # Vérifier si vous avez déjà une clé ls ~/.ssh/id_*.pub # Si non, créer une clé ssh-keygen -t ed25519 -C "votre-email@example.com" # Appuyez sur Entrée 3 fois # Afficher la clé cat ~/.ssh/id_ed25519.pub # Copiez la ligne complète ``` **Sur le VPS :** ```bash # Type A - passer à votre utilisateur su - monuser # Type B - déjà votre utilisateur # Créer le dossier .ssh mkdir -p ~/.ssh && chmod 700 ~/.ssh # Ajouter la clé vim ~/.ssh/authorized_keys # Appuyez sur 'i', collez la clé, Esc puis :wq # Droits chmod 600 ~/.ssh/authorized_keys # Type A - retour à root exit ``` **Tester (nouveau terminal) :** ```bash ssh monuser@IP-DU-VPS # Doit marcher SANS mot de passe ``` --- ## 5. Sécuriser SSH (5 min) ```bash # Éditer la config # Type A vim /etc/ssh/sshd_config # Type B sudo vim /etc/ssh/sshd_config ``` **Modifier ces lignes :** ``` PermitRootLogin no PasswordAuthentication no ``` **Redémarrer SSH :** ```bash # Type A systemctl restart sshd # Type B sudo systemctl restart sshd ``` **⚠️ IMPORTANT : Tester dans un NOUVEAU terminal avant de fermer l'ancien !** ```bash ssh monuser@IP-DU-VPS # Doit marcher ``` --- ## 6. Pare-feu UFW (5 min) ```bash # Type A (root) apt install ufw -y 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 enable sudo ufw status verbose # Type B (utilisateur sudo) sudo apt install ufw -y 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 enable sudo ufw status verbose ``` **💡 Note :** `ufw` nécessite toujours `sudo` (même en root) car il est dans `/usr/sbin/` --- ## 7. Fail2ban (5 min) ```bash # Installer # Type A apt install fail2ban -y # Type B sudo apt install fail2ban -y # Configuration minimale # Type A cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local vim /etc/fail2ban/jail.local # Type B sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo vim /etc/fail2ban/jail.local ``` **Dans le fichier, trouver et vérifier :** ```ini [DEFAULT] bantime = 600 findtime = 600 maxretry = 5 [sshd] enabled = true ``` **Démarrer :** ```bash # Type A systemctl start fail2ban systemctl enable fail2ban fail2ban-client status # Type B sudo systemctl start fail2ban sudo systemctl enable fail2ban sudo fail2ban-client status ``` --- ## 8. Mises à jour automatiques (5 min) ```bash # Installer # Type A apt install unattended-upgrades -y dpkg-reconfigure -plow unattended-upgrades # Type B sudo apt install unattended-upgrades -y sudo dpkg-reconfigure -plow unattended-upgrades # Sélectionnez "Oui" ``` --- ## 9. Apache (5 min) ```bash # Installer # Type A apt install apache2 -y systemctl start apache2 systemctl enable apache2 # Type B sudo apt install apache2 -y sudo systemctl start apache2 sudo systemctl enable apache2 ``` **Tester :** - Allez sur `http://IP-DU-VPS` dans votre navigateur - Vous devriez voir "Apache2 Debian Default Page" --- ## 10. Configurer un site (10 min) ### DNS Chez votre registrar : ``` Type Nom Valeur A @ IP-DU-VPS A www IP-DU-VPS ``` Attendre 5-30 min, puis vérifier : ```bash nslookup monsite.com # Doit retourner votre IP ``` ### VirtualHost Apache ```bash # Créer le dossier # Type A mkdir -p /var/www/monsite.com chown -R monuser:monuser /var/www/monsite.com echo "

Ça marche !

" > /var/www/monsite.com/index.html # Type B (remplacez debian par votre user) sudo mkdir -p /var/www/monsite.com sudo chown -R debian:debian /var/www/monsite.com echo "

Ça marche !

" > /var/www/monsite.com/index.html # Créer le VirtualHost # Type A vim /etc/apache2/sites-available/monsite.com.conf # Type B sudo vim /etc/apache2/sites-available/monsite.com.conf ``` **Contenu du fichier :** ```apache ServerName monsite.com ServerAlias www.monsite.com DocumentRoot /var/www/monsite.com Options -Indexes +FollowSymLinks AllowOverride All Require all granted ErrorLog ${APACHE_LOG_DIR}/monsite.com_error.log CustomLog ${APACHE_LOG_DIR}/monsite.com_access.log combined ``` **Activer le site :** ```bash # Type A a2enmod rewrite a2ensite monsite.com.conf a2dissite 000-default.conf apache2ctl configtest # Doit dire "Syntax OK" systemctl reload apache2 # Type B sudo a2enmod rewrite sudo a2ensite monsite.com.conf sudo a2dissite 000-default.conf sudo apache2ctl configtest sudo systemctl reload apache2 ``` **Tester :** - Allez sur `http://monsite.com` - Vous devriez voir "Ça marche !" --- ## 11. SSL (Let's Encrypt) (5 min) ```bash # Installer Certbot # Type A apt install certbot python3-certbot-apache -y certbot --apache -d monsite.com -d www.monsite.com # Type B sudo apt install certbot python3-certbot-apache -y sudo certbot --apache -d monsite.com -d www.monsite.com # Répondre aux questions : # Email : votre-email@example.com # Terms : (A)gree # Redirect : 2 (forcer HTTPS) ``` **Tester :** - Allez sur `http://monsite.com` → redirige vers `https://monsite.com` 🔒 --- ## ✅ Checklist finale - [ ] Connexion SSH par clé fonctionne - [ ] Mot de passe SSH désactivé - [ ] Root SSH désactivé - [ ] UFW actif (ports 22, 80, 443) - [ ] Fail2ban actif - [ ] Apache fonctionne - [ ] Site accessible en HTTP - [ ] SSL installé et HTTPS fonctionne - [ ] Redirection HTTP → HTTPS active --- ## 🚀 Prochaines étapes ### Déployer votre site - **Kirby CMS** → [kirby-vps-deploy.md](kirby-vps-deploy.md) - **Autre site statique** → Utilisez rsync : ```bash rsync -avhP ./mon-site/ user@IP:/var/www/monsite.com/ ``` ### Maintenance de base ```bash # Voir les logs Apache sudo tail -f /var/log/apache2/monsite.com_error.log # Voir les IPs bannies par Fail2ban sudo fail2ban-client status sshd # Espace disque df -h # Mettre à jour sudo apt update && sudo apt upgrade -y ``` --- ## 📚 Pour aller plus loin - **Guide complet** → [vps-setup-complet.md](vps-setup-complet.md) - **Vim** → [vim-guide-essentiel.md](linux-essentials/vim-guide-essentiel.md) - **Diagnostic** → [diagnostic-espace-disque.md](linux-essentials/diagnostic-espace-disque.md) --- ## Commandes de référence rapide ```bash # SSH ssh user@host ssh -i ~/.ssh/cle user@host # UFW sudo ufw status sudo ufw allow 8080/tcp sudo ufw delete 3 # Fail2ban sudo fail2ban-client status sudo fail2ban-client status sshd sudo fail2ban-client set sshd unbanip IP # Apache sudo systemctl status apache2 sudo systemctl reload apache2 sudo apache2ctl configtest sudo a2ensite site.conf sudo a2dissite site.conf # Certbot sudo certbot certificates sudo certbot renew --dry-run # Logs sudo tail -f /var/log/apache2/error.log sudo journalctl -u apache2 -n 50 # Système df -h du -sh /var/www/* systemctl list-units --type=service --state=running ``` --- **Temps total :** 30-50 minutes pour un VPS sécurisé et fonctionnel ! 🎉