Si vous prenez au sérieux la sécurité de votre réseau, l’installation d’une solution IPS ou IDS est indispensable pour fortifier le périmètre du réseau et détourner le trafic réseau potentiellement indésirable.


Snort est l’une des solutions IPS/IDS les plus connues, libre d’utilisation et open-source. Nous allons voir comment installer et configurer Snort sous Linux pour défendre votre réseau contre les cyber-attaques.

Qu’est-ce que Snort ?

sortie de la commande snort -v

Snort est un logiciel libre de détection et de prévention des intrusions dans le réseau (NIDS/IPS) qui, comme son nom l’indique, aide à sécuriser le périmètre de votre réseau en appliquant des règles et des filtres qui détectent et éliminent les paquets potentiellement malveillants injectés dans votre réseau.

Avec Snort, vous serez en mesure d’effectuer un enregistrement avancé du trafic réseau, un reniflage et une analyse des paquets, et de mettre en place un système de prévention des intrusions solide qui défendra votre réseau contre le trafic indésirable et potentiellement malveillant.

Conditions préalables à l’installation de Snort

Avant d’installer Snort, vous devez procéder à une configuration préliminaire. Il s’agit principalement de la mise à jour et de la mise à niveau de votre système et de l’installation des dépendances nécessaires au bon fonctionnement de Snort.

Commencez par mettre à jour et à niveau votre système.

Sur les distributions Linux basées sur Ubuntu et Debian :

 sudo apt update && apt upgrade -y 

Sur Arch Linux et ses dérivés :

 sudo pacman -Syu 

Sur RHEL et Fedora :

 sudo dnf upgrade 

Une fois votre système mis à jour, continuez à installer les dépendances nécessaires à Snort. Voici les commandes que vous devez exécuter :

Sur Ubuntu et Debian, exécutez :

 sudo apt install -y build-essential autotools-dev libdumbnet-dev libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev cmake liblzma-dev openssl libssl-dev cpputest libsqlite3-dev libtool uuid-dev git autoconf bison flex libcmocka-dev libnetfilter-queue-dev libunwind-dev libmnl-dev ethtool libjemalloc-dev libpcre++-dev 

Sur Arch Linux, exécutez :

 sudo pacman -S gperftools hwloc hyperscan ibdaqlibdnet libmnl libpcap libunwind luajit lz4 openssl pcre pulledporkxz zlib cmake pkgconf 

Pour RHEL et Fedora, lancez la commande suivante :

 sudo dnf install gcc gcc-c++ libnetfilter_queue-devel git flex bison zlib zlib-devel pcre pcredevel libdnet tcpdump libnghttp2 wget xz-devel -y 

En outre, vous devez également installer manuellement la bibliothèque d’acquisition de données, LibDAQ pour que Snort fonctionne correctement, ainsi que gperftools pour générer les fichiers de construction.

Tout d’abord, téléchargez les fichiers source de LibDAQ depuis le site officiel à l’aide de la commande wget. Ensuite, extrayez l’archive et déplacez-vous dans le répertoire en utilisant la commande cd. Dans le répertoire, exécutez la commande bootstrap et configurer puis de préparer les fichiers avec make et de l’installer avec la commande make install commande.

 wget https://www.snort.org/downloads/snortplus/libdaq-3.0.11.tar.gz
tar -xzvf lib*
cd lib*
./bootstrap
./configure
make
sudo make install

Avec LibDAQ installé, vous devez installer une dernière dépendance : gperftools. Commencez par récupérer les fichiers sources sur le repo GitHub. Extrayez les fichiers, déplacez-vous dans le répertoire et exécutez le script configure. Enfin, installez le paquetage en utilisant les commandes make et make install.

 wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz
tar -xvzf gper* && cd gper
./configure
make
sudo make install

Une fois ces dépendances installées, vous pouvez passer aux étapes suivantes pour installer Snort.

Installer Snort à partir des sources sous Linux

Construire Snort à partir des sources

La configuration préliminaire étant terminée, vous pouvez maintenant vous concentrer sur l’installation du logiciel proprement dit. Vous allez le compiler à partir des sources, donc récupérez d’abord les fichiers de compilation nécessaires.

Utilisez la commande wget ou téléchargez les fichiers manuellement depuis la page de téléchargement officielle :

wget https://www.snort.org/downloads/snortplus/snort3-3.1.58.0.tar.gz

Télécharger : Snort

Une fois le téléchargement de l’archive contenant les fichiers de compilation terminé, extrayez-la à l’aide de la commande tar :

 tar -xzvf snort* 

Déplacez-vous dans le dossier extrait, exécutez le script de configuration, utilisez la commande make pour préparer les fichiers, et enfin installez-les avec la commande make install:

 cd snort*
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build
make
sudo make install

Snort est maintenant installé avec succès dans votre système. Cependant, il vous reste encore une étape à franchir. Lorsqu’un nouveau logiciel est installé manuellement, le répertoire d’installation et les bibliothèques requises peuvent ne pas être automatiquement inclus dans le chemin d’accès par défaut du système. Il se peut donc que vous rencontriez des erreurs au démarrage de l’application.

Pour éviter ce problème, vous devez exécuter la commande ldconfig. Elle synchronisera le cache des bibliothèques partagées du système avec les bibliothèques et les binaires nouvellement installés. Exécutez la commande ldconfig à partir d’un shell root ou utilisez le préfixe sudo :

 sudo ldconfig 

Vous avez maintenant couvert toutes les étapes importantes nécessaires à l’installation de Snort. Pour vérifier l’installation, exécutez la commande Snort avec l’option -V et vous devriez voir une sortie renvoyant le nom de la version et d’autres données.

 snort -V 

Une fois que vous avez vérifié l’installation de Snort, passez aux étapes suivantes pour le configurer comme un IDS/IPS à part entière.

Configuration initiale de Snort sous Linux

configurer l'interface réseau pour snort

L’efficacité de Snort dépend presque entièrement de la qualité des jeux de règles qui lui sont fournis.

Cependant, avant de configurer les règles, vous devez configurer les cartes réseau pour qu’elles fonctionnent avec Snort et vous devez également tester la façon dont la configuration par défaut est gérée par Snort. Commencez par configurer les cartes réseau.

Configurez l’interface réseau en mode promiscuous :

 sudo ip link set dev interface_name promisc on 

Avec ethtool, désactivez Generic Receive Offload (GRO) et Large Receive Offload (LRO) pour éviter que les paquets réseau les plus volumineux ne soient tronqués :

 sudo ethtool -K interface_name gro off lro off 
Test de snort avec la configuration par défaut

Tester les performances de Snort avec la configuration par défaut :

 snort -c /usr/local/etc/snort/snort.lua 

Le résultat devrait être positif et indiquer que vous avez installé et configuré Snort correctement dans votre système. Vous pouvez maintenant bricoler avec ses fonctionnalités et expérimenter différentes configurations afin de trouver le meilleur ensemble de règles pour sécuriser votre réseau.

Configurer des règles et les appliquer avec Snort

Avec les paramètres de base en place, Snort est maintenant prêt à défendre votre périmètre. Comme vous le savez, Snort a besoin de jeux de règles pour déterminer la validité du trafic, configurons quelques jeux de règles gratuits créés par la communauté pour Snort.

Snort lit les jeux de règles et les configurations depuis des répertoires spécifiques. Donc, en premier lieu, en utilisant les commandes mkdir et touch, créez quelques répertoires importants pour stocker les règles et autres données pertinentes pour Snort :

 sudo mkdir -p /usr/local/etc/{lists,so_rules,rules} 
sudo touch /usr/local/etc/rules/local.rules
sudo touch /usr/local/etc/lists/default.blocklist

Une fois ces répertoires créés, vous pouvez télécharger le jeu de règles de la communauté depuis le site officiel à l’aide de la commande wget :

 wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz 

Une fois le téléchargement du jeu de règles terminé, extrayez-le et copiez-le dans le répertoire /usr/local/etc/rules/ répertoire.

 tar -xvzf snort3-com*
cd snort3-com*
cp * /usr/local/etc/rules/
snort détecte les requêtes icmp envoyées depuis une ip externe

Pour lancer Snort avec le jeu de règles, exécutez la commande suivante :

 sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -i interface_name -s 65535 -k none 

Décomposition de la commande :

  • -c définit le chemin d’accès au fichier de configuration par défaut
  • -R définit le chemin d’accès à l’ensemble de règles à appliquer
  • -i définit l’interface
  • -s discards snaplen limit
  • -k ignore les sommes de contrôle

Cela devrait permettre de valider la configuration et d’appliquer tous les jeux de règles sur Snort. Dès qu’il détectera une perturbation du réseau, il vous alertera par un message sur la console.

Si vous souhaitez créer et appliquer votre propre jeu de règles, vous pouvez en apprendre davantage sur les pages de la documentation officielle.

Configurer la journalisation avec Snort

journalisation avec snort

Par défaut, Snort ne produit aucun journal. Vous devez spécifier avec l’option -L pour démarrer Snort en mode de journalisation, définir le type de fichier de journalisation et l’option -l pour définir le répertoire de journalisation dans lequel Snort dépose les journaux.

Voici la commande pour démarrer Snort avec la journalisation activée :

 sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -i interface_name -s 65535 -k none -L file_type -l /var/log/snort 

Décomposition de la commande :

  • -c définit le chemin d’accès au fichier de configuration par défaut
  • -R définit le chemin d’accès à l’ensemble de règles à appliquer
  • -i définit l’interface
  • -s discards snaplen limit
  • -k ignore les sommes de contrôle
  • -L active le mode de journalisation et définit le type de fichier de journalisation
  • -l définit le chemin d’accès pour stocker les journaux

Notez que dans l’exemple de commande, le répertoire de journalisation est défini comme suit /var/log/snort. Bien qu’il s’agisse d’une pratique recommandée, vous êtes libre de stocker vos journaux ailleurs.

Vous pouvez lire les fichiers journaux de Snort dans le répertoire que vous avez défini ou les transmettre à un logiciel SIEM tel que Splunk pour une analyse plus approfondie.

Ajouter Snort comme Daemon au démarrage du système

le daemon snort est opérationnel

Bien que vous ayez installé et configuré Snort, vous devez vous assurer qu’il s’exécute au démarrage et qu’il fonctionne en arrière-plan. En l’ajoutant en tant que service système à démarrage automatique, vous vous assurez que Snort est en place et qu’il défend votre système à chaque fois qu’il est en ligne.

Voici comment ajouter un démon de démarrage Snort sous Linux :

  1. Commencez par créer un nouveau fichier de service systemd :
     touch /lib/systemd/system/snort.service 
  2. Ouvrez le fichier dans un éditeur de texte de votre choix et remplissez-le avec les données suivantes. Vous pouvez modifier les drapeaux en fonction de vos besoins :
     [Unit]
    Description=Snort Daemon
    After=syslog.target network.target
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -s 65535 -k none -l /var/log/snort -D -L pcap -i ens33
    [Install]
    WantedBy=multi-user.target
  3. Enregistrez et quittez le fichier. Ensuite, à l’aide des commandes service et systemctl, activez et démarrez le script :
     sudo systemctl enable snort.service
    sudo snort start

Le démon d’arrière-plan Snort devrait maintenant être opérationnel. Vous pouvez vérifier l’état du script à l’aide de la commande systemctl status snort . Elle doit renvoyer un résultat positif. Elle devrait renvoyer un résultat positif.

Vous savez maintenant comment protéger votre réseau avec Snort IDS

Bien que la mise en place d’IDS soit une bonne pratique, il s’agit d’une mesure passive plutôt qu’active. La meilleure façon d’améliorer et de garantir la sécurité de votre réseau est de le tester en permanence et de rechercher les failles à corriger.

Les tests de pénétration sont un excellent moyen de trouver des vulnérabilités exploitables et de les corriger.