Sécuriser sa machine Debian

Introduction


Assurer la sécurité de sa machine est un point essentiel qui ne doit pas être sous-estimé sous peine de devenir la cible de diverses attaques. La puissance actuelle des ordinateurs rendant aujourd'hui des techniques d'intrusions comme l'attaque par force brute ou bruteforce très simple à mettre en oeuvre pour obtenir un accès administrateur à la machine cible en un temps réduit.

Vous trouverez sur cette page une liste non exhaustive de pistes afin de sécuriser votre serveur Debian sur différents points tels que le compte root, l'accès ssh, le pare-feu, etc...

Avertissement: Avant toute modification de votre système prévoyez toujours une sauvegarde de vos fichiers en cas de mauvaise manipulation. Sur un serveur de production, pensez à effectuer ces opérations pendant les heures creuses afin de minimiser l'impact de vos actions.


Pré-requis


L'un des pré-requis essentiel à la sécurité de son serveur est de maintenir ses paquets dans leur version la plus à jour possible. Un nombre important de failles découvertes sont rapidement corrigées par les développeurs des paquets et applications concernées, dans la mesure du possible il faut toujours conserver son système à jour et ainsi éviter les failles de sécurité.

apt-get update apt-get upgrade
Afin de conserver votre système Debian à jour, assurez-vous de posséder une liste des dépôts officiels à jour. Vous pourrez trouver une liste des dépôts disponibles chez Ikoula et les instructions d'installation à cette adresse.

Les répertoires utilisateurs

Par défaut sur un système Debian, les répertoires utilisateurs sont accessibles aux autres comptes locaux présents sur la machine.
Afin de palier à cette faille dans la sécurité il nous est nécessaire de reconfigurer le comportement par défaut.

Faisons en sorte que les répertoires ne soient lisibles que par leur propriétaires respectifs
dpkg-reconfigure adduser
dpkg-reconfigure-adduser


L'accès root


Autoriser la connexion du compte root après la première utilisation n'est en général pas une bonne idée. En effet le compte root ou super-utilisateur possède un accès total à votre système.
Si une personne malveillante vient à gagner l'accès au compte super-utilisateur elle aura le contrôle total de votre machine.

La commande sudo


Afin de réduire les risques vous pouvez, par exemple, ajouter un utilisateur qui, au besoin, obtiendra les droits de notre super-utilisateur par l'utilisation de la commande sudo.
Il nous faut tout d'abord créer un nouvel utilisateur

adduser votre_utilisateur

Remplissez ensuite les différents champs ainsi que le mot de passe qui, de préférence, sera composé de minuscules, majuscules et chiffres.
Nous allons maintenant installer sudo

apt-get install sudo

Maintenant que notre utilisateur est créé et que sudo est installé il va devoir être dans le groupe sudo pour pouvoir utiliser la commande

usermod -a -G sudo votre_utilisateur

A partir de maintenant notre utilisateur pourra, au besoin, faire précéder la commande souhaitée de sudo afin de l'exécuter avec les permissions du super-utilisateur.
Son mot de passe lui sera demandé avant d'exécuter toute commande.

sudo cat /etc/password

Interdire le login root
Maintenant que nous disposons d'un autre utilisateur nous pouvons par exemple empêcher la connexion à notre système à partir du compte root.
Tout d'abord il vous faut éditer le fichier de configuration du service ssh

vi /etc/ssh/sshd_config

Trouvez et éditez la ligne suivante dans votre fichier sshd_config, en modifiant le yes par no. Au besoin dé-commentez la ligne en supprimant le symbole #.

PermitRootLogin no

N'oubliez pas ensuite de sauvegarder et de fermer le fichier de configuration.
Lorsque le service SSH sera relancé vos modifications prendront effet.

/etc/init.d/ssh restart

Conseil: Nous vous conseillons de toujours garder le terminal SSH connecté en root pendant la durée des tests. En effet une mauvaise manipulation rendrait la connexion à votre système impossible.
L'ouverture d'un second terminal afin de tester la connexion et l'utilisation des modifications sur le nouvel utilisateur est donc recommandée.


L'accès SSH


Grâce aux solutions apportées précédemment notre système est déjà bien sécurisé, mais nous pouvons encore renforcer cette sécurité en mettant en place une authentification par fichier de clé.
Habituellement la connexion et l'authentification sur votre système s'effectue grâce à une paire login/mot de passe. Nous pouvons remplacer cette méthode qui n'est pas infaillible par une authentification par clé.
Une fois la modification mise en place lors de chaque nouvelle connexion le système va regarder si l'utilisateur qui tente de se connecter possède une clé valide et si cette-ci est bien autorisée à effectuer une connexion pour cet utilisateur.

Bien qu'aucune méthode ne soit infaillible l'authentification par fichier de clé requiert de la personne voulant s'introduire dans le système qu'elle possède ce fichier. Nous pouvons donc renforcer la sécurité par rapport à un mot de passe qui peut être deviné par brute force.
Plusieurs inconvénients sont cependant présents lorsque cette méthode est choisie, en effet il est impératif de devoir posséder le fichier de clé quelque soit l'endroit de la connexion, par exemple entre des ordinateurs au travail et à la maison.
Vous devrez également ajouté manuellement chaque nouveau fichier de clé qui sera autorisé à accéder à votre système, dans le cas par exemple de l'ajout d'un nouvel utilisateur ou de l'accès d'une personne autorisée à votre système.

Changer le port par défaut


L'un des moyens les plus efficace pour arrêter les tests automatiques lancés contre les serveurs est de changer le port par défaut de SSH sur votre machine. Pour ce faire éditez votre fichier sshd_config

vi /etc/ssh/sshd_config

Trouvez et éditez la ligne suivante du fichier en remplaçant la valeur par celle choisie

# What ports, IPs and protocols we listen for Port 22

Redémarrez le service SSH

/etc/init.d/ssh restart

Note: A présent la connexion à votre machine s'effectuera en précisant le nouveau port SSH utilisé: ssh utilisateur@Adresse_IP -p Votre_port

Générer une paire de clés


Windows
Vous pouvez générer votre paire de clé depuis le logiciel PuTTYgen disponible sous Windows. Linux Sous Linux vous pouvez taper la commande suivante :

ssh-keygen


Copier une paire de clés


Lorsque la paire est générée nous devons à présent indiquer sur le serveur quelles sont les personnes autorisées à se connecter à notre nouvel utilisateur. Pour ce faire chaque utilisateur de notre système dispose d'un fichier ssh/authorized_keys présent dans son répertoire local.

Si vous êtes actuellement en train de générer la paire de clé sur votre système Debian vous pouvez utiliser la commande suivante afin de copier automatiquement la clé dans le fichier.

ssh-copy-id votre_utilisateur@IP_VotreServeur

SInon vous pouvez manuellement ajouter votre clé publique au fichier des personnes autorisées
Si le dossier .ssh n'existe pas dans le dossier local de notre utilisateur nous devons le créer.

mkdir .ssh chmod 700 .ssh

Maintenant nous devons créer un fichier authorized_keys dans notre dossier .ssh

vi .ssh/authorized_keys

On ajoute ensuite la clé publique au fichier, le résultat doit être semblable à cet exemple

ssh-rsa AAAB3NzaC1yc2EAAAADAQaSdMTJXMy3MtlQhva+j9CgguyVbU3nCKneB+KjKiS/1rggpFmu3HbXBnWSUdf votre_utilisateur@machine.locale

On enregistr et on ferme le fichier.
Par mesure de sécurité nous allons restreindre l'accès à notre fichier

chmod 600 .ssh/authorized_keys

À partir de maintenant notre utilisateur est autorisé à se connecter à la machine.

Chrooter son système


Mettre en place une prison, un chroot pour ses utilisateurs peut être une bonne solution afin de sécuriser son serveur. Les utilisateurs emprisonnés sur le système auront un choix d'actions réduit aux commandes autorisées par vous même.
Vous trouverez de plus amples informations sur le chroot et sa mise en place dans l'article disponible à l'adresse suivante

Pare-feu


L'utilisation d'un pare-feu est fortement recommandée pour la sécurisation de votre système.
Le pare-feu est souvent la première ligne de défense de votre machine contre l'extérieur, c'est en effet lui qui va analyser le trafic qui transite entre votre machine et l'extérieur.
Grâce au pare-feu vous êtes en mesure de pouvoir bloquer ou autoriser l'accès de votre machine depuis l'extérieur à certains ports ou protocoles, assurant ainsi la sécurité de votre système.

Les politiques de sécurité


Dans le cas d'un pare-feu il est nécessaire de définir une politique de sécurité à mettre en place. En effet sans une définition efficace le choix du blocage ou de l'autorisation des ports et protocoles se trouverait être assez aléatoire.
Il est donc nécessaire de définir au préalable une politique claire quant à la sécurité de son réseau informatique ou de sa machine.

Parmi les différentes politiques les plus couramment utilisées se trouvent les politiques de la liste blanche et celle de la liste noire.

Liste blanche

Le principe de la politique de la liste blanche consiste à bloquer tout le trafic entrant sans exception et n'autoriser explicitement que les ports et protocoles dont nous sommes absolument sûrs de leur sécurité. Cette politique de sécurité présente de nombreux avantages par rapport à la liste noire. En effet tout trafic non explicitement autorisé sera bloqué, ceci permet d'éviter la plupart des tentatives de connexion que nous n'aurions pas forcement eu le réflexe de sécuriser.
L'un des désavantages de cette politique est l'obligation de devoir définir chaque ports ou protocoles utilisés afin de ne pas bloquer l’exécution de nos services ( par exemple le protocole http sur le port 80 ), il faut donc connaître chaque port utilisé par la machine et garder à jour les règles établies lors de l'ajout ou de la suppression d'un service. Concernant le trafic sortant dans la majorité des cas il n'est pas considéré comme risqué de tout autorisé, en effet vous êtes censé connaître le trafic sortant de votre réseau ou machine. Il est cependant recommandé de garder une trace du trafic sortant par mesure de sécurité.

Liste noire

Le principe de la politique de la liste noire consiste à autoriser tout le trafic entrant sans exception et à ne bloquer explicitement que les ports et protocoles dont nous sommes sûrs qu'ils présentent un risque pour la sécurité.
Cette politique de sécurité présente de nombreux désavantages par rapport à la liste blanche. En effet autoriser tout le trafic entrant sans aucune restriction n'est pas recommandé, le blocage n'intervenant seulement que dans le cas d'un port ou protocole explicitement établi. Concernant le trafic sortant dans la majorité des cas il n'est pas considéré comme risqué de tout autorisé, en effet vous êtes censé connaître le trafic sortant de votre réseau ou machine. Il est cependant recommandé de garder une trace du trafic sortant par mesure de sécurité.

IPTables


IPTables est surement le plus connu des pare-feu logiciel disponible sur Debian.
Voici quelques commandes pratiques le concernant.

Installation d'IPTable

sudo apt-get install iptables

Lister les règles actuellement établies

sudo iptables -L

Purger les règles établies

sudo iptables -F sudo iptables -X

Ajouter une règle

# Supprimer la règle n°2 de la catégorie OUTPUT sudo iptables -D OUTPUT 2

Fail2ban


Il peut être utile de mettre en place le servcie Fail2ban sur votre système afin de prévenir tout risque d'attaque par force brute. En effet le service fail2ban vous permet de bannir, pour un temps donné, toute personne échouant à s'authentifier un certain nombre de fois sur la machine.
Vous trouverez de plus amples informations sur fail2ban et sa mise en place dans l'article disponible à l'adresse suivante.

Rkhunter


Vous avez la possibilité de détecter si des malwares/rootkits sont présents sur votre serveur via l'utilitaire rkhunter.
Vous pouvez l'installer via la commande:

apt-get install rkhunter

Une fois installé, vous pouvez lancer un check de votre système via la commande.

rkhunter --checkall

Vous pouvez ajouter l'option "--report-warnings-only" afin de n'avoir que les erreurs dans le rapport.
Vous pouvez par exemple automatiser cette tâche tout les jours en ajoutant une tâche cron: (/etc/crontab ou crontab -e)

0 0 * * * root rkhunter --checkall --report-warnings-only
Ici tous les jours à minuit

Add new comment