TP03 - bpatureau/admin-2-TP GitHub Wiki

TP3 : Sécurisation des VPS

Noms des auteurs : Bongartz, Patureau, Ladrière Date de réalisation : 01-04-25 (remake)

1. Mise en oeuvre de la procédure de sécurisation proposée par OVH

✔️ Mettre à jour le système d'exploitation :

  1. Tout d'abord on mets à jour la liste des paquets avec sudo apt update puis on mets à jour le système sur base de cette liste avec sudo apt upgrade

✔️ Modifier le port d'écoute SSH par défaut.

  1. On se rend dans sudo nano /etc/ssh/sshd_config
  2. On modifie le champ Port (numéro de port à titre d'exemple ici pour ne pas donner le vrai)
AllowUsers maxime
Port 53271
#AddressFamily any
#ListenAddress 0.0.0.0
  1. Puis on redémarre ssh avec sudo systemctl restart sshd
  2. Validation : on fait un sudo netstat -ntplu | grep sshd pour voir le port ssh
    image
    On peut voir que ssh utilise bien le port qu'on à définis

✔️ Créer un utilisateur avec des droits restreints

  1. On va créer un utilisateur nommé admin qui aura les droits sudo et un utilisateur avec des droit restreits nommé dns car c'est sur ce vps qu'on s'occupe du dns

  2. Création du user dns non privilégé :
    Création du user
    sudo adduser dns On lui à donné un mot de passe
    Ajout du user au groupe docker
    sudo usermod -aG docker dns
    On vérifie qu'il n'ait pas de droits importants et qu'il fasse partie du groupe docker, avec groups dns
    image

  3. Création du user admin privilégé :
    Création du user
    sudo adduser admin On lui à donné un mot de passe fort étant donné qu'il pourra tout executer
    Ajout du user au sudo group
    sudo usermod -aG sudo admin
    On vérifie qu'il soit bien dans le groupe sudo avec groups admin
    image
    Puis on redémarre ssh avec sudo systemctl restart ssh


✔️ Désactiver l'accès SSH de l'utilisateur root

  1. On désactive la conexion par root car on se connectera par l'utilisateur dns pour cela on va dans sudo nano /etc/ssh/sshd_config :
    image
  2. Pour valider ceci on essaie de se connecter en ssh au root avec ssh -p 53271 [email protected] et on voit que ça ne fonctionne pas

✔️ Configurer le pare-feu : Indiquez les règles choisies (et mettez les à jour au fur et à mesure du semestre)

  1. On a choisi d'utiliser ufw voici nos règles :
  • Autoriser SSH :
sudo ufw allow 53271/tcp
  • Autoriser le DNS :
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
  • Désactiver tout le reste :
sudo ufw default deny incoming
sudo ufw default allow outgoing
  1. Validation :
  • On peut afficher toutes les règles avec sudo ufw status
    image
  • Vérification des ports ouverts avec nmap -p- <ip.de.notre.vps> (notre vrai port est flouté):
    image
  • Vérifier si il y a des services qui tournent de manière superflues netstat -ntplu :
    image

✔️ Installer Fail2ban et le configurer pour éviter les attaques brute-force sur SSH. Indiquez les règles choisies (et mettez les à jour au fur et à mesure du semestre)

  1. Installer le package :
sudo apt install fail2ban
  1. Créer un fichier de configuration local de nos services en copiant le fichier "jail" :
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. Configurer le fichier jail.conf sudo nano /etc/fail2ban/jail.local On a configuré une jail pour sécuriser l'accès SSH qui est le seul service utilisé en plus du DNS mais qui lui tourne dans un docker :
[DEFAULT]
bantime = 15m
maxretry = 5
enabled = false

[sshd]
enabled = true
port = 51515
logpath = /var/log/auth.log
filter = sshd
maxretry = 4
findtime = 30m
bantime  = 1h
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 24h

filter = sshd et enabled = true : Active fail2ban pour SSH
maxretry = 4 et findtime = 30m : Une IP sera bannie après 4 tentatives ratées dans un intervalle de 30min
bantime = 1h, bantime.increment = true, bantime.factor = 2, bantime.maxtime = 24h : Quand une IP est bannie c'est pendant 1h et chaque récidive double la durée du bannissement, jusqu'à un maximum de 24 heures
logpath = /var/log/auth.log : logs pour voir ce qu'a fait fail2ban

  1. Démarrer fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
  1. Validation :
sudo systemctl status fail2ban
sudo fail2ban-client status sshd


image

2. Mise en place de l'authentification SSH par clé

  1. Générer une pair de clés sur la machine locale :
  • Si ce n'est pas déjà fait il faut créer un répertoire .ssh
  • On créer la paire de clés :
ssh-keygen -t rsa -b 4096 -a 100

L'invite propose de choisir un nom (on a mis rsa_vps_admin) et de protèger la clé avec une passphrase (on l'a fait)
image

on peut voir que la paire de clé a été créée, composée d'une clé privée rsa_vps_admin et une publique (.pub) rsa_vps_admin.pub

  1. Copier la clé publique sur le vps
  • Soit sur linux on fait :
cat ~/.ssh/rsa_vps_admin.pub
  • Soit sur windows on fait type rsa_vps_admin.pub ou on ouvre directement le fichier dans l'explorer. Puis on copie la clé (tout le contenu du fichier)
  • On se connecte à la machine distante et on colle la clé dans le fichier sudo nano ~/.ssh/authorized_keys (on peut en mettre plusieurs à la suite)
  1. Validation
  • On essaie de se connecter, pour faire ça on s'est simplifié la vie en configurant le fichier config dans le .ssh. Toutes les infos du vps comme l'ip, le port, le chemin d'accès de la clé privée, sont spécifiés pour pouvoir facilement se connecter au vps en faisant jsute ssh maxVps :
Host maxVps
    HostName <ip>
    User maxime
    Port <port>
    IdentityFile <chemin>\.ssh\rsa_vps_admin

image

  • ça marche on est connecté
  1. Désactiver l’authentification par mot de passe
  • On va dans sshd_config et on remplace yes par no (et on limite la connexion uniquement au compte non privilégé)
sudo nano /etc/ssh/sshd_config
AllowUsers maxime
PasswordAuthentication no
  • Pareille pour le fichier contenu dans le include de sshd_config
sudo nano /etc/ssh/sshd_config.d/*.conf
PasswordAuthentication no

3. Prise en main du VPS

Le site web a été déployé sur le vps de Bastien : Liens vers le TP5

⚠️ **GitHub.com Fallback** ⚠️