GNU/Linux >> Tutoriels Linux >  >> Rocky Linux

Comment installer et configurer Suricata IDS avec Elastic Stack sur Rocky Linux 8

Suricata est un outil de surveillance du réseau qui examine et traite chaque paquet de trafic Internet qui transite par votre serveur. Il peut générer des événements de journal, déclencher des alertes et supprimer le trafic en cas de détection d'une activité suspecte.

Vous pouvez soit installer Suricata sur une seule machine pour surveiller son trafic, soit déployer sur un hôte de passerelle pour analyser tout le trafic entrant et sortant des autres serveurs qui lui sont connectés. Vous pouvez combiner Suricata avec Elasticsearch, Kibana et Filebeat pour créer un outil de gestion des informations et des événements de sécurité (SIEM).

Dans ce didacticiel, vous allez installer Suricata IDS avec ElasticStack sur un serveur Rocky Linux 8. Les différents composants de la pile sont :

  • Elasticsearch pour stocker, indexer, corréler et rechercher les événements de sécurité à partir du serveur.
  • Kibana pour afficher les journaux stockés dans Elasticsearch.
  • Filebeat pour analyser eve.json de Suricata log et envoyez chaque événement à Elasticsearch pour traitement.
  • Suricata pour analyser le trafic réseau à la recherche d'événements suspects et supprimer les paquets non valides.

Le tutoriel est divisé en deux parties, la première partie traitera de l'installation et de la configuration de Suricata, et la seconde partie traitera de l'installation et de la configuration d'Elastic Stack.

Nous allons installer Suricata et la pile Elastic sur différents serveurs pour notre tutoriel.

Prérequis

  • Les serveurs hébergeant la Suite Elastic et Suricata doivent avoir au moins 4 Go de RAM et 2 cœurs de processeur.

  • Les serveurs doivent pouvoir communiquer entre eux à l'aide d'adresses IP privées.

  • Les serveurs doivent exécuter Rocky Linux 8 avec un utilisateur sudo non root.

  • Si vous souhaitez accéder aux tableaux de bord Kibana de partout, configurez un domaine (kibana.example.com ) pointant vers le serveur sur lequel Suricata sera installé.

  • Installez les packages essentiels sur les deux serveurs.

    $ sudo dnf install yum-utils nano curl

Configurer le pare-feu

PARTIE 1

Étape 1 - Installer Suricata

Pour installer Suricata, vous devez ajouter le référentiel de packages de l'Open Information Security Foundation (OISF) à votre serveur.

$ sudo dnf install 'dnf-command(copr)'$ sudo dnf copr enable @oisf/suricata-6.0

La première commande active les projets communautaires (copr ) pour le dnf installateur de paquets. La deuxième commande active et ajoute le référentiel OISF à votre système. suricata-6.0 active le référentiel de la dernière version stable du logiciel. Appuyez sur y et ENTER chaque fois que vous y êtes invité.

Ensuite, ajoutez le référentiel EPEL.

$ sudo dnf install epel-release

Installez Suricata.

$ sudo dnf install suricata

Activez le service Suricata.

$ sudo systemctl enable suricata

Étape 2 - Configurer Suricata

Suricata stocke sa configuration dans le /etc/suricata/suricata.yaml dossier. Le mode par défaut pour Suricata est le mode IDS (Intrusion Detection System), où le trafic est uniquement enregistré et non arrêté. Si vous êtes nouveau sur Suricata, vous devez laisser le mode inchangé. Une fois que vous l'avez configuré et que vous en savez plus, vous pouvez activer le mode IPS (Intrusion Prevention System).

Activer l'identifiant communautaire

Le champ ID de la communauté facilite la corrélation des données entre les enregistrements générés par différents outils de surveillance. Comme nous allons utiliser Suricata avec Elasticsearch, l'activation de l'ID communautaire peut être utile.

Ouvrez le fichier /etc/suricata/suricata.yaml pour l'édition.

$ sudo nano /etc/suricata/suricata.yaml

Localisez la ligne # Community Flow ID et définissez la valeur de la variable community-id à true .

. . . # Community Flow ID # Ajoute un champ 'community_id' aux enregistrements EVE. Ceux-ci sont destinés à donner # enregistrements un ID de flux prévisible qui peut être utilisé pour faire correspondre les enregistrements à # sortie d'autres outils tels que Zeek (Bro). # # Prend une "graine" qui doit être la même pour tous les capteurs et outils # pour rendre l'identifiant moins prévisible. # activer/désactiver la fonction d'identifiant communautaire. identifiant de communauté :vrai. . .

Désormais, vos événements porteront un ID tel que 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ= que vous pouvez utiliser pour faire correspondre les ensembles de données entre différents outils de surveillance.

Sélectionner l'interface réseau

Le fichier de configuration par défaut de Suricata inspecte le trafic sur eth0 périphérique/interface réseau. Si votre serveur utilise une interface réseau différente, vous devrez la mettre à jour dans la configuration.

Vérifiez le nom de périphérique de votre interface réseau à l'aide de la commande suivante.

$ ip -p -j route affiche la valeur par défaut

Vous recevrez une sortie comme celle-ci.

[ { "dst":"default", "gateway":"164.90.192.1", "dev":"eth0", "protocol":"static", "metric":100, "flags":[ ] } ]

Le dev La variable fait référence au périphérique réseau. Dans notre sortie, il affiche eth0 en tant que périphérique réseau. Votre sortie peut être différente selon votre système.

Maintenant que vous connaissez le nom de votre appareil, ouvrez le fichier de configuration.

$ sudo nano /etc/suricata/suricata.yaml

Trouvez la ligne af-packet: autour du numéro de ligne 580. En dessous, définissez la valeur de la variable interface au nom de l'appareil de votre système.

# Prise en charge de la capture haute vitesse Linux:- interface:eth0 # Nombre de threads de réception. "auto" utilise le nombre de cœurs #threads :auto # Default clusterid. AF_PACKET équilibrera la charge des paquets en fonction du flux. identifiant de cluster :99. . .

Si vous souhaitez ajouter des interfaces supplémentaires, vous pouvez le faire en les ajoutant au bas du af-packet section vers la ligne 650.

Pour ajouter une nouvelle interface, insérez-la juste au-dessus du - interface: default section comme indiqué ci-dessous.

 # Pour la configuration eBPF et XDP, y compris le contournement, le filtrage et l'équilibrage de charge, veuillez # consulter doc/userguide/capture-hardware/ebpf-xdp.rst pour plus d'informations. - interface :enp0s1 cluster-id :98... - interface :défaut #threads :auto #use-mmap :non #tpacket-v3 :oui

Nous avons ajouté une nouvelle interface enp0s1 et une valeur unique pour le cluster-id variables dans notre exemple. Vous devez inclure un identifiant de cluster unique avec chaque interface que vous ajoutez.

Rechargement de la règle en direct

Vous devez redémarrer Suricata chaque fois que vous ajoutez, supprimez et modifiez ses règles. En activant Live Rule, Suricata peut traiter toute modification de règle sans redémarrer.

Pour activer le rechargement en direct, ajoutez les lignes suivantes au bas du fichier de configuration.

. . .detect-engine :- rechargement de règles :vrai

Lorsque le rechargement en direct est activé, vous pouvez utiliser la commande suivante pour recharger les règles sans redémarrer le processus Suricata.

$ sudo kill -usr2 $(pidof suricata)

Le $(pidof suricata) flag localise l'ID de processus du processus Suricata. Le -usr2 partie du kill la commande envoie un SIGUSR2 signal au processus Suricata. Le SIGUSR2 signal est configuré avec Suricata pour recharger les règles.

Une fois que vous avez terminé, enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Configurer les autorisations du répertoire

Suricata a automatiquement créé un utilisateur système et un groupe nommés suricata pendant le processus d'installation. Vous devez donner les autorisations de répertoire appropriées pour que l'installation fonctionne correctement.

Exécutez la commande suivante pour définir suricata comme groupe pour les répertoires de Suricata.

$ sudo chgrp -R suricata /etc/suricata$ sudo chgrp -R suricata /var/lib/suricata/rules$ sudo chgrp -R suricata /var/lib/suricata/update$ sudo chgrp -R suricata /var/ log/suricate 

Définissez les autorisations de groupe pour la lecture et l'écriture.

$ sudo chmod -R g+r /etc/suricata/$ sudo chmod -R g+rw /var/lib/suricata/rules$ sudo chmod -R g+rw /var/lib/suricata/update$ sudo chmod -R g+rw /var/log/suricata

Ajoutez votre nom d'utilisateur actuel à la suricata groupe afin que vous puissiez effectuer des opérations directement sans avoir besoin de sudo.

$ sudo usermod -a -G suricata $USER

Pour appliquer la nouvelle adhésion au groupe, déconnectez-vous du serveur et reconnectez-vous, ou saisissez ce qui suit :

$ su - ${USER}

Vous serez invité à saisir votre mot de passe utilisateur pour continuer.

Confirmez que votre utilisateur est maintenant ajouté à la suricata groupez en tapant :

$ id -nGusername sudo suricata

Étape 3 - Configurer les règles Suricata

Suricata, par défaut, n'utilise qu'un ensemble limité de règles pour détecter le trafic réseau. Vous pouvez ajouter d'autres ensembles de règles provenant de fournisseurs externes à l'aide d'un outil appelé suricata-update . Exécutez la commande suivante pour inclure des règles supplémentaires.

$ suricata-update16/2/2022 -- 07:00:16 -  -- Utilisation du répertoire de données /var/lib/suricata.16/2/2022 -- 07:00:16 -  -- Utilisation de la configuration de Suricata /etc/suricata/suricata.yaml16/2/2022 -- 07:00:16 -  -- Utilisation de /usr/share/suricata/rules pour les règles fournies par Suricata...... 16/2/2022 -- 07:00:16 -  -- Aucune source configurée, utilisera Emerging Threats Open('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz', Aucun, Vrai)16/2/2022 -- 07:00:16 -  -- Vérification https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz.md5.16/2/2022 -- 07:00:16 -  -- Récupération de https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar. gz. 100% - 3162050/3162050.....16/2/2022 -- 07:00:23 -  -- Ecriture de règles dans /var/lib/suricata/rules/suricata.rules :total :32004; activé :24611 ; ajouté :8; supprimé 1 ; modifié :121816/2/2022 -- 07:00:23 -  -- Écriture /var/lib/suricata/rules/classification.config16/2/2022 -- 07:00:23 -  -- Test avec suricata -T.16/2/2022 -- 07:01:16 -  -- Fait.

Ajouter des fournisseurs d'ensemble de règles

Vous pouvez étendre les règles de Suricata en ajoutant plus de fournisseurs. Il peut récupérer des règles auprès de divers fournisseurs gratuits et commerciaux.

Vous pouvez répertorier la liste des fournisseurs par défaut à l'aide de la commande suivante.

$ suricata-update list-sources

Par exemple, si vous souhaitez inclure le tgreen/hunting ensemble de règles, vous pouvez l'activer avec la commande suivante.

$ suricata-update enable-source tgreen/chasse

Exécutez la suricata-update commande à nouveau pour télécharger et mettre à jour les nouvelles règles.

Étape 4 - Valider la configuration de Suricata

Suricata est livré avec un outil de validation pour vérifier le fichier de configuration et les règles pour les erreurs. Exécutez la commande suivante pour exécuter l'outil de validation.

$ sudo suricata -T -c /etc/suricata/suricata.yaml -v22/2/2022 -- 23:20:10 -  - Exécution de suricata en mode test22/2/2022 -- 23:20 :10 -  - Ceci est Suricata version 6.0.4 RELEASE fonctionnant en mode SYSTEM22/2/2022 -- 23:20:10 -  - CPUs/cores online:222/2/2022 -- 23:20 :10 -  - a supprimé les majuscules pour le fil principal22/2/2022 -- 23:20:10 -  - périphérique de sortie rapide (régulier) initialisé :fast.log22/2/2022 -- 23:20 :10 -  - périphérique de sortie eve-log (régulier) initialisé :eve.json22/2/2022 -- 23:20:10 -  - périphérique de sortie stats (régulier) initialisé :stats.log22/2/2022 -- 23:20:21 -  - 1 fichiers de règles traités. 24611 règles ont été chargées avec succès, 0 règle a échoué22/2/2022 -- 23:20:21 -  - Configuration de seuil analysée :0 règle(s) trouvée(s)22/2/2022 -- 23:20:21 -  - 24614 signatures traitées. 1216 sont des règles IP uniquement, 4120 inspectent la charge utile des paquets, 19074 inspectent la couche d'application, 108 sont des événements de décodeur uniquement22/2/2022 -- 23:21:02 -  - La configuration fournie a été chargée avec succès. Exiting.22/2/2022 -- 23:21:03 -  - nettoyage de la structure de regroupement des signatures... terminé

Le -T indique à Suricata de s'exécuter en mode test, le -c flag configure l'emplacement du fichier de configuration, et le -v flag imprime la sortie détaillée de la commande. Selon la configuration de votre système et le nombre de règles ajoutées, la commande peut prendre quelques minutes.

Étape 5 - Exécution de Suricata

Maintenant que Suricata est configuré et mis en place, il est temps d'exécuter l'application.

$ sudo systemctl start suricata

Vérifiez l'état du processus.

$ sudo systemctl status suricata

Vous devriez voir la sortie suivante si tout fonctionne correctement.

 ? suricata.service - Service de détection d'intrusion Suricata chargé :chargé (/usr/lib/systemd/system/suricata.service ; activé ; préréglage du fournisseur :désactivé) Actif :actif (en cours d'exécution) depuis le mer. 2022-02-16 07:14:22 UTC; Il y a 32 minutes Docs :man:suricata(1) Processus :1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) PID principal :1496 (Suricata-Main) Tâches :8 (limite :23479) Mémoire :367.5M CGroup :/system.slice/suricata.service ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid - i eth0 --user suricataFeb 16 07:14:22 suricata systemd[1] :Démarrage du service de détection d'intrusion Suricata...Feb 16 07:14:22 suricata systemd[1] :Démarrage du service de détection d'intrusion Suricata.

Le processus peut prendre quelques minutes pour terminer l'analyse de toutes les règles. Par conséquent, la vérification d'état ci-dessus n'est pas une indication complète pour savoir si Suricata est opérationnel et prêt. Vous pouvez surveiller le fichier journal à l'aide de la commande suivante.

$ sudo tail -f /var/log/suricata/suricata.log

Si vous voyez la ligne suivante dans le fichier journal, cela signifie que Suricata est en cours d'exécution et prêt à surveiller le trafic réseau.

16/02/2022 -- 07:18:39 -  - Tous les threads de capture AFP sont en cours d'exécution.

Étape 6 - Tester les règles Suricata

Nous vérifierons si Suricata détecte un trafic suspect. Le guide Suricata recommande de tester le numéro de règle ET Open 2100498 en utilisant la commande suivante.

$ curl http://testmynids.org/uid/index.html

Vous obtiendrez la réponse suivante.

uid=0(racine) gid=0(racine) groupes=0(racine)

La commande ci-dessus prétend renvoyer la sortie de id commande qui peut être exécutée sur un système compromis. Pour tester si Suricata a détecté le trafic, vous devez vérifier le fichier journal à l'aide du numéro de règle spécifié.

$ grep 2100498 /var/log/suricata/fast.log

Si votre requête a utilisé IPv6, vous devriez voir le résultat suivant.

22/02/2022-23:24:33.997371 [**] [1:2100498:7] La ​​vérification de l'identifiant GPL ATTACK_RESPONSE a renvoyé la racine [**] [Classification :trafic potentiellement mauvais] [Priorité :2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468

Si votre requête utilisait IPv4, vous verriez la sortie suivante.

22/02/2022-23:21:46.783476 [**] [1:2100498:7] La ​​vérification de l'identifiant GPL ATTACK_RESPONSE a renvoyé la racine [**] [Classification :trafic potentiellement mauvais] [Priorité :2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364

Suricata enregistre également les événements dans le /var/log/suricata/eve.log fichier au format JSON. Pour lire et interpréter ces règles, vous devez installer jq qui n'entre pas dans le cadre de ce didacticiel.

Nous en avons terminé avec la première partie du didacticiel, où nous avons installé Suricata et l'avons testé. La partie suivante consiste à installer la pile ELK et à la configurer pour visualiser Suricata et ses journaux. Cette deuxième partie du didacticiel est censée être effectuée sur le deuxième serveur, sauf indication contraire.

Étape 7 - Installer Elasticsearch et Kibana

La première étape de l'installation d'Elasticsearch consiste à ajouter la clé Elastic GPG à votre serveur.

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Créez un référentiel pour le package Elasticsearch en créant et en ouvrant le fichier /etc/yum/yum.repos.d/elasticsearch.repo pour l'édition.

$ sudo nano /etc/yum.repos.d/elasticsearch.repo

Collez-y le code suivant.

[elasticsearch]name=Référentiel Elasticsearch pour les packages 7.xbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Installez Elasticsearch et Kibana.

$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana

Vous devez utiliser le drapeau --enablerepo=elasticsearch à chaque fois depuis, nous avons gardé le référentiel désactivé par défaut. Cela empêche la mise à niveau accidentelle de ces packages.

Localisez l'adresse IP privée de votre serveur à l'aide de la commande suivante.

$ ip -brief address showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64

Notez l'adresse IP privée de votre serveur (10.133.0.3 dans ce cas). Nous l'appellerons your_private_IP . L'adresse IP publique du serveur (164.90.205.77) sera appelée your_public_IP dans le tutoriel restant. Notez également le nom de réseau de votre serveur, eth1 .

Étape 8 - Configurer Elasticsearch

Elasticsearch stocke sa configuration dans le /etc/elasticsearch/elasticsearch.yml dossier. Ouvrez le fichier pour le modifier.

$ sudo nano /etc/elasticsearch/elasticsearch.yml

Elasticsearch n'accepte que les connexions locales par défaut. Nous devons le changer pour que Kibana puisse y accéder via l'adresse IP privée.

Trouvez la ligne #network.host: 192.168.0.1 et ajoutez la ligne suivante juste en dessous, comme indiqué ci-dessous.

# Par défaut, Elasticsearch n'est accessible que sur localhost. Définissez une # adresse différente ici pour exposer ce nœud sur le réseau :##network.host :192.168.0.1network.bind_host :["127.0.0.1", "your_private_IP"]## Par défaut, Elasticsearch écoute le trafic HTTP sur le premier port libre qu'il# trouve à partir de 9200. Définissez un port HTTP spécifique ici :

Cela garantira qu'Elastic peut toujours accepter les connexions locales tout en étant disponible pour Kibana via l'adresse IP privée.

L'étape suivante consiste à activer certaines fonctionnalités de sécurité et à s'assurer qu'Elastic est configuré pour s'exécuter sur un seul nœud. Pour ce faire, ajoutez les lignes suivantes à la fin du fichier.

. . .discovery.type :single-nodexpack.security.enabled : true

Si vous envisagez d'utiliser plusieurs nœuds de recherche Elastic, vous pouvez omettre la première ligne.

Une fois que vous avez terminé, enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Configurer le pare-feu

Ajoutez les règles de pare-feu appropriées pour Elasticsearch afin qu'il soit accessible via le réseau privé.

$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1$ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch$ sudo firewall-cmd -- permanent --zone=internal --add-service=kibana$ sudo firewall-cmd --reload

Assurez-vous de choisir le nom de l'interface dans la première commande comme celle que vous avez obtenue à l'étape 7. Les commandes ci-dessus changent la zone par défaut du pare-feu en interne et ouvrent les ports 9200, 9300 pour Elasticsearch et le port 5601 pour Kibana.

Démarrer Elasticsearch

Maintenant que vous avez configuré Elasticsearch, il est temps de démarrer le service.

$ sudo systemctl start elasticsearch

Créer des mots de passe Elasticsearch

Après avoir activé le paramètre de sécurité d'Elasticsearch, l'étape suivante consiste à générer des mots de passe pour l'utilisateur par défaut. Elasticsearch est livré avec un utilitaire de création de mot de passe sur /usr/share/elasticsearch/bin/elasticsearch-setup-passwords qui peut générer des mots de passe aléatoires.

Créez les mots de passe.

$ cd /usr/share/elasticsearch/bin$ sudo ./elasticsearch-setup-passwords auto

Vous obtiendrez une sortie comme celle-ci. Appuyez sur y pour continuer lorsque vous y êtes invité.

Démarrage de la configuration des mots de passe pour les utilisateurs réservés elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.Les mots de passe seront générés de manière aléatoire et imprimés sur la console.Veuillez confirmer que vous souhaitez continuer [o/N] mot de passe yChanged pour l'utilisateur apm_systemPASSWORD apm_system =EtwMg8maU67o5tvD5rseChanged mot de passe pour l'utilisateur kibana_systemPASSWORD kibana_system =dTanR7Q2HtgDtATRvuJvChanged mot de passe pour l'utilisateur kibanaPASSWORD Kibana =dTanR7Q2HtgDtATRvuJvChanged mot de passe pour l'utilisateur logstash_systemPASSWORD logstash_system =XGSjxNktuNMWVfGYiboxChanged mot de passe pour l'utilisateur beats_systemPASSWORD beats_system =JXTr7CeHkMue608qVTQaChanged mot de passe pour l'utilisateur remote_monitoring_userPASSWORD remote_monitoring_user =Q6JTJNl3lPy0fhy6QuMPChanged mot de passe pour l'utilisateur elasticPASSWORD élastique =bd1YJfhSa8RC8SMvTIwg 

Vous ne pouvez exécuter l'utilitaire qu'une seule fois, alors enregistrez tous les mots de passe dans un emplacement sécurisé.

Étape 9 - Configurer Kibana

La première étape de la configuration de Kibana consiste à activer le xpack fonction de sécurité en générant des clés secrètes. Kibana utilise ces clés secrètes pour stocker des données dans Elasticsearch. L'utilitaire pour générer des clés secrètes est accessible depuis le /usr/share/kibana/bin répertoire.

$ cd /usr/share/kibana/bin/$ sudo ./kibana-encryption-keys generate -q --force

Le -q flag supprime les instructions de commande, et le --force flag garantit que de nouveaux secrets sont générés. Vous recevrez une sortie comme celle-ci.

xpack.encryptedSavedObjects.encryptionKey :0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey :d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey :7ba0e2a02747bb90fb0f9a3c267b99ed 

Copiez la sortie. Ouvrez le fichier de configuration de Kibana à /etc/kibana/kibana.yml pour l'édition.

$ sudo nano /etc/kibana/kibana.yml

Collez le code de la commande précédente à la fin du fichier.

. . .# Spécifie les paramètres régionaux à utiliser pour toutes les chaînes, dates et formats numériques localisables.# Les langues prises en charge sont les suivantes :anglais - en , par défaut , chinois - zh-CN .#i18n.locale :"en"xpack.encryptedSavedObjects.encryptionKey :0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey :d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey :7ba0e2a02747bb90fb0f9a3c267b99ed

Configurer le port Kibana

Kibana doit être configuré pour être accessible sur l'adresse IP privée du serveur. Trouvez la ligne #server.host: "localhost" dans le fichier et ajoutez la ligne suivante juste en dessous, comme indiqué.

# Kibana est servi par un serveur principal. Ce paramètre spécifie le port à utiliser.#server.port :5601# Spécifie l'adresse à laquelle le serveur Kibana se connectera. Les adresses IP et les noms d'hôte sont tous deux des valeurs valides.# La valeur par défaut est 'localhost', ce qui signifie généralement que les machines distantes ne pourront pas se connecter.# Pour autoriser les connexions d'utilisateurs distants, définissez ce paramètre sur une adresse sans bouclage.#server .host :"localhost"server.host :"votre_IP_privée"

Une fois que vous avez terminé, enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Configurer l'accès Kibana

L'étape suivante consiste à créer un nom d'utilisateur et un mot de passe que Kibana peut utiliser pour l'authentification. Vous pouvez le faire en modifiant directement le fichier de configuration de Kibana, mais cela peut entraîner un problème de sécurité. La méthode sécurisée implique l'utilisation de kibana-keystore application.

Exécutez les commandes suivantes pour définir un nom d'utilisateur. Saisissez kibana_system comme nom d'utilisateur.

$ cd /usr/share/kibana/bin$ sudo ./kibana-keystore add elasticsearch.usernameEntrez la valeur pour elasticsearch.username :*************

Exécutez à nouveau la commande pour définir le mot de passe. Assurez-vous d'utiliser le mot de passe que vous avez créé pour Kibana à l'étape 8. Pour notre tutoriel, le mot de passe est dTanR7Q2HtgDtATRvuJv .

$ sudo ./kibana-keystore add elasticsearch.passwordEntrez la valeur pour elasticsearch.password :********************

Démarrer Kibana

Maintenant que vous avez configuré l'accès sécurisé et la mise en réseau pour Kibana, démarrez le processus.

$ sudo systemctl start kibana

Vérifiez l'état pour voir s'il est en cours d'exécution.

$ sudo systemctl status kibana

Étape 10 - Installer et configurer Filebeat

Il est important de noter que nous allons installer Filebeat sur le serveur Suricata. Alors revenez-y et ajoutez la clé Elastic GPG pour commencer.

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Créez et ouvrez le référentiel élastique.

$ sudo nano /etc/yum.repos.d/elasticsearch.repo

Collez le code suivant.

[elasticsearch]name=Référentiel Elasticsearch pour les packages 7.xbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Installez Filebeat.

$ sudo dnf install --enablerepo=elasticsearch filebeat

Filebeat stocke sa configuration dans le /etc/filebeat/filebeat.yml dossier. Ouvrez-le pour le modifier.

$ sudo nano /etc/filebeat/filebeat.yml

La première chose que vous devez faire est de le connecter au tableau de bord de Kibana. Trouvez la ligne #host: "localhost:5601" dans le Kibana section et ajoutez la ligne suivante juste en dessous, comme indiqué.

. . .# À partir de la version 6.0.0 de Beats, les tableaux de bord sont chargés via l'API Kibana.# Cela nécessite une configuration de point de terminaison Kibana.setup.kibana :# Hôte Kibana # Le schéma et le port peuvent être omis et seront définis par défaut ( http et 5601) # Si vous spécifiez un chemin supplémentaire, le schéma est requis :http://localhost:5601/path # Les adresses IPv6 doivent toujours être définies comme :https://[2001:db8::1]:5601 #hôte :"localhost:5601" hôte :"votre_IP_privée :5601". . .

Ensuite, recherchez la sortie Elasticsearch section du fichier et modifiez les valeurs de hosts , username , et password comme indiqué ci-dessous. Pour le nom d'utilisateur, choisissez elastic comme valeur et comme mot de passe, utilisez la valeur générée à l'étape 8 de ce didacticiel.

output.elasticsearch :# tableau d'hôtes auxquels se connecter. hosts :["your_private_IP:9200"] # Protocole - soit `http` (par défaut) ou `https`. #protocole :"https" # Identifiants d'authentification - soit une clé API, soit un nom d'utilisateur/mot de passe. #api_key :"id:api_key" nom d'utilisateur :"elastic" mot de passe :"bd1YJfhSa8RC8SMvTIwg". . .

Une fois que vous avez terminé, enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Ensuite, activez le module Suricata intégré de Filebeat.

Les modules $ sudo filebeat activent suricata

La dernière étape de la configuration de Filebeat consiste à charger les tableaux de bord et les pipelines SIEM dans Elasticsearch à l'aide de la filebeat setup commande.

Configuration de $ sudo filebeat

La fin de la commande peut prendre quelques minutes. Une fois terminé, vous devriez recevoir la sortie suivante.

L'écrasement de la politique ILM est désactivé. Définissez `setup.ilm.overwrite:true` pour activer.Configuration de l'index terminée.Chargement des tableaux de bord (Kibana doit être en cours d'exécution et accessible)Tableaux de bord chargésLa configuration de ML à l'aide de setup --machine-learning va être supprimée dans la version 8.0.0. Veuillez utiliser l'application ML à la place. Pour en savoir plus :https://www.elastic.co/guide/en/machine-learning/current/index.html Il n'est pas possible de charger des tâches ML dans un Elasticsearch 8.0.0 ou une version plus récente à Beat.Configurations de tâches d'apprentissage automatique chargées Pipelines d'ingestion chargés

Démarrez le service Filebeat.

$ sudo systemctl start filebeat

Vérifiez l'état du service.

$ sudo systemctl status filebeat

Étape 11 - Accéder au tableau de bord Kibana

Étant donné que KIbana est configuré pour accéder à Elasticsearch uniquement via son adresse IP privée, vous avez deux options pour y accéder. La première méthode consiste à utiliser un tunnel SSH vers le serveur Elasticsearch depuis votre PC. Cela transférera le port 5601 de votre PC vers l'adresse IP privée du serveur, et vous pourrez accéder à Kibana depuis votre PC à http://localhost:5601 . Mais cette méthode signifie que vous ne pourrez pas y accéder de n'importe où ailleurs.

L'option est d'installer Nginx sur votre serveur Suricata et utilisez-le comme proxy inverse pour accéder au serveur d'Elasticsearch via son adresse IP privée. Nous discuterons des deux manières. Vous pouvez choisir l'une ou l'autre en fonction de vos besoins.

Utilisation du tunnel local SSH

Si vous utilisez Windows 10 ou Windows 11, vous pouvez exécuter le SSH LocalTunnel à partir de votre Windows Powershell. Sous Linux ou macOS, vous pouvez utiliser le terminal. Vous devrez probablement configurer l'accès SSH si vous ne l'avez pas déjà fait.

Exécutez la commande suivante dans le terminal de votre ordinateur pour créer le tunnel SSH.

$ ssh -L 5601:votre_IP_privée:5601 [email protected]_public_IP -N
  • Le -L L'indicateur fait référence au tunnel SSH local, qui transfère le trafic du port de votre PC vers le serveur.
  • L'private_IP:5601 est l'adresse IP vers laquelle votre trafic est transféré sur le serveur. Dans ce cas, remplacez-la par l'adresse IP privée de votre serveur Elasticsearch.
  • Le your_public_IP est l'adresse IP publique du serveur Elasticsearch, qui est utilisée pour ouvrir une connexion SSH.
  • Le -N L'indicateur indique à OpenSSH de n'exécuter aucune commande mais de maintenir la connexion active tant que le tunnel fonctionne.

Maintenant que le tunnel est ouvert, vous pouvez accéder à Kibana en ouvrant l'URL http://localhost:5601 sur le navigateur de votre PC. Vous obtiendrez l'écran suivant.

Vous devrez maintenir la commande en cours d'exécution aussi longtemps que vous aurez besoin d'accéder à Kibana. Appuyez sur Ctrl + C dans votre terminal pour fermer le tunnel.

Utilisation du proxy inverse Nginx

Cette méthode est la mieux adaptée si vous souhaitez accéder au tableau de bord depuis n'importe où dans le monde.

Configurer le pare-feu

Avant de continuer, vous devez ouvrir les ports HTTP et HTTPS dans le pare-feu.

$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https

Rechargez le pare-feu pour activer les modifications.

$ sudo firewall-cmd --reload

Installer et configurer SSL

La première étape consiste à installer le certificat SSL Let's Encrypt. Puisque nous avons déjà configuré le référentiel EPEL, installez l'outil Certbot.

$ sudo dnf install certbot

Générer le certificat SSL pour le domaine kibana.example.com .

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d kibana.example.com

La commande ci-dessus téléchargera un certificat dans /etc/letsencrypt/live/kibana.example.com répertoire sur votre serveur.

Générer un groupe Diffie-Hellman certificat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Créez un répertoire racine Web de défi pour le renouvellement automatique de Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Créez une tâche Cron pour renouveler le SSL. Il s'exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, créez d'abord le fichier /etc/cron.daily/certbot-renew et ouvrez-le pour le modifier.

$ sudo nano /etc/cron.daily/certbot-renew

Collez le code suivant.

#!/bin/shcertbot renouveler --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl recharger nginx"

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Modifiez les autorisations sur le fichier de tâche pour le rendre exécutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Installer et configurer Nginx

Rocket Linux 8.5 ships with the latest stable version of Nginx as a module. Install it using the following command.

$ sudo dnf module install nginx:1.20

You can check the version you want to install using the following command.

$ dnf module list nginxRocky Linux 8 - AppStreamName Stream Profiles Summarynginx 1.14 [d] common [d] nginx webservernginx 1.16 common [d] nginx webservernginx 1.18 common [d] nginx webservernginx 1.20 [e] common [d] [i] nginx webserverExtra Packages for Enterprise Linux Modular 8 - x86_64Name Stream Profiles Summarynginx mainline common nginx webservernginx 1.20 [e] common [d] [i] nginx webserver

Confirm the Nginx installation.

$ nginx -vnginx version 1.20.1

Activez le service Nginx.

$ sudo systemctl activer nginx

Create and open the Nginx configuration file for Kibana.

$ sudo nano /etc/nginx/conf.d/kibana.conf

Paste the following code in it. Replace the IP address with the private IP address of your Elasticsearch server.

serveur { écoute 80 ; écouter [::]:80 ; server_name kibana.example.com; return 301 https://$host$request_uri;}server { server_name kibana.example.com; jeu de caractères utf-8 ; listen 443 ssl http2; écouter [::]:443 ssl http2 ; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache partagé :MozSSL :10 m ; ssl_session_tickets désactivé ; ssl_protocols TLSv1.2 TLSv1.3 ; chiffrements_ssl -RSA-CHACHA20-POLY1305 :DHE-RSA-AES128-GCM-SHA256 :DHE-RSA-AES256-GCM-SHA384 ; résolveur 8.8.8.8 ; ssl_stapling activé ; ssl_stapling_verify activé ; ssl_dhparam /etc/ssl/certs/dhparam.pem ; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Hôte $hôte ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto $scheme ; }}

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Ouvrez le fichier /etc/nginx/nginx.conf pour l'édition.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf; .

server_names_hash_bucket_size 64 ;

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Verify the configuration.

$ sudo nginx -tnginx :la syntaxe du fichier de configuration /etc/nginx/nginx.conf est oknginx :le test du fichier de configuration /etc/nginx/nginx.conf est réussi

Start the Nginx service.

$ sudo systemctl start nginx

Your Kibana dashboard should be accessible via the URL https://kibana.example.com from anywhere you want.

Step 12 - Managing Kibana Dashboards

Before proceeding further with managing the dashboards, you need to add the base URL field in Kibana's configuration.

Open Kibana's configuration file.

$ sudo nano /etc/kibana/kibana.yml

Find the commented line #server.publicBaseUrl: "" and change it as follows by removing the hash in front of it.

server.publicBaseUrl:"https://kibana.example.com"

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Restart the Kibana service.

$ sudo systemctl restart kibana

Wait for a few minutes and load the URL https://kibana.example.com dans votre navigateur. Log in with the username elastic and the password you generated before (bd1YJfhSa8RC8SMvTIwg ) and you will get the following screen.

Type type:data suricata in the search box at the top to locate Suricata's information.

Click the first result ([Filebeat Suricata] Alert Overview ), and you will get a screen similar to the following. By default, it shows the entries for only the last 15 minutes, but we are displaying it over a larger timespan to show more data for the tutorial.

Click on the Events button to view all the logged events.

On scrolling down on events and alert pages, you can identify each event and alert by the type of protocol, the source and destination ports, and the IP address of the source. You can also view the countries from where the traffic originated.

You can use Kibana and Filebeat to access and generate other types of dashboards. One of the useful in-built dashboards that you can right away is the Security dashboard. Click on the Network dashboard from the left hamburger menu, and you will get the following screen.

You can add more dashboards like Nginx by enabling and configuring in-built Filebeat modules.

Conclusion

This concludes the tutorial for installing and configuring Suricata IDS with Elastic Stack on a Rocky Linux 8 based server. You also configured Nginx as a reverse proxy to access Kibana dashboards externally. Si vous avez des questions, postez-les dans les commentaires ci-dessous.


Rocky Linux
  1. Comment installer et configurer docker dans Rocky Linux/Centos 8

  2. Comment installer et configurer Ansible sur Rocky Linux/CentOS 8

  3. Comment installer et configurer l'équilibreur de charge HAProxy sur Rocky Linux/Alma Linux 8

  4. Comment installer et configurer Memcached sur Rocky Linux/Alma Linux 8

  5. Comment installer et configurer Squid Proxy sur Rocky Linux/Alma Linux 8

Comment installer la pile LAMP sur Rocky Linux 8

Comment installer et configurer OpenCV sur Rocky Linux 8.4

Comment installer Docker sur Rocky Linux et AlmaLinux

Comment installer MongoDB sur Rocky Linux et AlmaLinux

Comment installer Java 16 dans Rocky Linux et AlmaLinux

Comment installer et configurer Caddy Web Server avec PHP sur Rocky Linux 8