Avec la popularité croissante de la cybercriminalité, il est urgent que les entreprises disposent d’une meilleure protection contre les hackers. Un système de prévention des intrusions (IPS) est l’un des meilleurs moyens de se défendre contre les attaques informatiques. Mais avant de chercher sur Internet un IPS, essayez Suricata.
Dans ce tutoriel, vous apprendrez comment configurer un IPS Suricata entièrement fonctionnel sur un serveur Linux pour protéger votre réseau contre les menaces en ligne.
Prêt ? Lisez la suite et commencez à protéger votre réseau !
Prérequis
Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous de disposer des éléments suivants :
- A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
- A non-root user with sudo privileges.
- En fonction de la configuration de votre réseau et de la manière dont vous prévoyez d’utiliser Suricata, vous pourriez avoir besoin de plus ou moins de CPU et de RAM pour votre serveur. En général, plus vous prévoyez d’inspecter de trafic, plus vous allouerez de ressources à Suricata. Dans un environnement de développement, prévoyez d’utiliser au moins 2 CPU et 8 Go de RAM pour commencer, afin que Suricata puisse accomplir ses tâches sans compromettre la qualité de service pour tous les utilisateurs.
Installation de Suricata et ajout du dépôt PPA
Suricata n’est pas installé par défaut sur Ubuntu, mais l’installation de Suricata est similaire à l’installation d’autres packages sur votre système.
1. Exécutez la commande apt update
pour mettre à jour les packages disponibles sur votre système.

2. Ensuite, exécutez la commande add-apt-repository
pour ajouter le dépôt PPA maintenu par la Open Information Security Foundation (OISF). En ajoutant le dépôt PPA, vous obtiendrez la version la plus récente et stable de Suricata (ppa:oisf/suricata-stable
).

3. Réexécutez la commande sudo apt update
pour charger le nouveau dépôt Suricata dans l’index des packages de votre système.
4. Maintenant, exécutez la commande sudo apt policy
pour vérifier que vous avez ajouté correctement le PPA Suricata. Assurez-vous de voir le PPA Suricata dans la liste comme indiqué ci-dessous avant d’installer Suricata

5. Exécutez la commande suivante pour installer suricata
sur votre système.

6. Une fois l’installation terminée, exécutez la commande systemctl status
ci-dessous pour vérifier le statut
du service suricata
.
Vous pouvez voir ci-dessous que le service Suricata est actif (en cours d’exécution).

Configuration de Suricata
Le paquet Suricata est livré avec un fichier de configuration nommé suricata.yaml situé dans le répertoire /etc/suricata. Ce fichier de configuration contient de nombreux paramètres différents pour de nombreux autres cas d’utilisation. Mais gardez à l’esprit qu’il y a quelques paramètres dans le fichier de configuration par défaut que vous devez ajuster avant d’utiliser Suricata.
Le mode par défaut pour Suricata est le mode Détection d’Intrusion (IDS), qui enregistre, mais ne bloque aucun trafic. Ce mode est utilisé lors de la configuration et de la familiarisation avec Suricata. Une fois que vous êtes plus à l’aise avec Suricata et que vous comprenez mieux les types de trafic sur lesquels Suricata vous alertera, vous pouvez choisir d’activer le mode IPS.
Suricata ajoute un champ dans son format JSON (ID de flux communautaire). L’ID de flux communautaire est un champ de 8 octets qui vous permet de corréler les enregistrements générés par d’autres outils. Cette fonctionnalité est pratique lorsque vous utilisez Suricata en conjonction avec d’autres outils comme Bro ou Elasticsearch.
1. Ouvrez le fichier /etc/suricata/suricata.yaml dans votre éditeur de texte préféré.
2. Trouvez une ligne qui lit community-id: false et changez-la en community-id: true. Enregistrez les modifications et quittez l’éditeur de texte.
Chaque fois que vous examinez les événements, vous verrez l’ID de flux de la communauté dans leur sortie JSON.

Ensuite, exécutez la commande suivante pour trouver un appareil avec une route par défaut sur votre système (route show default
). Le drapeau -p
indique à la commande ip
d’afficher le périphérique de manière lisible par l’homme, tandis que le drapeau -j
imprime la sortie JSON.
Suricata est configuré pour renifler des paquets à partir de n’importe quelle interface réseau disponible par défaut. Mais vous pouvez modifier ce comportement et spécifier une interface pour Suricata à écouter lorsqu’il démarre.
Comme vous le voyez ci-dessous, le paramètre dev spécifie l’interface que Suricata utilisera pour renifler des paquets. Dans cette démo, l’interface est eth0, mais votre interface peut être différente, comme tun0, wlan0, etc.

4. Enfin, ouvrez le fichier de configuration /etc/suricata/suricata.yaml, localisez le paramètre interface sous la section af-packet et modifiez-le en conséquence. Dans cette démo, eth0 est utilisé comme interface pour renifler des paquets.
Enregistrez les modifications, mais gardez votre éditeur de texte ouvert pour le moment.

Configuration de la fonction de rechargement automatique des règles en direct
Vous avez maintenant configuré Suricata, mais ce n’est que le début de la protection de votre réseau. En général, vous voudriez ajouter des règles sur place et recharger automatiquement les règles. Comment faire ? La fonction de rechargement en direct des règles de Suricata vous permet de mettre à jour les règles à la volée. Par conséquent, vous n’avez pas besoin de redémarrer Suricata manuellement pour que les nouvelles règles prennent effet.
Ouvrez le fichier /etc/suricata/suricata.yaml, copiez/collez les directives suivantes en bas du contenu du fichier et enregistrez les modifications. Ces directives vous permettent d’activer la fonction de rechargement en direct des règles.
Avec ce paramètre en place, lorsque vous éditez/mettez à jour vos ensembles de règles, les changements prendront effet sans redémarrer votre service Suricata.

Maintenant, exécutez la commande kill
ci-dessous pour notifier votre processus Suricata ($(pidof suricata)
) de mettre à jour les règles sans redémarrer.
La commande envoie un signal défini par l’utilisateur (-usr2
) à l’ID de processus spécifié, puis Suricata effectue automatiquement ce qui suit :
- Chargez la nouvelle configuration pour mettre à jour les variables et valeurs des règles.
- Chargez de nouvelles règles
- Construisez un nouveau moteur de détection
- Échangez les anciens et les nouveaux moteurs de détection
- Assurez-vous que tous les threads sont mis à jour
- Libérez l’ancien moteur de détection
Mise à jour des ensembles de règles Suricata
La fonction de rechargement en direct des règles est prête, mais elle ne servira à rien à moins que vous ne mettiez à jour vos ensembles de règles. Par défaut, le package Suricata a un ensemble de règles limité qui ne détecte que les protocoles Internet les plus courants situés dans le répertoire /etc/suricata/rules.
À ce stade, vous obtiendrez un message d’erreur Aucun fichier de règles ne correspond au modèle, comme celui ci-dessous, chaque fois que vous essayez de démarrer et d’utiliser votre service Suricata. Ce message d’erreur indique qu’il n’y a pas de jeux de règles pour que Suricata les utilise.

Pour résoudre cette erreur, fournissez des fichiers de jeu de règles à votre instance Suricata. Heureusement, Suricata dispose d’un outil appelé suricata-update
qui vous aidera à récupérer davantage de jeux de règles auprès de fournisseurs tiers.
1. Exécutez la commande ci-dessous pour mettre à jour votre instance Suricata.
Comme vous pouvez le voir ci-dessous, la sortie indique que la commande suricata-update
a récupéré les règles en se connectant à https://rules.emergingthreats.net/open/. La commande enregistre ensuite les nouvelles règles dans le répertoire /var/lib/suricata/rules/.
La sortie imprime également ce qui suit:
- Le nombre total (31737) de jeux de règles
- Le nombre de règles activées (24355)
- Le nombre de celles qui sont ajoutées (31737)/supprimées (0).

Ensuite, exécutez la commande ci-dessous pour répertorier tous les fournisseurs de jeux de règles (list-sources
).
La commande
suricata-update
récupère des jeux de règles auprès de nombreux fournisseurs, y compris des fournisseurs gratuits et commerciaux.
Vous pouvez voir ci-dessous une petite partie de la liste. Notez un nom de jeu de règles à partir duquel vous souhaitez que Suricata récupère spécifiquement des jeux de règles. Ce tutoriel récupère les jeux de règles et/open à des fins de démonstration (étape trois).

3. Exécutez la commande ci-dessous pour récupérer et inclure les ensembles de règles et/open
dans vos règles Suricata.

Enfin, relancez la commande suricata-update
pour charger le nouvel ensemble de règles sélectionné.
Validation de la configuration Suricata
Vous avez configuré Suricata et même ajouté des ensembles de règles, il est donc temps de valider vos modifications et de vous assurer que tout fonctionne comme prévu. Le package Suricata dispose d’un service de validation intégré qui vous permet de voir toutes les déviations par rapport à la configuration actuelle.
Exécutez la commande suricata
ci-dessous pour valider les modifications dans le fichier de configuration de Suricata (-c /etc/suricata/suricata.yaml
). La commande affiche également tous les messages de validation (-v
).
Le drapeau -T
indique à Suricata de s’exécuter en « mode test » et en « mode top down ». Les deux modes ont des règles plus strictes pour l’appariement des paquets et sont moins susceptibles de générer un faux positif.
Étant donné que Suricata est un pare-feu hautement configurable, le test peut prendre plusieurs minutes pour s’achever. S’il n’y a pas d’erreurs, vous verrez une sortie similaire à celle ci-dessous qui affiche un message complet.

Si votre fichier de configuration comporte des erreurs similaires à celle ci-dessous, Suricata affichera chaque erreur, indiquant les lignes spécifiques posant problème. Si vous obtenez ces erreurs, corrigez chaque problème de configuration un par un jusqu’à ce que la validation soit réussie.

Test des règles Suricata
Maintenant que vos fichiers de configuration Suricata sont validés, vous pouvez exécuter Suricata pour vérifier qu’ils fonctionnent correctement. Vous utiliserez Suricata pour tester l’ET Open (2100498) avec la commande curl
afin de détecter une activité/trafic suspecte.
Actuellement, votre instance Suricata dispose de plus de 30 000 règles que Suricata a récupérées à partir de différents ensembles de règles. Il serait donc impossible de tester toutes les règles avec leurs explications dans ce tutoriel.
1. Exécutez la commande curl
ci-dessous pour générer du trafic/des requêtes HTTP/des activités à partir du site TestMyNIDS. TestMyNIDS est un projet d’apprentissage en ligne dédié à la prise en charge des tests, de la validation et de la comparaison des NIDS. Le site offre une plateforme unique pour l’analyse comparative des NIDS et des outils associés.
Vous pouvez utiliser ce site pour tester toute activité/trafic suspect afin de vérifier si votre ensemble de règles configurées fonctionne comme prévu.
Les données de réponse sont conçues pour déclencher une fausse alerte en prétendant être un utilisateur root Linux/Unix. Et cet utilisateur root se trouve sur un système potentiellement compromis.

Ensuite, exécutez la commande grep
ci-dessous pour examiner le fichier fast.log
dans le répertoire /var/log/suricata/ à la recherche d’un message d’alerte correspondant 2100498
. Cette commande vérifie le fichier journal pour une alerte utilisateur.
En dehors du fichier fast.log, un autre fichier journal à surveiller est le eve.log dans le même répertoire.
Vous verrez une sortie similaire à celle ci-dessous qui montre l’adresse IPv4 publique de votre système.

3. Maintenant, exécutez la commande jq
ci-dessous pour examiner le fichier eve.log. Le fichier eve.log est également utilisé pour enregistrer des événements, mais au format JSON (/var/log/suricata/eve.json
). Ce sont les fichiers eve.json et fast.log auxquels vous ferez référence pour le trafic suspect et les tentatives bloquées. Une fois trouvés, agissez selon les besoins.
Ci-dessous, vous pouvez voir “signature_id”: 2100498 dans la sortie, qui est l’ID de signature d’alerte que vous avez spécifié dans la commande.
Vous pouvez également voir le “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” dans la sortie, qui est l’ID de flux de la communauté que vous avez configuré dans le fichier /etc/suricata/suricata.yaml.
Ce community_id est pratique lorsque vous utilisez Suricata en conjonction avec d’autres outils comme Elasticsearch pour obtenir une « pile de surveillance de sécurité » complète à un coût raisonnable.

Conclusion
Tout au long de ce tutoriel, vous avez appris comment installer et configurer Suricata avec des ensembles de règles pour protéger votre réseau. Vous avez également effectué des tests pour vérifier si les ensembles de règles fonctionnent en générant du trafic sur votre réseau.
À ce stade, Suricata fonctionne parfaitement avec votre ensemble de règles personnalisé pour détecter les activités/trafic suspects sur votre réseau.
Bien, pourquoi ne pas capitaliser sur ces connaissances nouvellement acquises ? Commencez peut-être par installer et configurer Suricata, Zeek, la pile Elasticsearch pour mettre en place un ensemble complet de « security monitoring stack »?