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
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'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