Cours RechercherCtrl K

Fiches de révision

Fiches Sécuriser un serveur

7 fiches, une par leçon, dans l'ordre du cours. Retour au cours Sécuriser un serveur

Sécuriser un serveur · Leçon 1

Le pare-feu

À retenir

  • Un pare-feu refuse tout ce qui n'est pas autorisé : on ferme tout, puis on ouvre 22, 80 et 443.
  • sudo ufw default deny incoming, sudo ufw allow 22/tcp, sudo ufw enable.
  • Autoriser SSH avant d'activer le pare-feu, sinon on se coupe l'accès.
  • Règle depuis une seule adresse : sudo ufw allow from IP to any port 22.
  • Une base de données ne s'ouvre jamais sur Internet.

Mémo

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
sudo ufw status numbered
sudo ufw delete 2

Pièges à éviter

  • Activer ufw avant d'avoir autorisé le port 22 : connexion SSH coupée.
  • Supprimer l'ancienne règle SSH avant d'avoir ajouté la nouvelle.
  • Croire que ufw bloque les ports publiés par Docker : Docker passe avant.

Revoir la leçon et ses exercices

Sécuriser un serveur · Leçon 2

Se connecter avec une clé SSH

À retenir

  • La clé privée ne quitte jamais ton ordinateur ; la clé publique (.pub) va dans ~/.ssh/authorized_keys du serveur.
  • ssh-keygen -t ed25519 -C "moi@pc", puis ssh-copy-id utilisateur@serveur.
  • Ses réglages dans un fichier à soi : /etc/ssh/sshd_config.d/10-securite.conf.
  • PasswordAuthentication no et PermitRootLogin no, une fois la clé testée.
  • Toujours sudo sshd -t avant sudo systemctl reload ssh, et garder une session ouverte.

Mémo

ssh-keygen -t ed25519 -C "moi@pc"
ssh-copy-id eleve@serveur
echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf
echo "PermitRootLogin no" | sudo tee -a /etc/ssh/sshd_config.d/10-securite.conf
sudo sshd -t
sudo sshd -T | grep passwordauthentication
sudo systemctl reload ssh

Pièges à éviter

  • Envoyer ou copier la clé privée (le fichier sans .pub).
  • sudo echo … > /etc/… : la redirection n'a pas les droits. Utilise | sudo tee.
  • Désactiver les mots de passe avant d'avoir testé la connexion par clé.
  • Oublier -a à tee et écraser les lignes précédentes.

Revoir la leçon et ses exercices

Sécuriser un serveur · Leçon 3

La double authentification

À retenir

  • A2F : deux preuves différentes, par exemple la clé SSH et un code du téléphone.
  • Un code TOTP se calcule à partir d'un secret partagé (le QR code) et de l'heure ; il change toutes les 30 secondes.
  • google-authenticator se lance en ton nom ; les codes de secours se rangent hors du serveur.
  • PAM : auth required pam_google_authenticator.so dans /etc/pam.d/sshd.
  • SSH : KbdInteractiveAuthentication yes et AuthenticationMethods publickey,keyboard-interactive (virgule = les deux).

Mémo

sudo apt install libpam-google-authenticator
google-authenticator
echo "auth required pam_google_authenticator.so" | sudo tee -a /etc/pam.d/sshd
echo "KbdInteractiveAuthentication yes" | sudo tee /etc/ssh/sshd_config.d/00-a2f.conf
echo "AuthenticationMethods publickey,keyboard-interactive" | sudo tee -a /etc/ssh/sshd_config.d/00-a2f.conf
sudo sshd -t
sudo systemctl reload ssh

Pièges à éviter

  • Un espace au lieu d'une virgule dans AuthenticationMethods : une seule méthode suffit alors.
  • Oublier -a à tee sur /etc/pam.d/sshd : tout le fichier PAM est écrasé.
  • Une horloge du serveur décalée : tous les codes sont refusés.
  • Perdre son téléphone sans avoir gardé les codes de secours.

Revoir la leçon et ses exercices

Sécuriser un serveur · Leçon 4

Bloquer les attaques avec CrowdSec

À retenir

  • L'agent CrowdSec lit les journaux et décide ; le bouncer applique les blocages.
  • Sans bouncer, rien n'est bloqué : sudo cscli bouncers list pour vérifier.
  • sudo cscli decisions list / add --ip … --duration … / delete --ip ….
  • Une liste blanche évite de se bannir soi-même.
  • Les collections disent quoi surveiller : linux, sshd, nginx, caddy…

Mémo

sudo apt install crowdsec crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
sudo cscli collections install crowdsecurity/nginx
sudo cscli decisions list
sudo cscli decisions add --ip 192.0.2.66 --duration 24h --reason "scan"
sudo cscli decisions delete --ip 192.0.2.66
sudo cscli allowlists create perso -d "Mes adresses"
sudo cscli allowlists add perso 198.51.100.10

Pièges à éviter

  • Installer l'agent sans le bouncer : les attaques sont vues, mais pas bloquées.
  • Oublier sa propre adresse dans la liste blanche, et se bannir à la première faute de frappe.
  • Installer une collection sans recharger CrowdSec (sudo systemctl reload crowdsec).

Revoir la leçon et ses exercices

Sécuriser un serveur · Leçon 5

Mises à jour et sauvegardes

À retenir

  • unattended-upgrades installe chaque jour les correctifs de sécurité de Debian.
  • Activation : sudo dpkg-reconfigure -plow unattended-upgrades ; essai : sudo unattended-upgrade --dry-run.
  • Règle 3-2-1 : 3 copies, 2 supports, 1 hors du serveur.
  • tar -czf crée, tar -tzf liste, tar -xzf … -C dossier extrait.
  • cron : minute heure jour mois jour-semaine utilisateur commande dans /etc/cron.d/.

Mémo

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
sudo unattended-upgrade --dry-run
sudo tar -czf /var/backups/site.tar.gz /var/www/monsite
tar -tzf /var/backups/site.tar.gz
sudo chmod 600 /var/backups/site.tar.gz
# /etc/cron.d/sauvegarde
30 23 * * * root tar -czf /var/backups/site.tar.gz /var/www/monsite

Pièges à éviter

  • Garder toutes les sauvegardes sur le serveur lui-même : s'il disparaît, elles aussi.
  • Une archive lisible par tous alors qu'elle contient des mots de passe.
  • Ne jamais vérifier qu'une sauvegarde se relit.
  • Oublier la colonne utilisateur dans un fichier de /etc/cron.d/.

Revoir la leçon et ses exercices

Sécuriser un serveur · Leçon 6

Surveiller son serveur

À retenir

  • /var/log/auth.log contient toutes les connexions ; il se lit avec sudo.
  • « Failed password » et « Invalid user » : des robots, c'est normal. « Accepted » d'une adresse inconnue : alerte !
  • last : les dernières connexions ; sudo ss -tlnp : ce qui écoute.
  • df -h, free -h, uptime, systemctl --failed : la santé.
  • Automatiser : un script qui vérifie et prévient par e-mail.

Mémo

sudo grep "Failed password" /var/log/auth.log
sudo grep -c "Failed password" /var/log/auth.log
sudo grep "Accepted" /var/log/auth.log
last
journalctl -u ssh -n 30
sudo ss -tlnp
df -h
free -h
systemctl --failed

Pièges à éviter

  • Paniquer devant des milliers d'échecs… et ne jamais regarder les réussites.
  • Oublier sudo : « Permission non accordée » sur auth.log.
  • Laisser le disque se remplir : à 100 %, plus rien ne s'écrit, ni journaux ni base de données.

Revoir la leçon et ses exercices

Sécuriser un serveur · Défi final

Sécuriser un serveur tout neuf

À retenir

  • Ordre sûr : autoriser SSH, puis activer le pare-feu ; installer la clé, puis couper les mots de passe.
  • Toujours sudo sshd -t avant de recharger SSH, et une session de secours ouverte.
  • CrowdSec = agent + bouncer, et une liste blanche pour soi.
  • Correctifs automatiques avec unattended-upgrades, sauvegarde nocturne avec cron, copie hors du serveur.

Mémo

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable
ssh-copy-id eleve@serveur
echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf
sudo sshd -t && sudo systemctl reload ssh
sudo apt install crowdsec crowdsec-firewall-bouncer-iptables unattended-upgrades

Pièges à éviter

  • Activer le pare-feu ou couper les mots de passe avant d'avoir un autre moyen d'entrer.
  • Installer CrowdSec sans bouncer.
  • Des sauvegardes uniquement sur le serveur lui-même.

Revoir la leçon et ses exercices