🔒Sécurisation de base du serveur Debian.

Sécurisation et mise en place du serveur debain :

Ce que j’ai fait

1. Création d’un utilisateur non-root

Pourquoi ? Root ayant les permissions absolu est une menace en cas de faille de sécurité.

J’ai créé un utilisateur avec les droits sudo, puis j’ai désactivé la connexion root.

# Créer un nouvelle utilisateur
adduser matheo 

# Donne les permissions sudo a l'utilisateur
usermod -aG sudo matheo 

# affiche les groups d'un utilisateur
groups matheo

✅Résultat attendu : 
matheo : matheo sudo

Une fois l’utilisateur créer je me connecte en ssh avec et je désactive la possibilité de se connecter avec root.

sudo nano /etc/ssh/sshd_config

-> PermitRootLogin no

2. Authentification par clé SSH Ed25519

J’ai remplacé l’authentification par mot de passe par une paire de clés ssh pour plus de sécurité et pouvoir mieux se protéger des bots.
En quoi c’est plus sécurisé ?
Les bots essaye de se connecter avec un mot de passe hors avec une clé Ed25519 lors de la connexion la clé en question doit être présente et identique sur la machine et le serveur + une passe phrase en guise de mot de passe.

# Générer la paire de clés dans POWERSHELL
ssh-keygen -t ed25519 -C "matheo@portfolio" -f "$env:USERPROFILE\.ssh\id_ed25519_srv"

✅Résultat attendu : 

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): ********
Your identification has been saved in C:\Users\Matheo\.ssh\id_ed25519_srv
Your public key has been saved in C:\Users\Matheo\.ssh\id_ed25519_srv.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx matheo@IP_SERVEUR

2 clés sont alors généré, une a garder sur sa machine

-> id_ed25519_srv

Et une clé qui elle sera copié sur le serveur.
-> id_ed25519_srv.pub

Une fois fait j’ai du préparer le répertoire sur le serveur qui allait accueillir ma clé

# Création du dossier
mkdir -p /home/matheo/.ssh 

# Création du fichier qui aura les clés autorisé
touch /home/matheo/.ssh/authorized_keys

une fois le terrain préparé je peux envoyé ma clé .pub sur le serveur.

# Envoyer la clé publique vers le serveur
scp "$env:USERPROFILE\.ssh\id_ed25519_srv.pub" matheo@IP_SERVEUR:/home/matheo/.ssh/uploaded_key.pub

# Ajouter la clé publique aux clés autorisées
cat /home/matheo/.ssh/uploaded_key.pub >> /home/matheo/.ssh/authorized_keys

# Supprimer le fichier temporaire
rm /home/matheo/.ssh/uploaded_key.pub

# Vérifier le contenu
cat /home/matheo/.ssh/authorized_keys

✅Résultat attendu : 
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... matheo@IP_SERVEUR

Maintenant que la clé est bien présente sur le serveur je dois faire en sorte que le service SSH l’utilise car pour l’instant tout se que j’ai fait n’a eu aucune incidence sur la manière de se connecter.

Je dois donc modifier la configuration SSH pour la rendre plus sécurisé.

# Modifier la configuration
sudo nano /etc/ssh/sshd_config


J'ai modifié les lignes suivante :

# Changement du port ssh basique de 22 a 2222 car le port 22 est une cible privilégié 
Port 2222

# Connexion par mot de passe désactivé
PasswordAuthentication no

# Connexion par clé activé
PubkeyAuthentication yes

# Répertoire ou trouver les clés autorisé
AuthorizedKeysFile .ssh/authorized_keys

# Vérifier que la config SSH n'a pas de faute de syntaxe
sudo sshd -t

✅Résultat attendu : 
(rien = pas d'erreur)

⚠️ C’est la partie critique.

Pour que les modifications s’applique il faut redémarrer le service SSH mais si il venait a y avoir un problème, la connexion au serveur sera impossible via SSH

Je vais donc garder ouvert mon premier terminal, procéder au redémarrage du service SSH et essayer de me connecter. Si connexion réussi alors je peux fermer mon premier terminal.

# Redémarrer le service SSH
sudo systemctl restart sshd

# Dans un nouveau terminal ⚠️
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_srv" -p2222 matheo@IP_SERVEUR

Cette fois ci a la connexion une passe phrase sera demandé et plus un mot de passe.

Pour aller plus loin.

# Tentative de connexion en root
ssh -p2222 root@IP_SERVEUR

✅Résultat attendu : 
Permission denied (publickey)

# Forcer la connexion par mot de passe
ssh -p2222 -o PubkeyAuthentication=no matheo@IP_SERVEUR

✅Résultat attendu : 
Permission denied (publickey)