Lorsque notre VPS, ou serveur dédié, nous est mis à disposition pour la première fois, il convient d’effectuer quelques configurations basiques pour un minimum de sécurité.
Nous allons donc aborder ici quelques étapes à prendre en compte pour bien débuter et sécuriser son VPS ou serveur dédié. Pour ce qui suit, j’utilise Windows pour me connecter via SSH à mon VPS Ubuntu.
Pré-requis: Disposer d’un serveur dédié ou VPS Ubuntu – si ce n’est pas encore le cas, suivre ce guide pour obtenir un VPS chez OVH
Connexion initiale via SSH
Commençons par nous connecter à notre serveur pour la première fois.
On ouvre l’Invite de commande sous Windows et on entre :
ssh utilisateur@ip
utilisateur correspond au nom d’utilisateur fourni par l’hébergeur lors de la commande du serveur.
ip correspond à l’adresse IP du serveur, également fourni par l’hébergeur.
Nous sommes ensuite invité à rentrer le mot de passe qui nous a été communiqué par l’hébergeur.
Nous sommes maintenant connectés à notre serveur et prêts à commencer à le sécuriser.
Gestion des accès Super Users et Utilisateurs
Initialement, nous sommes connectés en tant que simple utilisateur avec des privilèges limités, nous allons donc utiliser le Super User Root afin d’effectuer les configurations à venir :
su root
Définition d’un mot de passe pour l’Utilisateur Root
Nous avons pu prendre le contrôle du Super User sans difficulté: aucun mot de passe n’est défini. Or nous souhaiterions éviter cela pour limiter l’accès aux super commandes.
Définissons un mot de passe pour l’utilisateur Root :
passwd
On nous demande alors d’entrer et de confirmer le mot de passe. Ce mot de passe nous sera désormais demandé à chaque fois que l’on tentera d’accéder au Super User Root.
Création d’un utilisateur
Toujours en tant que Super User, continuons avec la création d’un nouvel utilisateur.
Nous nous sommes connectés au serveur en utilisant le nom d’utilisateur et le mot de passe générés par notre hébergeur. Pour plus de sécurité, nous allons créer notre propre utilisateur et définir son mot de passe.
adduser nouvelutilisateur
On donnera le nom que l’on souhaite pour nouvelutilisateur.
Il nous est demandé de fournir et de confirmer le mot de passe ainsi que des informations optionnelles telles qu’un nom complet, un téléphone…
Ceci étant fait, notre utilisateur est désormais créé. Nous allons quitter le serveur afin de nous reconnecter avec notre nouvel utilisateur.
exit
exit
ssh nouvelutilisateur@ip
Suppression de l’utilisateur initial
Pour finir, nous allons supprimer l’utilisateur initialement généré par l’hébergeur puisque nous souhaitons éviter qu’il puisse être utilisé pour accéder à notre serveur.
On retourne sur notre Super User, cette fois ci un mot de passe nous est bien demandé, tel que défini précedement.
su root
Et l’on supprime l’utilisateur initial.
deluser utilisateur
Mises à jour du système
Lors de sa mise à disposition, notre serveur ne contient probablement pas les dernières versions de système et d’applications, certaines failles de sécurité pourraient être exploitées, c’est pour cela que nous allons mettre à jour notre serveur.
Toujours en tant que super user, nous allons premièrement mettre à jour la liste des paquets disponibles :
apt update
Nous pouvons maintenant mettre à jour les paquets eux-même.
apt upgrade
Pour plus d’informations sur la commande apt et ses méthodes: Documentation sur Ubuntu-fr.org
Accès SSH
Port d’écoute SSH
Par défaut, lorsque nous nous connectons à notre serveur via SSH, le port 22 est utilisé. Ainsi, les tentatives d’intrusion effectuées par les bots sont plus fréquentes sur ce port – afin de limiter le risque, nous allons choisir un autre port non utilisé pour la connexion SSH.
Cette configuration s’effectue dans le fichier « /etc/ssh/sshd_config » que nous allons éditer.
nano /etc/ssh/sshd_config
On décommente la ligne « #Port 22 » et l’on remplace par le nouveau Port souhaité.
Pour éviter de selectionner un Port déjà utilisé, on lancera la commande :
netstat --inet -lnp
Les ports utilisés apparaissent dans la colonne « Local Address », nous pouvons alors choisir tout autre Port jusque 65535.
# What ports, IPs and protocols we listen for Port 22
Port NumeroDePort
On enregistre ensuite nos modifications et l’on redémarre SSH.
/etc/init.d/ssh restart
Il faudra désormais renseigner ce port lorsque nous nous connectons à notre serveur.
Testons donc cette nouvelle configuration en quittant le serveur.
exit
exit
Puis on lance désormais la commande Windows :
ssh nouvelutilisateur@ip -p NumeroDePort
Nous voilà connectés en utilisant notre nouveau Port, le Port 22 n’est lui plus accessible.
Accès SSH de l’Utilisateur Root
Nous avons précedemment défini un mot de passe pour l’utilisateur root. Il nous serait possible de nous connecter directement à notre serveur avec cet utilisateur en entrant :
ssh root@ip -p NumeroDePort
Pour plus de précaution, nous voulons resteindre cette possibilité, nous allons donc retourner sur le Super User root et éditer à nouveau le fichier « /etc/ssh/sshd_config ».
su root
nano /etc/ssh/sshd_config
Plus bas dans ce fichier, se trouve une section « Authentication », nous allons changer le paramètre « PermitRootLogin » à « no » :
# Authentication:#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
On enregistre nos modifications et l’on peut redémarrer SSH :
/etc/init.d/ssh restart
L’accès à l’utilisateur root se fera désormais uniquement de la façon dont nous le faisons actuellement: en se connectant avec un utilisateur, puis :
su root
Pare-feu
Sans pare-feu installé sur notre serveur, les communications entrantes et sortantes ne sont pas filtrées, pouvant entrainer des connexions indésirables. Nous allons donc installer un pare-feu simple et y définir quelques règles pour garder un minimum de contrôle.
Installation du pare-feu UFW
Le pare-feu que nous utiliserons sera Uncomplicated FireWall (UFW).
Plus d’infos sur UFW et les commandes disponibles sur le site Ubuntu-fr.org
Ce logiciel nous permettra de gérer simplement en quelques lignes de commande les configurations des règles de notre pare-feu.
Il est possible qu’UFW soit déjà installé sur notre serveur, on testera son installation en entrant :
ufw status
S’il n’est pas installé :
apt install ufw
Définition de règles pour UFW
Nous avons précedemment modifié le port d’accès pour SSH, qui par défaut était sur le Port 22.
Nous allons donc dans un premier temps refléter ce changement dans la configuration de notre pare-feu pour autoriser les connexions sur le nouveau port que nous avons défini :
ufw allow NumeroDePort/tcp
Nous pouvons maintenant activer UFW en lançant la commande :
ufw enable
Et afficher la liste des connexion actuellement autorisées (uniquement notre port SSH sur TCP) avec la commande :
ufw status verbose
Par la suite, nous souhaiterons probablement ouvrir d’autres ports en fonction de nos besoins, on utilisera alors la même commande pour le numéro de port souhaité.
Certains ports par défaut peuvent être activés par le nom de leur protocole, par exemple HTTP :
ufw allow http
Ceci aura pour effet de rajouter une règle pour autoriser le port 80/TCP.
Il faudra relancer le pare-feu pour prendre en compte les modifications, avec la commande :
ufw reload
Nous pouvons également à tout moment désactiver UFW en lançant la commande:
ufw disable
Là encore, le guide d’Ubuntu-fr.org offre plus de détails sur les configurations avancées.
Limiter les attaques
Pour finir, nous allons installer et configurer Fail2ban qui nous permettra de limiter les attaques potentielles sur notre serveur.
Par l’analyse des tentatives de connexion échouées sur une période définie, Fail2ban génèrera automatiquement des règles actives pour une durée déterminée afin de bloquer ces tentatives.
Installation de Fail2ban
Commençons donc par installer Fail2ban :
apt install fail2ban
Ensuite, pour le démarrer et également l’activer au démarrage du serveur :
systemctl start fail2ban
systemctl enable fail2ban
En entrant la commande suivante, on pourra en contrôler le statut :
systemctl status fail2ban
La ligne « Active » devrait indiquer « active (running)« . Nous pouvons alors poursuivre et définir notre configuration.
Configurer Fail2ban
Afin de configurer Fail2ban, nous allons créer notre propre fichier conf:
nano /etc/fail2ban/jail.d/custom.conf
Dans lequel nous allons définir les règles suivantes :
[DEFAULT]
ignoreip = 127.0.0.1 iplocale
findtime = 10m
bantime = 1h
maxretry = 5
[sshd]
enabled = true port = NumeroDePort maxretry = 5
La première partie « [DEFAULT] » nous permet d’indiquer les IP à ne jamais bloquer, elles seront ignorées lors de l’analyse, on y ajoute donc notre propre adresse IP afin d’éviter de se bannir soi-même.
La règle « findtime » détermine la période sur laquelle fail2ban analysera les tentatives.
La règle « bantime » définit la durée pour laquelle l’IP sera bannie.
Pour finir la règle « maxretry » donne le nombre de tentatives à partir duquel l’IP sera bannie si elle échoue à se connecter.
La seconde partie « [sshd] » est spécifique pour les connexions ssh. Puisque nous avons modifié le port SSH par défaut précédemment, il faut ici l’indiquer.
Pour prendre en compte nos changements, il faut finalement enregistrer le fichier et redémarrer le service :
systemctl restart fail2ban
Pour des configurations plus avancées: plus de détails sur Fail2Ban sur le site Ubuntu-fr.org
Pour toute suggestion, remarque ou correction, n’hésitez pas à me contacter !