Le renforcement du serveur est le processus d'amélioration de la sécurité du serveur par diverses méthodes. Nous avons beaucoup d'étapes pour sécuriser un serveur. Protégez-vous et votre entreprise en protégeant vos systèmes Linux contre les pirates, les pirates et les attaquants ! Vous pouvez transformer une boîte vulnérable en un serveur renforcé en suivant les étapes suivantes. Cela vous aidera à prévenir les attaques extérieures. Ici, je décris le renforcement du serveur de CentOS.
Ce qu'il faut savoir
Ce guide vous guide à travers les étapes nécessaires pour renforcer la sécurité de CentOS 7. Le renforcement d'un système le rendra plus restrictif et vous risquez de rencontrer des problèmes. Je recommande de créer une machine virtuelle en double que vous pouvez utiliser pour le dépannage. Vous trouverez ci-dessous une liste des étapes de base que vous pouvez et devez suivre pour renforcer vos serveurs immédiatement après le provisionnement.
1. Accès à distance sécurisé
Parfois, nous accédons à notre serveur par des méthodes distantes et si ce n'est pas plus sécurisé, nous pouvons exposer notre serveur. Les options OpenSSH sont contrôlées via le /etc/ssh/sshd_config
fichier.
un. Désactiver la méthode d'authentification par mot de passe SSH et activer la méthode d'authentification par clé publique
Il est important de désactiver la méthode de connexion à distance par mot de passe et d'activer la clé publique d'authentification
Modifier ChallengeResponseAuthentication et PasswordAuthentication à non pour désactiver la méthode du mot de passe
PasswordAuthentication nonChallengeResponseAuthentication non
Autoriser l'authentification par clé publique
RSAAuthentication yesPubkeyAuthentication yes
maintenant vous pouvez générer une nouvelle paire de clés
# ssh-keygen -t rsa
b. Désactiver la connexion root directe
Il s'agit d'un risque de sécurité pour permettre à root de se connecter directement au serveur. Au lieu de cela, vous devez vous connecter au système avec votre compte, puis faire su - pour vous connecter en tant que root. Vous devez donc modifier PermitRootLogin yes à PermitRootLogin non
No de connexion racine autorisée
c. Changer le port d'écoute SSH par défaut (ex :8500)
Parfois, il n'est pas recommandé d'utiliser le port par défaut car il est connu du monde entier et constitue un risque pour la sécurité. Il est bon de personnaliser le port à utiliser
port 8500
2. Sécuriser le Boot Loader avec le mot de passe grub
En sécurisant le chargeur de démarrage, nous pouvons empêcher l'accès au mode mono-utilisateur qui se connecte automatiquement en tant que root. Cela se fait avec GRUB en définissant un mot de passe qui est stocké en texte brut par défaut.
Pour le système Debian
# grub-mkpasswd-pbkdf2
Pour Centos
# grub2-mkpasswd-pbkdf2
3. Ports réseau d'écoute
Après avoir configuré les services réseau, il est important de prêter attention aux ports qui écoutent réellement sur les interfaces réseau du système. Tout port ouvert peut être la preuve d'une intrusion.
# nmap -sT -O localhostDémarrage de Nmap 6.40 ( http://nmap.org ) au 2017-06-07 23:13 UTCNmap scan report for localhost (127.0.0.1)Host is up (0.000061s latency).Autre adresses pour localhost (non analysées) :127.0.0.1rEnregistrement DNS pour 127.0.0.1 : centos-01Non affiché :995 ports fermésPORT STATE SERVICE22/tcp open ssh25/tcp open smtp80/tcp open http111/tcp open rpcbind2049/tcp open nfsPour lister tous les ports ouverts et les programmes associés, utilisez la commande ci-dessous
# netstat -tulpnConnexions Internet actives (serveurs uniquement)Proto Recv-Q Send-Q Adresse locale Adresse étrangère État PID/Nom du programme tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0 .0.0:20048 0.0.0.0:* ECOUTEZ4. Affiner les autorisations
Limitez les autorisations pour les fichiers et dossiers système afin de limiter les risques.
# chmod 700 /racine# chmod 700 /var/log/audit# chmod 740 /etc/rc.d/init.d/iptables# chmod 740 /sbin/iptables# chmod -R 700 /etc/skel# chmod 600 /etc/rsyslog.conf# chmod 640 /etc/security/access.conf# chmod 600 /etc/sysctl.conf5. Vérification des comptes pour les mots de passe vides
Tout compte ayant un mot de passe vide signifie qu'il est ouvert pour un accès non autorisé à quiconque sur le Web et cela fait partie de la sécurité au sein d'un serveur Linux. Pour vérifier les comptes avec un mot de passe vide, utilisez la commande ci-dessous
# chat /etc/shadow | awk -F :'($2==""){print $1}'paulPour des raisons de sécurité, il est bon de verrouiller tous les comptes de mots de passe vides :
# passwd -l paulVerrouillage du mot de passe pour l'utilisateur paul.passwd :succès6. Régler les paramètres du noyau
Sysctl est une interface permettant d'examiner et de modifier dynamiquement les paramètres du système d'exploitation Linux. Modifier
/etc/sysctl.conf
fichier pour optimiser les paramètres du noyauSysctl est la commande utilisée pour modifier les paramètres du noyau lors de l'exécution.
# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter:
# sysctl -p
Copiez-collez le contenu suivant dans
/etc/sysctl.conf
# Turn on execshield kernel.exec-shield=1 kernel.randomize_va_space=1 # Enable IP spoofing protection net.ipv4.conf.all.rp_filter=1 # Disable IP source routing net.ipv4.conf.all.accept_source_route=0 # Ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_messages=1 # Make sure spoofed packets get logged net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # Disable ICMP routing redirects sysctl -w net.ipv4.conf.all.accept_redirects=0 sysctl -w net.ipv6.conf.all.accept_redirects=0 sysctl -w net.ipv4.conf.all.send_redirects=0 sysctl -w net.ipv6.conf.all.send_redirects=0 # Disables the magic-sysrq key kernel.sysrq = 0 # Turn off the tcp_sack net.ipv4.tcp_sack = 0 # Turn off the tcp_timestamps net.ipv4.tcp_timestamps = 0 # Enable TCP SYN Cookie Protection net.ipv4.tcp_syncookies = 1 # Enable bad error message Protection net.ipv4.icmp_ignore_bogus_error_responses = 1
7. Désactiver les services indésirables
Vous devez supprimer tous les services et démons indésirables (services qui s'exécutent en arrière-plan) du démarrage du système qui sont lancés au démarrage en niveau d'exécution 3 .
# chkconfig --list | grep '3:on'
Pour désactiver le service, saisissez :
# service serviceName stop # chkconfig serviceName off
8. Exiger une authentification pour le mode mono-utilisateur
Il est recommandé d'exiger un mot de passe root lors de l'entrée en mode mono-utilisateur. Ouvrez
/etc/sysconfig/init
fichier et ajoutez la ligne :SINGLE=/sbin/sulogin
9. Sécurité améliorée Linux (SELinux)
SELinux est un ensemble de règles de sécurité qui déterminent quel processus peut accéder à quel fichier, répertoires, ports, etc. Chaque fichier, processus, répertoire et port a une étiquette de sécurité spéciale appelée contextes SELinux. Un contexte est simplement un nom utilisé par la politique SELinux pour déterminer si un processus peut ou non accéder à un fichier, un répertoire ou un port. Par défaut, la politique n'autorise aucune interaction, donc des règles explicites accordent l'accès. S'il n'y a pas de règle d'autorisation, aucun accès n'est autorisé.
getenforce La commande nous indique dans quel mode se trouve SELinux.
Nous pouvons changer le mode SELinux en application en modifiant
SELINUX=enforcing
dans/etc/sysconfig/selinux
Il y a trois directives dans ce fichier comme expliqué ci-dessous.
- Application : La politique de sécurité SELinux est appliquée.
- Permissif : SELinux affiche des avertissements au lieu de les appliquer.
- Désactivé : SELinux est entièrement désactivé.
Vous pouvez vérifier l'état de SELinux avec la commande
# sestatus
SELinux status: disabled
Vous voyez qu'il est désactivé. Pour l'activer, vous pouvez utiliser
# setenforce enforcing
10. Configurer le pare-feu avec iptables
iptables est un programme d'application d'espace utilisateur qui permet à un administrateur système de configurer les tables fournies par le pare-feu du noyau Linux et les chaînes et règles qu'il stocke.
un. Fermez tous les ports indésirables
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
b. Bloquer les mauvaises IP
iptables -A INPUT -s IP_ADDRESS -j DROP
c. Bloquer les connexions à une interface réseau
Pour bloquer les connexions d'une adresse IP spécifique à une interface réseau spécifique, utilisez la commande
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP
d. Lister les règles iptables
Vous pouvez voir toutes les règles iptables par la commande
iptables -L -n -v
11. Vérification du système de fichiers
Tous les fichiers activés par les bits SUID/SGID peuvent être utilisés pour des activités malveillantes, lorsque l'exécutable SUID/SGID a un problème de sécurité. Tout utilisateur local ou distant peut utiliser ce fichier.
un. Identifiez les binaires SUID et SGID indésirables
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
b. Identifiez les fichiers accessibles en écriture par le monde
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
c. Identifier les fichiers et dossiers orphelins
find /dir -xdev \( -nouser -o -nogroup \) -print
12. Conserver /boot en lecture seule
Le noyau Linux et ses fichiers associés se trouvent dans le répertoire /boot qui est par défaut en lecture-écriture. Le changer en lecture seule réduit le risque de modification non autorisée des fichiers de démarrage critiques. Nous devons éditer /etc/fstab
fichier et insérez la ligne ci-dessous<
LABEL=/boot /boot ext2 defaults,ro 1 2
13. Refuser tous les wrappers TCP
Les wrappers TCP peuvent fournir une méthode simple et rapide pour contrôler l'accès aux applications qui leur sont liées. Il est donc recommandé de bloquer toutes les applications non utilisées puis d'autoriser uniquement les applications qui seront utilisées.
Par exemple, nous bloquerons toutes les applications mais uniquement ssh autorisé
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
14. Verrouiller les cronjobs pour les utilisateurs non autorisés
Cron est utilisé pour automatiser les tâches à un certain moment. Il est possible de spécifier qui peut et ne peut pas exécuter les travaux. Ceci est contrôlé par l'utilisation de fichiers appelés /etc/cron.allow
et /etc/cron.deny
. Pour verrouiller un utilisateur utilisant cron, ajoutez simplement des noms d'utilisateur dans cron.deny et autorisez un utilisateur à exécuter cron add dans le fichier cron.allow.
# echo ALL >>/etc/cron.deny
15. Sécuriser le serveur contre le débordement de buffer
Un débordement de tampon se produit lorsqu'un programme ou un processus tente d'écrire plus de données dans un bloc de mémoire de longueur fixe, ou tampon, que le tampon n'est alloué pour en contenir. Il est important de protéger votre serveur contre cette attaque
un. Activer ExecShield
Cela aide à prévenir l'écrasement de la pile. En règle générale, un exploit de dépassement de mémoire tampon écrase une adresse de retour afin qu'une fonction revienne à une adresse choisie par l'attaquant. Vous devez activer sur le noyau actuel
sysctl -w kernel.exec-shield=1
Vous pouvez également ajouter la ligne ci-dessous à /etc/sysctl.conf
kernel.exec-shield = 1
b. Vérifier / Activer ASLR
La randomisation de la disposition de l'espace d'adressage est une fonction de défense qui rend les dépassements de mémoire tampon plus difficiles. L'ASLR rend difficile pour l'attaquant de trouver une adresse vers laquelle sauter. Vous devez activer le placement de région de mémoire virtuelle aléatoire en définissant le temps d'exécution pour kernel.randomize_va_space
sysctl -q -n -w kernel.randomize_va_space=2
Ajoutez la ligne ci-dessous à /etc/sysctl.conf
s'il n'existe pas déjà
kernel.randomize_va_space = 2
Conclusion
Voici quelques-unes des considérations de base pour les nouveaux utilisateurs essayant d'exécuter leurs propres serveurs. Gardez à l'esprit que les crackers ont toujours une longueur d'avance; ils continuent à chercher des trous pour pirater votre serveur. Il est important de reconnaître que, même s'il vaut mieux tard que jamais, l'efficacité des mesures de sécurité diminue à mesure que vous attendez pour les mettre en œuvre