Méthodologie pour sécuriser un serveur Linux

Intro


Je ne vais pas faire un énième tuto sur comment sécuriser votre serveur, je vais plutôt vous donner la méthodologie et quelques outils, permettant de faire des recherches par vous-même

Il peut être compliqué de trouver quelque chose quand on ne sait pas où chercher.

Les deux choses importantes dans la sécurité

  • C’est de voir toujours plus loin, prévoir les choses.
  • Ne jamais être satisfait, c’est ce qui vous permettra d’être toujours à l’affût des nouveautés en matière de sécurité

Pourquoi la sécurité est importante


Votre expérience
Petit il vous est arrivé de tomber à plusieurs reprises, la première fois sans vous protéger, la seconde aussi, la troisième le cerveau a compris, les mains se sont mises entre vous et le sol.
Sans la sécurité aujourd’hui encore vous finiriez le nez par terre plutôt que sur vos mains.

L’expérience liée au monde qui vous entoure
Vous avez déjà aperçu un événement qui a permis de ne pas reproduire une erreur faite par d’autres.

Ce sont des exemples concrets de sécurité ? La sécurité c’est aussi :

  • Mettre de l’argent de côté pour prévoir les coups durs de la vie
  • Ne pas laisser ses clés de voiture dans le pare-soleil (comme dans les films) :)
  • Éviter de donner votre numéro de carte bleue à n’importe qui

Pourquoi vous sécurisez ? Tout simplement pour vous faire gagner du temps ou... ne pas en perdre.

Évitez L’Hôpital, les constats, de faire opposition, etc.

Pour votre serveur, c’est pareil. Gagner du temps et ne pas refaire ce qui a déjà été fait. Vous êtes sûrement quelqu’un qui aime les choses bien faites, ou feignant pour ne pas avoir à les refaire. Sinon pourquoi lire cet article ?

1 Qui est concerné ?


Tout le monde est touché par la sécurité, si vous pensez ne pas l’être alors posez-vous les questions suivantes :

Ce serveur est-il important pour moi ?

Amène-t-il des bénéfices ?

Représente-t-il ma société ?

Ma base client est-elle dessus ?

Si l’une des quatre réponses est positive alors je vous conseille de changer d’avis

Ne vous inquiétez pas, vous pouvez sécuriser à minima votre système et vos services seul, il suffit de vouloir faire des recherches et de se poser des questions

Ca serait un plus après avoir fait le maximum, de faire intervenir un expert pour qu’il vous guide sur ce que vous pouvez encore améliorer.

Je pense que j’ai déjà perdu 80 % de mes lecteurs :)

2 Quelles questions se poser


Vous venez de suivre un tuto que vous avez appliqué sur votre serveur dédié, tout fonctionne. Avant d’écrire votre premier article, ne serait-il pas judicieux de sécuriser votre serveur au minimum :

Prenez une feuille et notez le nom de la distribution installée.

Lister tous les services mis en place sur cette distribution.

Exemple qui servira pour la suite de l'article

système
debian 10 (buster)

Services et outils
sudo (permet de passer un utilisateur root provisoirement)
openssh-server (pour se connecter au serveur)
Apache2
php 7 avec différents modules utiles au bon fonctionnement de mon site

Chaque fois que vous lisez un article qui vous propose un outil faites les vérifications suivantes

  • l’outil est-il sécurisé ?
  • Est-il toujours maintenu à jour ? (c’est la chose la plus importante)
  • Lire les commentaires, ce sont des retours d’expérience précieux
  • Allez sur le site de l’outil pour voir à quand date la dernière mise à jour

Si apt ou tout autre gestionnaire de paquet ne trouve pas le paquet que vous souhaitez installer, regardez pourquoi. Cela vous indiquera sûrement qu’il n’est plus maintenu (ne vous servez pas que de cela pour vérifier si l’outil est maintenu)

Vous pouvez aussi trouver des articles d’experts en sécu qui parleront du produit et de ses faiblesses.

Faite la recherche suivante :
cve security database

3 Backup


La sauvegarde c’est la base de tout en informatique. Certains hébergeurs vous proposent la possibilité de faire des snapshot ou backup de votre serveur. Avant de le sécuriser faites en une, en cas de gros pépin vous pourrez restaurer.

Si vous n’en avez pas. Avant chaque modification de fichier, faites une sauvegarde de celui-ci.

Exemple

cp update.conf update.conf.sav.`date +'%d%m%Y'`
#Je vous laisse chercher la signification de cette partie `date +'%d%m%Y'

recherches à effectuer sur internet ou dans le terminal
man date

Noté aussi tous les paquets que vous installez, pour pouvoir les supprimer si le produit ne convient pas

Attention : lors de la suppression d’un paquet qui ne convient pas. Parfois les gestionnaires de paquets suppriment des paquets qui ne devraient pas l’être. Pensez donc à faire un screen lors des installations pour conserver la liste de tous les paquets à supprimer lors de la désinstallation.

Exemple

apt purge nomdupaquet 

Apt purge supprime tout ce qui concerne le paquet et ses dépendances, ainsi que les fichiers de configuration du paquet supprimé

3.1 Faites une export de la liste des paquets installés


recherche à effectuer sur internet
backup liste paquet apt
 
Ils vous expliqueront comment exporter la liste des paquets dans un fichier texte.

Attention, la liste contiendra tous les paquets de la distribution, cela peut servir si vous réinstallez sur le même OS. Sinon lors de l'installation de paquets, notez les noms dans un fichier texte.

Il y a 2 commandes qui tiennent sur une ligne chacune

  • Une pour la sauvegarde
  • Une pour la restauration

3.2 Sauvegarder vos fichiers en créant une archive


Créer le fichier /etc/cron.weekly/backup (vous pouvez choisir un autre nom)

cron.weekly est une tâche qui s’exécute toutes les semaines, le dimanche à 6h47, c’est visible dans /etc/crontab

Dans ce fichier, vous allez avoir besoin de créer une archive avec tous les fichiers modifiés sur le système. Ainsi que le fichier qui liste les applications installées (vues au-dessus)

Voici à quoi le contenu du fichier va ressembler

#!/bin/bash

dpkg --get-selections > /home/USER/package-selections
/bin/tar jcvf /home/USER/votrearchive.fr.tar.bz2 /etc/default/fail2ban /etc/fail2ban/jail.d/defaults-debian.conf /etc/fail2ban/jail.conf /etc/ssh/sshd_config /home/USER/package-selections /etc/cron.weekly/backup /etc/apache2/sites-available/VOTRESITE /etc/apache2/conf-available/security.conf  /etc/bash.bashrc 
rm -f /home/USER/package-selections
chown USER: /home/USER/assistancenum.fr.tar.bz2

Le but de chown dans notre script est de modifier l'utilisateur propriétaire.
Sans cette commande l'archive créée sera utilisable que par root (car les crontab s'exécutent par défaut avec root)
Il est donc important de modifier le propriétaire de l'archive. Pour vous permettre de rapatrier l'archive avec votre utilisateur et la commande SCP

USER, indique le nom de votre utilisateur.
VOTRESITE, le nom de votre fichier virtualhost

#!/bin/bash indique que c’est un script bash.
#! s’appelle shebang, faites une recherche sur ce mot

Adapter la liste des dossiers et fichiers à archiver en fonction de vos besoins (c'est un exemple que j'ai mis au-dessus)

Si cela ne convient pas vous pouvez aussi vous orienter vers rsync qui permet de synchroniser des fichiers.

Concernant la création de l’archive

Je laisse chercher les détails de la commande /bin/tar' avec les 4 lettres jcvf

chaque lettre est indépendante

Concernant les recherches sur des exécutables Linux, vous pouvez les faire directement depuis le terminal avec la commande man

recherche à effectuer
Terminal : man tar ou tar --help
Internet : man tar

ça vous affichera l’aide, perso je préfère aller sur internet c’est plus présentable

Man est la commande qui indique manuel, une vraie bibliothèque ce Linux.

Attention ne faites pas une sauvegarde systématique des dossiers comprenant des fichiers modifiés. Sauvegardez plutôt chaque fichier, pensez au jour où vous en aurez besoin pour les relire ou copier les parties qui vous intéressent (car avec le temps on oublie ce qu'on a fait, ça les rendra plus accessibles)

recherche à effectuer sur internet ou dans le terminal
man rm

Pareil pour chown

L’archive créée, il vous restera plus qu’à la rapatrier sur votre PC via la commande SCP

recherche à effectuer sur internet ou dans le terminal
Terminal : man scp
Internet : exemple commande SCP ou man scp

4.1 Sécurisations de l'OS


4.1.1 Commençons par la base, les mises à jour de sécurité du système


Je ne pense pas que vous allez passer votre temps à vous connecter au serveur pour faire les mises à jour de sécurité ?

Attention, je parle bien de mise à jour de sécurité et pas de mettre à jour les services et outils du système. Dans ce cas seuls les patchs concernant la sécurité seront appliqués.

Commençons par vérifier s’il existe un outil permettant la mise à jour automatique de votre distribution

recherche à effectuer sur internet
Debian 10 mise à jour automatique sécurité

Il peut arriver que les mises à jour demandent de redémarrer le serveur, il faudra donc vous connecter pour le faire, si cela est nécessaire, certains outils proposent une option qui permet de redémarrer automatiquement. je la déconseille, car vous n’êtes pas à l’abri d’un problème lors du redémarrage.

A savoir :

Les articles qui sont très vieux ne vous empêchent pas de le lire bien au contraire. Mais peut-être que depuis, votre OS implémente déjà un outil permettant de faire les mises à jour de sécurité automatiquement. Pensez donc à bien vérifier cela.

Chaque blogueur qui écrit un tuto ou article à sa vision des choses, votre but à vous et de maximiser vos chances d’améliorer la sécurité de votre serveur. Ne vous limitez pas au premier article que vous trouverez ou seulement les articles qui correspondent à votre distribution.

Lisez en plusieurs. Cela vous permettra d’étendre vos possibilités et de mieux comprendre le fonctionnement.

La solution optimale est d'aller sur le site de l'éditeur de l’outil ou du service, sa documentation sera bien plus détaillée et à jour que celle des tutos (mais cela peut demander plus de temps et souvent de comprendre l'anglais)

4.1.2 Remonté d’information de l’OS


La première chose à effectuer est l’envoi de mail depuis votre serveur, ainsi vous pourrez recevoir toutes les informations remontées par vos outils et services

recherche à effectuer sur internet
Gmail envoi de mail depuis Linux

J’ai mis Gmail, mais vous pouvez choisir une autre solution, les deux premiers liens expliquent comment faire cela avec ssmtp

Après vérification SSMTP n’est plus maintenu depuis longtemps, certains proposés opensmtp, sinon il y a exim4 ou MSMTP

RAPPPEL : faite des vérifications sur les services et outils utilisés

4.1.3 Analyser la sécurité de Linux


recherche à effectuer sur internet
Analyser sécurité de Linux

Voici quelques outils

Lynis : un outil qui va vérifier tout un tas de paramètres et vous indiquez les erreurs et comment les résoudre pour la plupart (très utiles)

Attention toujours la même réflexion, ne faites pas sans réfléchir ce que vous propose l’outil, il se peut que vous ne puissiez pas appliquer certains paramètres, car il est utile au bon fonctionnement de vos services

AIDE : c’est un outil qui permet de vérifier chaque modification effectuée sur le système, l’envoi de rapports se fait par mail, il n’y a pas mieux pour repérer des modifications suspectes dans le cas où il est bien configuré (outil assez complexe pour des débutants)

AIDE est un outil optionnel, il y a de très bons articles qui expliquent son fonctionnement, mais cela prend du temps à comprendre et d’adapter la solution à ses besoins.

En complément

ClamAV : c’est un antivirus, attention il peut consommer pas mal de mémoire quand il est lié avec d’autres services.

Rkhunter : Recherche d’outil malveillant

Veuillez à bien vérifier les logs de ces deux outils, car on n'est jamais à l’abri de faux positifs

4.1.4 scripts utiles


Vu que vous avez mis en place l’envoi de mail, c'est pratique d’être alerté à chaque fois que quelqu’un se logue sur votre système

recherche à effectuer sur internet
Envoi mail connexion Linux

Faites des tests pour vérifier que tout fonctionne

Dès que quelqu’un se connectera à une session, vous serez averti. Couplé à AIDE, cela vous permet de tracer les actions effectuées

Ne pas oublier : Il faut savoir doser, trop d’outils qui surveillent ça vous submergent de mail pas assez vous prenez un risque.

4.2 Améliorer la sécurité des services


4.2.1 Outil de base


Sudo

Un autre outil intéressant est d’empêcher la connexion de l’utilisateur root et de se connecter avec un utilisateur standard qui aura les droits root uniquement quand ce sera nécessaire

Pour cela il vous faudra bloquer le compte root, mais aussi installer sudo et ajouter votre utilisateur au groupe sudo via la commande :
adduser USER sudo

puis faire des tests d’exécution avec les droits sudo

sudo touch /root/1.txt
sudo rm /root/1.txt

Si ces commandes fonctionnent sans erreur alors vous avez bien les droits admins avec votre utilisateur,

Attention, après avoir ajouté l'utilisateur au groupe sudo il faut relancer votre session. pour cela il suffit de quitter votre session avec la commande exit

La commande sudo vous demandera votre mot de passe utilisateur.

Fail2Ban

Fail2ban est un outil permettant de scruter les logs à la recherche de tentative d’intrusion pour différents services dont (Apache2, mysql (mariadb), php ).
Il bannit les IP qui essaient d’effectuer des tentatives d’intrusion, j’ai fait un article dessus.
Fail2ban

4.2.2 Service


Openssh

Un service très sensible est que l’on utilise en permanence c’est openssh-server. C’est ce qui vous permet d’avoir l’accès à votre serveur en ligne de commande. Par défaut ce service n’est pas configuré de façon optimale.

recherche à effectuer sur internet
améliorer la sécurité openssh

  • voici quelques exemples de modifications intéressantes
    • Mise en place de connexion par clé publique
    • Modification du port de connexion
    • Autorisé la connexion qu’a certains utilisateurs
    • Interdire la connexion par mot de passe
    • Empêcher la connexion en root

l’ANSSI propose un document pour vous aider
ANSSI Guide OpenSSH

Vous pouvez aussi limiter les IP qui peuvent se connecter au SSH en créant des IPTABLES ou NFTABLES (!Attention! à bien avoir une IP statique)

Apache2

Apache est un serveur Web, il permet de mettre en ligne des contenus accessibles via le HTTP et HTTPS.
Ce service est en première ligne, il rend l’accès à votre serveur possible, c’est pour cela qu’il est important de bien le sécuriser

recherche à effectuer sur internet
sécuriser apache2

RAPPPEL : faite des vérifications sur les services et outils utilisés

Pas mal de sites permettant d’améliorer la sécurité d’Apache, faites bien attention à ne pas bloquer vos services en implémentant certains paramètres trop restrictifs (toujours trouver le juste milieu et surtout faite des test)

Voici quelques sites que j’ai trouvés lors de mes recherches pour cet article et qui mon bien aidé.

Il y a aussi l'extension apache2 geoip, elle permet de bloquer des pays. A utiliser avec prudence suivant vos besoins

Indique les éléments de sécurité à mettre en place ou à améliorer, il vous redirige vers des articles très bien détaillés en anglais, Google trad est bien pratique si vous n’êtes pas familier avec la langue de Shakespeare.
securityheaders

Ce site va scanner votre serveur web à la recherche de problèmes de configuration.
nikto

Attention pensez à bien cocher la case pour ne pas publier vos résultats. pour le site de nikto mettez les IP qu'il vous donne en whitelist si vous utilisez fail2ban, sinon elles seront bannies

Php

Pour PHP, vous aurez aussi à faire des recherches concernant la sécurité. Vous pouvez indiquer le nom du service web avec lequel php fonctionne (Apache, Nginx, Lighttpd)

recherche à effectuer sur internet
sécuriser PHP 7 php.ini

De ce que j’ai pu voir, PHP est déjà bien sécurisé par défaut, mais ne vous fiez pas à ma parole, allez vérifier par vous-même

Fail2ban contient aussi des modules de protection pour PHP, n’hésitez pas à les utiliser.

Si vous utilisez d'autres outils t-elle que mysql/mariadb ou autre, utilisé la même méthodologie pour trouver des informations, ne vous limitez pas

4.3 Conclusion


Pour sécuriser son environnement, rien de plus simple que faire des recherches sur les mots-clés souhaitait, plein de sites, autant de versions… Faites le tri et ne gardez que l’essentiel. Ajoutez à cela une sauvegarde de l’OS et des fichiers avant modification et vous pourrez faire tous les tests que vous souhaitez

Ne soyez pas trop restrictif, ni trop laxiste. La sécurité, c’est avant tout une histoire de dosage. Comme tout dans la vie il faut trouver le juste milieu

Attention à bien faire cela avant une mise en production, car je ne suis pas sûr que vos clients ou visiteurs acceptent d’être déconnectés toutes les deux minutes parce que vous faites des essais.

Aussi cette méthodologie est universelle, en cas de problème faites des recherches avec les mots-clés de votre problème. De même pour l'installation d'un outil ou service, vous pouvez en abuser

Lexique

Service : les services sont des logiciels installés sur un système qui tourne en tache de font, APACHE est un service

Système : le système est ce qui est installé sur le matériel (Windows est un système), sur ce système sont installés les services (Apache est un service), ou de lancer des outils
La différence entre services et outils: un outil n’interagit pas avec le public, il sert uniquement pour vous aider contrairement au service (AIDE un outil)

Outils : des logiciels qui ne tournent pas en tâche de fond, lynis est un outil