GNU/Linux >> Tutoriels Linux >  >> Linux

Les 50 meilleurs conseils de sécurité pour le durcissement de Linux :une liste de contrôle complète

Linux alimente la majorité du Web et un nombre considérable de postes de travail dans le monde. L'une des principales raisons de la popularité croissante des systèmes Linux et BSD est leur politique solide en matière de sécurité. Les systèmes Linux sont intrinsèquement difficiles à casser en raison de leurs principes de conception sous-jacents. Cependant, aucun système n'est incassable, et si vous ne renforcez pas votre poste de travail ou votre serveur Linux conformément aux dernières normes, vous risquez d'être victime de divers types d'attaques et/ou de violations de données. C'est pourquoi nous avons présenté 50 astuces de durcissement Linux qui vous aideront à augmenter la sécurité de votre serveur au niveau supérieur.

Conseils de renforcement de la sécurité Linux pour les professionnels

La sécurité est devenue une partie intégrante du monde informatique. Par conséquent, le renforcement de votre poste de travail personnel, ainsi que la sécurité du serveur, sont indispensables. Alors continuez à lire et intégrez autant que possible les conseils ci-dessous pour augmenter la sécurité de votre machine Linux.

1. Informations sur l'hôte du document

Documenter les informations sur l'hôte peut devenir extrêmement bénéfique à long terme. Si vous avez l'intention de maintenir le même système au fil du temps, il y a de fortes chances que les choses deviennent désordonnées à un moment donné. Cependant, si vous documentez votre poste de travail ou votre serveur dès le jour de son installation, vous aurez une idée précise de l'infrastructure globale du système et des politiques utilisées.

Incluez les informations ci-dessous sur le système dans votre documentation. N'hésitez pas à ajouter des extras en fonction des besoins de votre serveur.

  • Nom du système
  • Date d'installation
  • Numéro d'actif (valeurs identifiant les hôtes dans les environnements professionnels)
  • Adresse IP
  • Adresse MAC
  • Version du noyau
  • Nom de l'administrateur

2. Sécurisez le BIOS et désactivez le démarrage USB

Vous devez sécuriser votre BIOS à l'aide d'un mot de passe approprié afin que les autres utilisateurs ne puissent pas accéder ou modifier les paramètres. Comme il est assez simple d'accéder au menu du BIOS sur les cartes mères modernes, les utilisateurs finaux peuvent remplacer les paramètres existants et manipuler des configurations sensibles.

De plus, les utilisateurs peuvent également utiliser des systèmes amorçables pour accéder aux données de votre hôte. Cela pourrait également constituer une menace pour l'intégrité de votre serveur. Vous pouvez désactiver complètement les périphériques USB en utilisant la commande suivante.

# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf

Le démarrage USB peut également être désactivé à partir du menu du BIOS. Cependant, cela n'est pas obligatoire si vous utilisez un poste de travail personnel auquel les autres utilisateurs ne peuvent pas accéder.

- -

3. Chiffrer le stockage sur disque

Le chiffrement de votre stockage sur disque peut s'avérer très bénéfique à long terme. Il empêchera les fuites de données en cas de vol ou toute intrusion de tiers. Heureusement, il existe une grande variété d'outils de chiffrement Linux qui simplifient cette tâche pour les administrateurs.

De plus, les distributions Linux modernes proposent aux administrateurs de chiffrer leur système de fichiers Linux pendant le processus d'installation. Cependant, vous devez savoir que le chiffrement peut affecter le débit des performances et compliquera probablement la récupération des données.

4. Crypter la communication de données

Étant donné que les données transmises sur le réseau peuvent être facilement capturées et analysées à l'aide d'outils de sécurité open source, le cryptage des données doit être votre priorité absolue pendant le processus de durcissement de Linux. De nombreux outils de communication de données hérités n'utilisent pas un cryptage approprié et peuvent donc rendre vos données vulnérables.

Vous devez toujours utiliser des services de communication sécurisés tels que ssh, scp, rsync ou sftp pour le transfert de données à distance. Linux permet également aux utilisateurs de monter des systèmes de fichiers distants à l'aide d'outils spéciaux tels que fuse ou sshfs. Essayez d'utiliser le chiffrement GPG pour chiffrer et signer vos données. Les autres outils Linux qui offrent des services de cryptage de données incluent OpenVPN, Lighthttpd SSL, Apache SSL et Let's Encrypt.

5. Évitez les services de communication hérités

Un grand nombre de programmes Unix hérités n'offrent pas la sécurité essentielle lors de la transmission des données. Ceux-ci incluent FTP, Telnet, rlogin et rsh. Que vous sécurisez votre serveur Linux ou votre système personnel, arrêtez d'utiliser ces services pour de bon.

Vous pouvez utiliser d'autres alternatives pour ce type de tâches de transfert de données. Par exemple, des services comme OpenSSH, SFTP ou FTPS garantissent que la transmission des données se fait via un canal sécurisé. Certains d'entre eux utilisent des cryptages SSL ou TLS pour renforcer la communication de vos données. Vous pouvez utiliser les commandes ci-dessous pour supprimer les services hérités tels que NIS, telnet et rsh de votre système.

# yum erase xinetd ypserv tftp-server telnet-server rsh-server
# apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server

Utilisez la première commande pour les distributions basées sur RPM telles que RHEL et Centos ou tout système utilisant le gestionnaire de packages yum. La deuxième commande fonctionne sur les systèmes basés sur Debian/Ubuntu.

6. Maintenir le noyau et les packages à jour

Pour maintenir la sécurité de votre serveur, vous devez toujours appliquer les dernières mises à jour de sécurité dès que possible. Cela peut réduire la surface d'attaque au cas où des vulnérabilités seraient découvertes dans des packages ou des modules de noyau plus anciens. Heureusement, la mise à jour du système est très simple et peut être effectuée assez rapidement.

# yum update
# apt-get update && apt-get upgrade

Utilisez la commande yum pour mettre à jour vos systèmes RHEL/Centos et la commande apt pour les distributions basées sur Ubuntu/Debian. De plus], vous pouvez automatiser ce processus en utilisant le travail cron Linux. Consultez notre guide sur les crontab Linux pour en savoir plus sur les tâches cron.

7. Activer SELinux

SELinux ou Security Enhanced Linux est un mécanisme de sécurité qui implémente diverses méthodes de contrôle d'accès au niveau du noyau. SELinux est développé par Red Hat et a été ajouté à de nombreuses distributions Linux modernes. Vous pouvez le considérer comme un ensemble de modifications du noyau et d'outils de l'espace utilisateur. Vous pouvez vérifier si SELinux est activé sur votre système ou non en utilisant la commande ci-dessous.

# getenforce

S'il renvoie l'application, cela signifie que votre système est protégé par SELinux. Si le résultat indique permissif, cela signifie que votre système a SELinux mais qu'il n'est pas appliqué. Il reviendra désactivé pour les systèmes où SELinux est complètement désactivé. Vous pouvez appliquer SELinux en utilisant la commande ci-dessous.

# setenforce 1

8. Réduire les packages système

La réduction des packages système peut considérablement augmenter la sécurité globale de votre système. Étant donné que les bogues logiciels sont l'un des principaux obstacles à la sécurité, le fait d'avoir moins de packages signifie que la surface de vulnérabilité diminue. De plus, les serveurs bénéficient généralement d'une amélioration considérable des performances lorsqu'ils sont exempts de bloatwares inutiles.

# yum list installed
# yum list <package>
# yum remove <package>

Vous pouvez utiliser les commandes yum ci-dessus sous Linux pour répertorier les logiciels installés sur votre système et vous débarrasser de ceux dont vous n'avez pas réellement besoin. Utilisez les commandes ci-dessous si vous utilisez un système basé sur Debian/Ubuntu.

# dpkg --list
# dpkg --info <package>
# apt-get remove <package>

9. Services réseau fractionnés

Si vous utilisez des services réseau monolithiques traditionnels sur votre serveur, un attaquant aura accès à l'ensemble de votre infrastructure dès qu'il exploite un seul service. Par exemple, supposons que vous exécutiez une pile LAMP, que se passe-t-il lorsqu'un attaquant exploite un bogue dans le service Apache ? Il finira par escalader d'autres services et obtiendra probablement le contrôle total du système.

Cependant, si vous divisez vos services réseau et utilisez un réseau par service, l'attaque aura moins de succès. En effet, l'intrus devra exploiter chaque réseau avant de pouvoir obtenir un accès complet au système. Vous pouvez suivre les étapes ci-dessous pour diviser une configuration de pile LAMP traditionnelle.

  • Configurer un serveur de fichiers NFS
  • Configurer un serveur de base de données MySQL
  • Configurer un serveur de mise en cache Memcached
  • Configurer un serveur Web Apache+php5
  • Configurer un serveur Lighttpd pour les données statiques
  • Configurer un serveur Nginx pour le proxy inverse

10. Maintenir les comptes d'utilisateurs et la politique de mot de passe

Les systèmes Unix ont généralement plus d'un compte utilisateur. Votre système est aussi sécurisé que les utilisateurs qui l'exécutent. Assurez-vous donc que seules des personnes de confiance peuvent exécuter un système spécifique. Vous pouvez utiliser le useradd /usermod commandes pour ajouter et gérer de nouveaux comptes d'utilisateurs sur votre machine.

Appliquez toujours des politiques de mots de passe forts. Un mot de passe fort doit comporter plus de huit caractères et au moins une combinaison de lettres, de chiffres et de caractères spéciaux. Cependant, les utilisateurs doivent pouvoir mémoriser leurs mots de passe. De plus, vérifiez que votre mot de passe n'est pas sensible aux attaques par dictionnaire. Vous pouvez utiliser le module Linux PAM appelé pam_cracklib.so pour avoir fait ça.

11. Définir les dates d'expiration du mot de passe

Une autre méthode de renforcement Linux courante consiste à activer l'expiration du mot de passe pour tous les comptes d'utilisateurs. Vous pouvez facilement définir des dates d'expiration pour les mots de passe des utilisateurs en utilisant le chage commande sous Linux. Votre système demandera aux utilisateurs de définir un nouveau mot de passe une fois que leur existant aura expiré.

# chage -l mary
# chage -M 30 mary
# chage -E "2020-04-30"

La première commande répertorie la date d'expiration actuelle du mot de passe pour l'utilisateur mary. La deuxième commande définit la date d'expiration après 30 jours. Vous pouvez également définir cette date au format AAAA-MM-JJ à l'aide de la troisième commande.

12. Appliquer le module Linux PAM

Vous pouvez augmenter la force du mot de passe en vous assurant que les utilisateurs ne peuvent pas définir ou utiliser des mots de passe faibles. Les pirates de mots de passe peuvent facilement les forcer brutalement et obtenir un accès non autorisé. De plus, limitez la réutilisation des mots de passe en ajoutant la ligne suivante à Ubuntu/Debian et RHEL/Centos respectivement.

# echo 'password sufficient pam_unix.so use_authtok md5 shadow remember=12' >> /etc/pam.d/common-password
# echo 'password sufficient pam_unix.so use_authtok md5 shadow remember=12' >> /etc/pam.d/system-auth

Désormais, vos utilisateurs ne pourront plus réutiliser les mots de passe utilisés au cours des 12 dernières semaines. Utilisez également les conseils ci-dessous pour interdire complètement les phrases secrètes faibles.

# apt-get install libpam-cracklib       # install cracklib support on Ubuntu/Debian

Ajouter la ligne –

# echo 'password required pam_cracklib.so retry=2 minlen=10 difok=6' >> /etc/pam.d/system-auth

Vous n'avez pas besoin d'installer cracklib dans RHEL/Centos. Ajoutez simplement la ligne suivante.

# echo 'password required /lib/security/pam_cracklib.so retry=2 minlen=10 difok=6' >> /etc/pam.d/system-auth

13. Verrouiller les tentatives de connexion après un échec

Les administrateurs doivent s'assurer que les utilisateurs ne peuvent pas se connecter à leur serveur après un certain nombre de tentatives infructueuses. Cela augmente la sécurité globale du système en atténuant les attaques par mot de passe. Vous pouvez utiliser la commande Linux faillog pour voir les tentatives de connexion infructueuses.

# faillog
# faillog -m 3
# faillog -l 1800

La première commande affichera les tentatives de connexion échouées pour les utilisateurs de la base de données /var/log/faillog. La deuxième commande définit le nombre maximal de tentatives de connexion infructueuses autorisées à 3. La troisième définit un verrou de 1800 secondes ou 30 minutes après le nombre autorisé de tentatives de connexion infructueuses.

# faillog -r -u <username>

Utilisez cette commande pour déverrouiller un utilisateur une fois qu'il lui est interdit de se connecter. Le nombre maximum de tentatives de connexion infructueuses pour l'utilisateur root doit être élevé, sinon les attaques par force brute peuvent vous bloquer.

14. Vérifier les mots de passe vides

Les utilisateurs sont le maillon le plus faible de la sécurité globale d'un système. Les administrateurs doivent s'assurer qu'aucun utilisateur du système n'a de mots de passe vides. Il s'agit d'une étape obligatoire pour un durcissement correct de Linux. Utilisez la commande awk suivante sous Linux pour vérifier cela.

# awk -F: '($2 == "") {print}' /etc/shadow

Il s'affichera s'il y a des comptes d'utilisateurs qui ont un mot de passe vide sur votre serveur. Pour augmenter le renforcement du serveur Linux, verrouillez tout utilisateur qui utilise des mots de passe vides. Vous pouvez utiliser la commande ci-dessous pour le faire depuis votre terminal Linux.

# passwd -l <username>

15. Désactiver la connexion en tant que super utilisateur

Les administrateurs ne doivent pas se connecter fréquemment en tant que root afin de maintenir la sécurité du serveur. Au lieu de cela, vous pouvez utiliser sudo exécuter les commandes de terminal Linux qui nécessitent des privilèges de bas niveau. La commande ci-dessous montre comment créer un nouvel utilisateur avec des privilèges sudo.

# adduser <username> sudo

Vous pouvez également accorder des privilèges sudo aux utilisateurs existants en utilisant la commande ci-dessous.

# usermod -a -G sudo <username>

16. Définir les notifications par e-mail pour les utilisateurs sudo

Vous pouvez définir des notifications par e-mail afin que chaque fois qu'un utilisateur utilise sudo, l'administrateur du serveur soit averti par e-mail. Modifiez le fichier /etc/sudoers et ajoutez les lignes suivantes à l'aide de votre éditeur de texte Linux préféré.

# nano /etc/sudoers
mailto "[email protected]"
mail_always on

Remplacez l'e-mail par votre propre courrier ou celui du personnel d'audit. Désormais, chaque fois que quelqu'un effectue une tâche au niveau du système, vous êtes informé.

17. Chargeur de démarrage GRUB sécurisé

Il existe plusieurs chargeurs de démarrage Linux disponibles aujourd'hui. Cependant, GRUB reste le premier choix pour la plupart des administrateurs en raison de son ensemble de fonctionnalités diversifié. De plus, c'est le chargeur de démarrage par défaut dans de nombreuses distributions Linux modernes. Les administrateurs qui prennent au sérieux leurs étapes de renforcement de Linux doivent définir un mot de passe fort pour leur menu GRUB.

# grub-md5-crypt

Entrez-le sur votre terminal et grub vous demandera le mot de passe. Entrez le mot de passe que vous souhaitez définir et il générera un hachage crypté à l'aide de votre mot de passe. Maintenant, vous devrez mettre ce hachage dans votre menu de configuration grub.

# nano /boot/grub/menu.lst
or
# nano /boot/grub/grub.conf

Ajoutez le hachage calculé en ajoutant la ligne ci-dessous entre les lignes qui définissent le délai d'expiration et l'image de démarrage.

password –md5 <calculated-hash>

18. Valider l'UID des utilisateurs non root

Un UID ou User-ID est un nombre non négatif attribué aux utilisateurs d'un système par le noyau. L'UID 0 est l'UID du superutilisateur ou root. Il est important de s'assurer qu'aucun utilisateur autre que root n'a cette valeur UID. Sinon, ils peuvent masquer l'ensemble du système en tant que root.

# awk -F: '($3 == "0") {print}' /etc/passwd

Vous pouvez savoir quels utilisateurs ont cette valeur UID en exécutant ce programme awk. La sortie ne doit contenir qu'une seule entrée, qui correspond à root.

19. Désactiver les services inutiles

De nombreux services et démons sont démarrés lors du démarrage du système. La désactivation de ceux qui ne sont pas obligatoires peut aider au renforcement de Linux et améliorer le temps de démarrage. Étant donné que la plupart des distributions modernes utilisent systemd au lieu de scripts init, vous pouvez utiliser systemctl pour trouver ces services.

# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target

Ces commandes afficheront ces services et démons. Vous pouvez désactiver un service spécifique en utilisant la commande ci-dessous.

# systemctl disable service
# systemctl disable httpd.service

20. Supprimer les systèmes X Window (x11)

Les systèmes X Window ou x11 est l'interface graphique de facto pour les systèmes Linux. Si vous utilisez Linux pour alimenter votre serveur au lieu de votre système personnel, vous pouvez le supprimer entièrement. Cela contribuera à augmenter la sécurité de votre serveur en supprimant de nombreux packages inutiles.

# yum groupremove "X Window System"

Cette commande yum supprimera x11 des systèmes RHEL ou Centos. Si vous utilisez plutôt Debian/Ubuntu, utilisez la commande suivante.

# apt-get remove xserver-xorg-core

21. Désactiver les systèmes X Window (x11)

Si vous ne souhaitez pas supprimer définitivement x11, vous pouvez désactiver ce service à la place. De cette façon, votre système démarrera en mode texte au lieu de l'interface graphique. Modifiez le fichier /etc/default/grub à l'aide de votre éditeur de texte Linux préféré.

# nano /etc/default/grub

Trouvez la ligne ci-dessous –

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Maintenant, changez-le en –

GRUB_CMDLINE_LINUX_DEFAULT="text"

Enfin, mettez à jour le fichier GRUB en utilisant –

# update-grub

La dernière étape consiste à indiquer à systemd de ne pas charger le système d'interface graphique. Vous pouvez le faire en exécutant les commandes ci-dessous.

# systemctl enable multi-user.target --force
# systemctl set-default multi-user.target

22. Vérifier les ports d'écoute

Les attaques réseau sont extrêmement courantes sur les serveurs. Si vous souhaitez maintenir un serveur sécurisé, vous devez valider les ports réseau d'écoute de temps en temps. Cela vous fournira des informations essentielles sur votre réseau.

# netstat -tulpn
# ss -tulpn
# nmap -sT -O localhost
# nmap -sT -O server.example.com

Vous pouvez utiliser l'une des commandes ci-dessus pour voir quels ports écoutent les demandes entrantes. Nous avons un guide précédent qui fournit une discussion détaillée des commandes nmap essentielles sous Linux.

23. Enquêter sur les adresses IP

Si vous trouvez une adresse IP suspecte sur votre réseau, vous pouvez l'enquêter à l'aide des commandes Linux standard. La commande ci-dessous utilise netstat et awk pour afficher un résumé des protocoles en cours d'exécution.

# netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n

Utilisez la commande ci-dessous pour trouver plus d'informations sur une adresse IP spécifique.

# netstat -nat |grep <IP_ADDR> | awk '{print $6}' | sort | uniq -c | sort -n

Pour voir toutes les adresses IP uniques, utilisez la commande suivante.

# netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq

Envoyez la commande ci-dessus à wc pour obtenir le nombre total d'adresses IP uniques.

# netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq | wc -l

Consultez notre guide sur les différentes commandes réseau Linux si vous souhaitez approfondir la sécurité du réseau.

24. Configurer les tables IP et les pare-feu

Linux offre d'excellentes protections intégrées contre les requêtes réseau indésirables sous la forme d'iptables. C'est une interface avec le mécanisme Netfilter fourni par le noyau Linux. Vous pouvez facilement bloquer des adresses IP spécifiques ou une plage d'entre elles à l'aide d'iptables.

# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Vous pouvez utiliser la commande ci-dessus pour bloquer toutes les requêtes réseau pour une adresse IP donnée. Consultez notre manuel sur Linux iptables pour en savoir plus sur cet outil. Vous pouvez également installer et utiliser d'autres pare-feu puissants.

25. Configurer les paramètres du noyau

Le noyau Linux a beaucoup de paramètres d'exécution. Vous pouvez facilement modifier certains d'entre eux pour améliorer le durcissement de Linux. La commande sysctl permet aux administrateurs de configurer ces paramètres du noyau. Vous pouvez également modifier le fichier /etc/sysctl.conf pour peaufiner le noyau et augmenter la sécurité.

Par exemple, ajoutez la ligne ci-dessous à la fin de votre configuration sysctl pour permettre le redémarrage du système après 10 secondes de panique du noyau.

# vim /etc/sysctl.conf
kernel.panic=10

Ajoutez la ligne ci-dessous pour randomiser les adresses pour les pages mmap de base, de tas, de pile et VDSO.

kernel.randomize_va_space=2

La ligne suivante obligera le noyau à ignorer les erreurs ICMP.

net.ipv4.icmp_ignore_bogus_error_responses=1

Vous pouvez ajouter des tonnes de règles de ce type et les personnaliser pour répondre aux exigences de votre noyau.

26. Désactiver les autorisations SUID et SGID

SUID et SGID sont des types spéciaux d'autorisation de fichier dans le système de fichiers Linux. Avoir l'autorisation SUID permet aux autres utilisateurs d'exécuter des fichiers exécutables comme s'ils étaient le propriétaire de ces fichiers. De même, l'autorisation SGID donne des droits de répertoire similaires au propriétaire, mais donne également la propriété de tous les fichiers enfants d'un répertoire.

Celles-ci sont mauvaises car vous ne voulez pas que des utilisateurs autres que vous aient ces autorisations sur un serveur sécurisé. Vous devriez trouver tous les fichiers pour lesquels SUID et SGID sont activés et les désactiver. Les commandes suivantes listeront respectivement tous les fichiers pour lesquels les autorisations SUID et SGID sont activées.

# find / -perm /4000
# find / -perm /2000

Examinez correctement ces fichiers et voyez si ces autorisations sont obligatoires ou non. Si ce n'est pas le cas, supprimez les privilèges SUID/SGID. Les commandes ci-dessous supprimeront SUID/SGID respectivement.

# chmod 0755 /path/to/file
# chmod 0664 /path/to/dir

27. Diviser les partitions de disque

Le système de fichiers Linux divise tout en plusieurs parties en fonction de leur cas d'utilisation. Vous pouvez séparer les parties critiques du système de fichiers en différentes partitions de votre stockage sur disque. Par exemple, les systèmes de fichiers suivants doivent être divisés en différentes partitions.

  • /usr
  • /accueil
  • /var &/var/tmp
  • /tmp

Vous devez également créer des partitions séparées pour différents services, comme pour les racines de serveur Apache et FTP. Cela aide à isoler les parties sensibles de votre système. Ainsi, même si un utilisateur malveillant accède à une partie du système, il ne peut pas se déplacer librement dans tout le système.

28. Partitions système sécurisées

Lors de l'exécution de tâches de renforcement du serveur Linux, les administrateurs doivent accorder une attention particulière aux partitions système sous-jacentes. Les utilisateurs malveillants peuvent utiliser des partitions telles que /tmp, /var/tmp et /dev/shm pour stocker et exécuter des programmes indésirables. Heureusement, vous pouvez implémenter des étapes pour sécuriser vos partitions en ajoutant des paramètres à votre fichier /etc/fstab. Ouvrez ce fichier à l'aide d'un éditeur de texte Linux.

# vim /etc/fstab

Recherchez la ligne qui contient l'emplacement /tmp. Maintenant, ajoutez les paramètres nosuid, nodev, noexec et ro sous forme de liste séparée par des virgules après les valeurs par défaut.

Ils offrent les fonctionnalités suivantes –

  • nosuid – interdire l'autorisation SUID sur cette partition
  • nodev -désactiver les périphériques spéciaux sur cette partition
  • noexec - désactiver l'autorisation d'exécution pour les binaires sur cette partition
  • ro – lecture seule

29. Activer les quotas de disque

Les quotas de disque sont simplement des limites fixées par l'administrateur système qui restreignent l'utilisation du système de fichiers Linux pour les autres utilisateurs. Si vous renforcez votre sécurité Linux, la mise en place de quotas de disque est obligatoire pour votre serveur.

# vim /etc/fstab
LABEL=/home /home ext2 defaults,usrquota,grpquota 1 2

Ajoutez la ligne ci-dessus à /etc/fstab pour activer le quota de disque pour le système de fichiers /home. Si vous avez déjà une ligne /home, modifiez-la en conséquence.

# quotacheck -avug

Cette commande affichera toutes les informations de quota et créera les fichiers aquota.user et aquota.group dans /home.

# edquota <user>

Cette commande ouvrira les paramètres de quota de dans un éditeur où vous pourrez attribuer les limites de quota. Vous pouvez définir des limites logicielles et strictes pour la taille du quota de disque ainsi que le nombre d'inodes. Utilisez la commande ci-dessous pour afficher un rapport sur l'utilisation du quota de disque.

# repquota /home

30. Désactiver la connectivité IPv6

IPv6 ou Internet Protocol version 6 est la dernière version du protocole TCP/IP. Il est livré avec une liste de fonctionnalités étendue et de nombreux avantages en termes de convivialité. Cependant, IPv4 reste le commerce de choix pour la plupart des serveurs. Il est donc probable que vous n'utilisiez pas du tout IPv6. Dans de tels cas, vous devez désactiver cette option.

En supprimant la connectivité réseau inutile, la sécurité de votre serveur sera plus solide. Ainsi, la désactivation d'IPv6 offre des effets de renforcement Linux raisonnables. Ajoutez les lignes ci-dessous à /etc/sysctl.conf pour désactiver la connectivité IPv6 au niveau du noyau.

# vim /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Enfin, exécutez la commande ci-dessous pour charger les modifications sur votre serveur.

# sysctl -p

31. Maintenir les fichiers Word inscriptibles

Les fichiers inscriptibles par Word sont des fils sur lesquels n'importe qui peut écrire. Cela peut être très dangereux car cela permet effectivement aux utilisateurs d'exécuter des exécutables. De plus, votre durcissement Linux n'est pas infaillible à moins que vous n'ayez défini les bits collants appropriés. Un sticky bit est un bit unique qui, lorsqu'il est défini, empêche les utilisateurs de supprimer les répertoires de quelqu'un d'autre.

Ainsi, si vous avez des fichiers inscriptibles par le monde qui ont des bits collants, n'importe qui peut supprimer ces fichiers, même s'ils ne leur appartiennent pas. Il s'agit d'un autre problème grave qui causera souvent des ravages sur la sécurité du serveur. Heureusement, vous pouvez trouver tous ces fichiers en utilisant la commande ci-dessous.

# find /path/to/dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Remplacez l'argument path par des répertoires pouvant contenir de tels fichiers. Vous pouvez également démarrer à partir de la racine '/' de votre système de fichiers, mais cela prendra beaucoup de temps à s'exécuter. Une fois répertoriés, examinez attentivement les fichiers et modifiez leurs autorisations si nécessaire.

32. Maintenir les fichiers sans propriétaire

Les fichiers sans propriétaire sont des fichiers auxquels aucun propriétaire ou groupe n'est associé. Ceux-ci peuvent poser un certain nombre de menaces de sécurité indésirables. Les administrateurs doivent donc prendre les mesures nécessaires pour les identifier. Ils peuvent soit les attribuer aux utilisateurs appropriés, soit les supprimer entièrement.

Vous pouvez utiliser la commande find suivante pour répertorier les fichiers noowner présents dans un répertoire. Consultez ce guide pour en savoir plus sur la commande find sous Linux.

# find /path/to/dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Inspectez soigneusement les résultats pour vous assurer qu'il n'y a pas de fichiers noowner indésirables sur votre serveur.

33. Vérifier les journaux du serveur

La plupart des systèmes Unix utilisent la norme Syslog pour consigner des informations utiles concernant le noyau, le réseau, les erreurs système et bien d'autres. Vous pouvez trouver ces journaux à l'emplacement /var/log. Ils peuvent être visualisés à l'aide de plusieurs commandes de serveur de terminaux sous Linux. Par exemple, la commande ci-dessous affiche les entrées de journal récentes concernant le noyau.

# tail /var/log/kern.log

De même, vous pouvez consulter /var/log/auth.log pour les informations d'authentification.

# less /var/log/auth.log

Le fichier /var/log/boot.log fournit des informations sur le processus de démarrage du système.

# less /var/log/boot.log

Vous pouvez également inspecter les informations sur le matériel et les périphériques à partir de /var/log/dmesg.

# less /var/log/dmesg

Le fichier /var/log/syslog contient des informations de journal sur tout ce qui se trouve dans votre système, à l'exception des journaux d'authentification. Vous devriez l'inspecter pour obtenir un aperçu général de votre serveur.

# less /var/log/syslog

Enfin, vous pouvez utiliser journalctl pour inspecter le journal systemd. Cela donnera une tonne de journaux utiles.

34. Utilisez le package logrotate

Les systèmes Linux collectent les journaux et les stockent pour les administrateurs. Au fil du temps, ces journaux augmenteront en taille et pourraient même entraîner une pénurie importante d'espace disque. Le package logrotate est extrêmement utile dans ce cas car il peut faire pivoter, compresser et envoyer les journaux système. Bien que vous puissiez vous interroger sur son rôle en matière de durcissement de Linux, il offre des avantages incontestables.

Vous pouvez trouver des fichiers de configuration spécifiques au service de logrotate dans le répertoire /etc/logrotate.d. La configuration globale de logrotate se fait via /etc/logrotate.conf. Vous pouvez définir ici divers paramètres, tels que le nombre de jours de conservation des journaux, s'il faut les compresser ou non, etc.

35. Installer Logwatch / Logcheck

Les fichiers journaux contiennent généralement beaucoup d'informations, dont beaucoup ne sont pas pertinentes en termes de renforcement de Linux. Heureusement, les administrateurs peuvent utiliser des packages tels que Logwatch et Logcheck pour surveiller facilement les journaux suspects. Ils filtrent les entrées courantes attendues dans vos journaux et n'attirent votre attention que sur les entrées inhabituelles.

Logwatch est un analyseur de journaux extrêmement puissant qui peut rendre la gestion des journaux beaucoup plus facile. Il convient aux administrateurs à la recherche de solutions tout-en-un car il fournit un rapport unifié de toutes les activités sur leurs serveurs.

# sudo apt-get install logwatch
# yum install -y logwatch

Vous pouvez utiliser les commandes ci-dessus pour l'installer respectivement sur les systèmes Ubuntu/Debian et RHEL/Centos. Logcheck est considérablement plus simple que logwatch. Il envoie un e-mail aux administrateurs dès qu'il y a des journaux suspects. Vous pouvez l'installer en –

# sudo apt-get install logcheck
# yum install -y logcheck

36. Installer les solutions IDS

L'une des meilleures méthodes de durcissement Linux pour les serveurs consiste à utiliser un IDS (logiciel de détection d'intrusion). Nos éditeurs recommandent fortement l'environnement de détection d'intrusion avancée (AIDE) à cette fin. Il s'agit d'un IDS basé sur l'hôte qui offre de nombreuses fonctionnalités robustes, notamment plusieurs algorithmes de résumé de message, des attributs de fichier, la prise en charge des expressions régulières, la prise en charge de la compression, etc.

# apt-get install aide
# yum install -y aide

Vous pouvez installer sur Ubuntu/Debian et RHEL/Centos en utilisant les commandes ci-dessus. De plus, vous devez également installer des vérificateurs de rootkit si vous souhaitez maintenir la sécurité Linux. Les rootkits sont des programmes nuisibles conçus pour prendre le contrôle d'un système. Certains outils populaires pour la détection des rootkits sont Chkrootkit et rkhunter.

37. Désactiver les périphériques Firewire/Thunderbolt

C'est toujours une bonne idée de désactiver autant de périphériques que possible. Cela sécurise votre serveur contre les attaquants qui ont obtenu un accès direct à l'infrastructure. Plus tôt, nous avons montré comment désactiver les périphériques USB. Cependant, des utilisateurs malveillants peuvent toujours connecter des modules FireWire ou Thunderbolt.

Firewire est le nom générique de l'interface matérielle IEEE 1394. Il est utilisé pour connecter des appareils numériques tels que des caméscopes. Désactivez-le en utilisant la commande suivante.

# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf

De même, l'interface Thunderbolt fournit des connexions entre votre système et des périphériques à haut débit tels que des stockages sur disque dur, des matrices RAID, des interfaces réseau, etc. Vous pouvez le désactiver en utilisant la commande ci-dessous.

# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf

38. Installer les solutions IPS

Un IPS ou logiciel de prévention des intrusions protège les serveurs réseau des attaques par force brute. Étant donné qu'un nombre considérable d'utilisateurs et de bots malveillants tentent d'accéder à votre serveur distant, la configuration d'un IPS approprié vous aidera à long terme.

Fail2Ban est l'une des solutions IPS les plus populaires pour les systèmes de type Unix. It is written using Python and is available on all POSIX-compliant platforms. It will look for obtrusive network requests all the time and block them as soon as possible. Install Fail2Ban using the below command.

# apt-get install -y fail2ban
# yum install -y fail2ban

DenyHosts is another popular IPS solution for Linux hardening. It will protect your ssh servers from intrusive brute force attempts. Use the following commands to install in on your Debian or Centos servers.

# apt-get install -y denyhosts
# yum install -y denyhosts

39. Harden the OpenSSH Server

OpenSSH is a software suite consisting of networking utilities that provide secure communication over public networks. The OpenSSH server has become the de-facto application for facilitating ssh connections. However, the bad guys also know this and they frequently target OpenSSH implementations. So, hardening this application should be a top concern for all Linux sysadmin.

For example- always use keys over password when initiating a new session, disable superuser login, disable empty passwords, limit user access, set up firewalls on port 22, set idle timeouts, use TCP wrappers, limit incoming requests, disable host-based authentication, and so on. You may also employ advanced Linux hardening methods like chrooting OpenSSH.

40. Utilize Kerberos

Kerberos is a computer network authentication protocol that allows access to computerized infrastructures based on tickets. It uses very hard to break cryptographic logic which makes systems supported by Kerberos very secure. Admins can protect their system from eavesdropping attacks and similar passive networking attacks very easily if they use the Kerberos protocol.

Kerberos is being developed by MIT and provides several stable releases. You can download the application from their website. Consult the documentation to see how it works and how you can set it up for your usage.

41. Harden Host Network

Admins should employ strong network policies in order to protect their secure servers against malicious hackers. We have already outlined the necessity of using intrusion detection systems and intrusion prevention systems. However, you can harden your host network further by doing the following tasks.

# vim /etc/sysctl.conf
net.ipv4.ip_forward=0
# disbale IP forwarding

net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
# disable send packet redirects

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
# disable ICMP redirects

net.ipv4.icmp_ignore_bogus_error_responses
# enable bad error message protection

We’ve added comments using the hash symbol to outline the purpose of these network parameters.

42. Utilize AppArmor

AppArmor is a Mandatory Access Control (MAC) mechanism that makes it possible to restrict the usage of system resources based on programs. It allows admins to mandate policies on a program-level rather than users. You can simply create profiles that control the access to network, sockets, file permissions, and so on for your host applications.

Recent Debian/Ubuntu systems come with AppArmor pre-installed. The pre-existing AppArmor profiles are stored in the /etc/apparmor.d directory. You can modify these policies or even add your own policies during the Linux hardening process. Use the below command to view the AppArmor status in your system.

# apparmor_status

43. Secure Web Server

Linux servers are widely used for powering web applications. If you’re using your server for this purpose, you need to harden your server components appropriately. Some of these the PHP runtime, Apache HTTP server, and the Nginx reverse proxy server. Secure your Apache server by adding the below lines in the configuration file.

# vim /etc/httpd/conf/httpd.conf
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By
# systemctl restart httpd.service

We’ve prepared a standalone guide on the Nginx server a while ago. Follow the suggestions in that guide to secure your Nginx server. Head over to this documentation for learning the best PHP security practices.

44. Configure TCP Wrappers

TCP wrappers are a host-based network filtering system that allows or denies access to your host services based on pre-set policies. However, for it to work, your host service must be compiled against the libwrap.a bibliothèque. Some common TCP wrapperd Unix daemons include sshd, vsftpd, and xinetd.

# ldd /sbin/sshd | grep libwrap

This command will notify if a service is supported by TCP wrappers or not. The TCP wrappers system enforces access control using two configuration files, the /etc/hosts.allow and /etc/hosts.deny. For example, add the following lines to /etc/hosts.allow for allowing all incoming requests to the ssh daemon.

# vi /etc/hosts.allow
sshd : ALL

Add the following to /etc/hosts.deny for rejecting all incoming requests to the FTP daemon.

# vi /etc/hosts.deny
vsftpd : ALL

To see more information about the configuration options, consult the tcpd man page, or visit this documentation from FreeBSD.

45. Maintain Cron Access

Linux provides robust automation support by means of cron jobs. In short, you can specify routine tasks using the cron scheduler. Visit our earlier guide on cron and crontab to learn how cron works. Nevertheless, admins must make sure that ordinary users are unable to access or put entries in the crontab. Simply put their usernames in the /etc/cron.deny file to do this.

# echo ALL >>/etc/cron.deny

This command will disable cron for all users in your server except root. To allow access for a specific user, add his username to the /etc/cron.allow file.

46. Disable Ctrl+Alt+Delete

The Ctrl+Alt+Delete key combinations allow users to force reboot many Linux distributions. This can be particularly problematic if you’re managing a secure server. Admins should disable this hotkey in order to maintain proper Linux hardening. You can run the following command to disable this in systemd-based systems.

# systemctl mask ctrl-alt-del.target

If you’re on legacy systems that use init V instead of systemd, edit the /etc/inittab file and comment out the following line by appending a hash before it.

# vim /etc/inittab
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

47. Enable NIC Bonding

NIC or Network Interface Card bonding is a form of link aggregation in Linux. Multiple network interfaces are joined in this method for gaining better resource availability and throughput. If you’re maintaining busy Linux servers, you can use this method for reducing the workload on a single interface and distribute them across multiple interfaces.

The whole process of NIC bonding differs between Debian and RHEL/Centos systems. We will cover them in a standalone guide soon. For now, simply remember that you can achieve better reliability by enabling network bonding.

48. Restrict Core Dumps

Core dumps are memory snapshots that contain crash information of executables. These are created when binaries stop working or crash in simple terms. They contain too much sensitive information about the host system and may threaten your Linux security if fallen into the wrong hands. Thus, it is always a good idea to restrict core dumps on production servers.

# echo 'hard core 0' >> /etc/security/limits.conf
# echo 'fs.suid_dumpable = 0' >> /etc/sysctl.conf
# sysctl -p
# echo 'ulimit -S -c 0 > /dev/null 2>&1' >> /etc/profile

Run the above commands to restrict cor dumps on your server and increase Linux hardening.

49. Enable Exec Shield

The Exec Shield project was developed by Red Hat for protecting Linux systems against automated remote attacks. It performs particularly well against various buffer overflow-based exploits. You can enable exec shield for your Linux server by running the below commands.

# echo 'kernel.exec-shield = 1' >> /etc/sysctl.conf
# echo 'kernel.randomize_va_space = 1' >> /etc/sysctl.conf

This method will work on both Debian and RHEL systems.

50. Create Regular Backups

No matter how many Linux hardening methods you apply, you need to be always prepared for unforeseen problems. Backing up your workstation or server can prove extremely beneficial in the long run. Thankfully, a large number of backup utility for Linux exists to make system backups easier.

Moreover, you must automate the backup process and store your system data safely. Employing disaster management and recovery solutions can be also useful when it comes to data management.

Ending Thoughts

Although Linux is much more secure when compared to home operating systems, admins still need to maintain a set of Linux hardening policies. We have compiled this guide with many of the best practices used by Linux security experts. You should try to employ as many of them as possible. However, do not apply these without understanding their effect on your system. You need to have a foolproof plan as well as a good understanding of server security to keep your system safe from malicious users. Hopefully, we provided you the essential tips you were looking for.


Linux
  1. 8 conseils pour la ligne de commande Linux

  2. Hyper - La meilleure application de terminal pour Linux

  3. Meilleures pratiques de sécurité Wordpress sous Linux

  4. Les meilleurs serveurs Web Linux

  5. Linux ou Windows - le problème de sécurité

Les 20 meilleurs outils de sécurité Linux :le choix de l'expert Linux

Les 15 meilleurs outils de récupération de données Linux :le choix des professionnels

Les 15 meilleurs logiciels économétriques et statistiques pour système Linux

Les 20 meilleurs logiciels d'exploration de données pour Linux Desktop

Comment sécuriser correctement sysctl sous Linux :Conseils de renforcement de la sécurité

Les 8 meilleurs téléphones sécurisés Linux pour la confidentialité et la sécurité