Configuration et sécurisation d’un serveur Linux Debian: Partie 2
Agence web » Actualités du digital » Sécurisation et monitoring d’un serveur Linux Debian

Sécurisation et monitoring d’un serveur Linux Debian

Nous allons tout d’abord nous attaquer à la sécurisation du serveur ! Il est indispensable de se protéger un minimum  des scripts qui se baladent sur le net à la recherche d’une petite machine comme la nôtre à transformer en botnet.

Firewall

La carte ethernet du serveur est directement connecté a internet. C’est donc le serveur lui même qui fait office de par feu. Pour ce chapitre je vous propose de récupérer un script simple que l’on va installer. Celui-ci fonctionne de la façon suivante:

  • On bloque tout le trafic entrant
  • On laisse le trafic sortant libre. Le serveur va ou il veut.
  • On autorise le ping
  • Empêcher le syn flood
  • Empêcher le scan de port
  • Enfin ouverture de deux services de base: SSH et HTTP

Vous allez devoir modifier ce script au fur et à mesure de l’implémentation de nouveau service sur vôtre machine. Pour cela vous devez connaitre le port en écoute et le protocole (TCP et/ou UDP).

Par exemple si vous installé un serveur de chat vocale comme mumble, ce dernier écoute sur le port 64738 en TCP et en UDP. Il faut alors ajouter les lignes suivantes au script

Bref je ne donne pas plus d’explication. Vous trouverez ce qu’il faut sur Google en cas de besoin.

Allé on installe le script. Déja pour commencer si vous n’avez pas GIT d’installé il faut taper ça

On récupère le code

On se place dans le dossier

On copie le script dans la init.d

On le rend exécutable

On le place au démarrage

Et enfin, on le lance

Protection anti-intrusion

Les machines exposées au réseau Internet, sont continuellement la cible de tentatives d’attaques de type brute force et DOS. Pour s’en protéger nous allons mettre en place un petit programme du nom de Fail2Ban.

Pour rappel, Fail2Ban est un programme écrit en python et disponible dans la plupart des dépôts Linux qui à pour but de prévenir des attaques de type brute-force.  Fail2ban lit les logs de divers serveurs (SSH, Apache, FTP…) à la recherche d’erreurs d’authentification répétées et ajoute une règle iptables pour bannir l’adresse IP de la source.

Installation

Il y a plusieurs modifications à effectuer pour utiliser correctement Fail2Ban:

  • Fail2ban doit démarrer APRES le script firewall dans l’initd. Comment faire ça ? il faut modifier le script /etc/init.d/fail2ban et rajouter dans les tags LSB dans les Required-Start le nom du script firewall. Du coup, si le script firewall est nommé “myfirewall” dans ses tags LSB, les tags LSB du fail2ban doivent ressembler à ça :

  • Par défaut, les prisons (jails) de fail2ban sont un peu trop permissives, il faut les changer pour que le nombre d’essais soit plus petit et le temps de ban soit plus long. Ça se passe dans /etc/fail2ban/jail.conf, voici un exemple de conf :

  • Dans ce même fichier de configuration on va changer l’adresse email de contact

  • Et enfin, toujours dans ce fichier de configuration, on change l’action par défaut pour que Fail2Ban envoi un mail avec un rapport complet sur l’adresse bannie.

  • Un problème problème avec fail2ban, c’est qu’il ne persiste pas les ips bannies… Quand on redémarre, les méchants sont unbans et c’est open-bar pour eux de nouveau. Pour persister les ips bannies, il faut modifier le fichier /etc/fail2ban/action.d/iptables-multiport.conf qui définit (entre autres) les actions en cas de ban et en cas de démarrage de fail2ban. En cas de ban, on ajoute l’ip à un fichier texte. Au start de fail2ban, on lit ce fichier texte et on bannit toutes les ips qu’il contient.

  • Un truc pas mal aussi, si vous avez plusieurs serveurs, c’est de savoir qui envoi le mail. Pour cela on édite le fichier /etc/fail2ban/action.d/sendmail-whois-lines.conf. En ce qui me concerne j’ai modifié pour les 3 actions (actionstart, actionstop et actionban) la valeur entre croché ou il est écrit “[Fail3Ban]” par le nom de mon serveur.

Par défaut seul la prison SSH est active. Vous trouverez à la fin du fichier de configuration /etc/fail2ban/jail.conf une liste de prison pré-configurée. Pour les activer il suffit de changer l’état de la variable “enabled”. Par exemple si l’on installe un serveur web par la suite on activera la prison correspondante comme cela

Il ne reste qu’a relancer le programme pour prendre en compte les changements

Protection contre le scan de ports

C’est l’une des premières étapes pour effectuer le piratage d’une machine sur internet: le scan de ports.

Cette technique consiste à effectuer un balayage des  ports ouverts sur la machine cible. Chacun de ses ports correspondant à des services accessibles. Le pirate peut ensuite chercher une faille à exploiter dans l’un des services en question pour s’introduire sur vôtre système. On va mettre en place un outil pour empêcher ce scan.

Installation de portsentry

La configuration s’effectue dans le fichier /etc/portsentry/portsentry.conf. Je vous affiche ici uniquement les lignes à modifier

On redemarre le service pour prendre en compte

Test depuis un client Linux. Attention cette ligne de commande va provoquer le bannissement de l’IP à l’origine de l’attaque.

Pour enlever le ban on supprime la route.

Puis on édite le fichier /etc/hosts.deny et on supprime la ligne de l’ip correspondante qui ressemble a ceci

Le serveur est suffisamment protégé pour le moment. D’autres sécurités seront mis en place au fur et à mesure de la mise en place de service.

On va passer à la dernière étape de la configuration du serveur: le monitoring.

A ce stade le serveur fonctionne bien et possède une sécurisation minimale. Mais qu’arrive-t-il si pour une raison ou une autre un des services tombe ? Dans ce dernier chapitre on va se concentrer sur la partie monitoring du serveur.

Monitoring et surveillance du disque dur

Le disque dur est un organe central d’un serveur dédié. Avec le temps, de petites détériorations peuvent apparaître et entraîner une perte de données ou une instabilité du système.

Si comme moi vous avez un serveur Kimsufi chez OVH, il faut savoir que la surveillance du disque dur de la machine est à vôtre charge. En cas de panne de ce dernier il vous faudra prévenir l’hébergeur afin qu’il procède au remplacement de la pièce.

L’idée est donc de contrôler l’état du disque du serveur afin de diagnostiquer un éventuel problème qui pourrait conduire au changement préventif du disque. Pour cela nous allons utiliser le protocole SMART. SMART est une technologie implémentée dans les disques durs permettant permet ainsi de collecter en permanence des informations sur la santé du matériel.

Comme d’habitude l’installation s’effectue via le gestionnaire de paquets

On va identifier le disque avec la commande fdik -l.

fdisk

Le disque est donc sda. Normalement c’est sda si vous n’avez qu’un seul disque dans le serveur.

Petit test rapide en manuel

La commande doit retourner

Si la commande ne retourne pas “PASSED” c’est que le disque est en train de passer l’arme à gauche.

On va vérifier à présent se qui est faisable avec le SMART de vôtre disque.

Ce qui donne pour le disque de mon serveur perso

smart-abilities

La ligne intéressante est “Self-test supported”. Le disque peut s’auto diagnostiquer.

Cette ligne vous donne aussi une idée des durées de test estimés. Pour un test court (short) c’est une minute dans mon cas. 43 minutes pour un long (Extended).

On va justement lancer un test rapide

Le résultat nous demande d’attendre une minute.

A la fin de cette minute on peut regarder le résultat avec la commande:

Qui nous donne

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 8867 –
# 2 Short offline Completed without error 00% 8863 –

Completed without error donc c’est tout bon! Bref ça c’était la partie manuel pour se rassurer que tout va bien. On va maintenant automatiser un peu. Pour cela rien de plus simple. Smartmontools est livré avec son propre deamon qu’il faut juste régler.

Pour que le démon se lance au démarage du serveur on décommante la ligne suivante dans le fichier /etc/default/smartmontools

On édite ensuite le fichier /etc/smartd.conf.

On commande la ligne par défaut.

On ajoute notre disque.

Explication des paramètres

-a : Monitor la santé du disque

-d : Précise le type de disque

-o : Offline test

-S : Autosave

-m : adresse ou envoyer le mail d’alerte

-M : en mode test pour vérifier de suite que l’envoi de mail est ok

On démarre le programme pour prendre en compte les changements.

On reçoit le mail de test

mail_test_smartmontools

C’est tout bon, on édite à nouveau le fichier de configuration pour remplacer le paramètre -M comme ceci

On redémarre pour prendre en compte et c’est fini. Le prochain mail reçu de sa part sera à prendre avec considération car cela voudra dire qu’il y a un problème avec le disque.

Petite supervision

Je dis “petite” parce que en terme de supervision il existe de l’artillerie lourde sur Linux (nagios, centreon, skinken,etc…). Ici on va juste mettre en place un petit outil sous forme de script qui se place dans le cron et qui se nomme MotdStat.

Ce petit programme permet deux choses:

  • Un petit monitoring du serveur avec des alertes par mail
  • Afficher certaines constantes à la connexion ssh

Voila une petite idée de se que l’outil propose comme affichage à la connexion SSH

motdstat

Le programme n’est pas disponible dans les dépôts officiels. Il faut récupérer l’archive sur le site ici. Pour l’installer il faut compiler les sources.

Pour tester

Le message est alors généré dans le fichier /etc/motd et doit apparaître après le login de connexion  SSH.

On ajoute cette même ligne de commande au crontab de façon à automatiser la génération par exemple toutes les 5 minutes.

Editer la crontab

On ajoute la ligne suivante et on ferme le fichier

Toutes les 5 minutes, le fichier /etc/motd (motd = message of the day ), sera mis à jour avec les dernières constantes relevées du système.

Toute la configuration se passe au même endroit , soit dans /etc/motdstat , ou vous pouvez lister les fichiers suivants :

  • fstab_limits : ici on ajoute les partitions à surveiller avec la limite à atteindre avant une alerte mail

  • motdstat.conf : Configuration principale du programme. C’est ici que l’on va saisir le mail de destination des alertes par exemple

  • netservice : Surveillance des ports qui doivent être en écoute sur la machine

  • process : Les processus qui doivent tourner sur la machine

Les fichiers de configuration plutôt simple je ne détaillerai donc pas plus.

En cas de problème comme l’arrêt d’un service ou le dépassement du seuil d’espace disque, un mail vous sera envoyé. Dans l’exemple, le cron lance le script toute les 5 minutes. A vous de choisir quel délais de détection via la ligne du crontab. Sachez toutefois qu’un mail part à chaque lancement du script en cas d’alerte tant que vous n’avez pas réglé le problème.

★★★★★