IDS-Suricata-sur-un-raspberry-Pi

1) Prerequis

Suricata est un système de détection d’intrusion (IDS) réseau (network-based) et un système de prévention d’intrusion (IPS) open source. Site: https://suricata.io/

Pourquoi utilise des systèmes IDS / IPS Un réseau d’entreprise typique possède plusieurs points d’accès à d’autres réseaux, notamment des réseaux publics et des réseaux privés. L’enjeu est d’assurer la sécurité de ces réseaux tout en les gardant ouverts aux clients. Les attaques d’aujourd’hui sont si complexes qu’elles peuvent contourner les meilleurs systèmes de sécurité, en particulier ceux qui ne sont protégés que par un cryptage ou des pare-feu. Malheureusement, ces technologies ne peuvent à elles seules empêcher les attaques d’aujourd’hui.

Qu’est ce que IDS/IPS IDS est un système de détection d’intrusion et IPS un système de prévention d’instruction. Les deux comparent les paquets du réseau à une base de données contenant des signatures connues de cyberattaques. La plus grosse différence entre les deux est que l’IPS est un système de contrôle alors que l’IDS est un système de surveillance. Sois IDS (Intrusion Detection Systems) : surveille et analyse le trafic pour vérifier que les paquets ne sont pas vérolés selon une base de données connue. Ils comparent aussi l’activité réseau en cours avec une base de données et les scanners de port. Pour IPS (Intrusion Prevention Systems) : il n’agit pas sur le réseau, mais entre le monde extérieur et le réseau interne. ll y en a deux type, soit HIDS (basé sur l’hôte) ou NIDS (base sur le réseau ).

Quelle sont les différences entre HIDS et NIDS ?

Qu’est-ce qu’un IPS ?

Un IPS (Système de Prévention des Intrusions) est une sécurité pour repérer et réprimer les menaces déterminées. Les IPS inspectent et surveillent constamment notre réseau, analysent des comportements douteux malveillants et prennent en compte des informations à leur sujet. L’ IPS avertit ces incidents à l’administrateur système et prend des mesures défensives, comme l’arrêt du point d’accès et la reconfiguration du pare-feu pour détourner de futures attaques. Les solutions IPS peuvent en outre être utilisées pour déterminer les différents problèmes liés aux politiques de sécurité de l’entreprise pour empêcher les employés et les visiteurs de franchir les règles incluses dans les politiques.

Quelle est la différence entre un IDS et un IPS ?
Examinons donc la différence entre IPS et IDS, la grande différence entre IPS et IDS réside dans l’action prise quand une potentielle menace est détecté. L’IPS (systèmes de prévention des intrusions) comme ils contrôlent l’accès au réseau informatique et peuvent, rejette des abus et des attaques. Ces systèmes sont créés pour observer les données intrusives et prendre des mesures pour empêcher les attaques de se produire. Au contraire, les IDS (systèmes de détection d’intrusion) ne sont pas conçus pour empêcher les attaques. Ils ne font que surveiller le réseau et envoient des alertes lorsqu’une menace potentielle est détectée, et donc IDS requière un Humain ou un autre système pour prendre la décision de filtre ou pas.

Pourquoi utiliser suricata :

Premièrement, Suricate est open source donc gratuit, il gère aussi la détection d’intrusion (IDS), la prévention d’intrusion (IPS) mais surtout, il est très rapide et performant. De plus, il est assez simple à mettre en œuvre. Et il peut s’installer sur énormément d’appareils / d’écosystèmes. Même si Suricata a des concurrents comme Zeek , Sweet Security ou Snort, mais Suricata est gratuit et à une énorme communauté active donc les nouvelles informations sur les menaces sont souvent disponibles en premier dans un format compatible avec Suricata , de même si vous avez un problème il y a de fortes chances que quelqu’un d’autre a déjà eu ces problèmes et qu’il a donné la solution sur un forum sur Internet. C’est donc pour cela que nous choisissions Suricata.

Schéma d’installation image

Utilisation d’un commutateur ou d’un switch avec port mirroring pour que tout le trafic puissent être vu par notre raspberry pu avec Suricata Pour nous avec du cisco il faut : Pour dupliser tout les packet du port fastEthernet 0/1

monitor session 1 source interface fa 0/1 both

ET pour le renvoyer sur l’interace fastEthernet 0/2

monitor session 1 destination interface fa0/2

Raspberry Pi : Le Raspberry Pi est un nano-ordinateur monocarte à processeur ARM qui fonctionne en 32 et 64 bits. Il fut créé pour pouvoir donner accès plus facilement aux ordinateurs. C’est très accessible dû au faible prix et aux logiciels libres. Le Raspberry Pi permet l’installation et l’exécution de plusieurs systèmes d’exploitation libre et compatible comme GNU, Linux et Debian. Il fonctionne également sur le système d’exploitation Windows 10. Le Raspberry Pi est fourni nu. Donc il n’y a ni boîtier, ni câble d’alimentation, de clavier, de souris, d’écran, pour diminuer les coûts.

2) Mise en Pratique

1) Installation de Raspbian Lite

<h3> 1) Raspbian Lite </h3> Pour commencer, nous installons un OS sur le raspberry pi. Nous choisissons donc raspbian car c'est la distribution la plus adaptée pour raspberry pi, et nous prenons la version light car nous n'avons pas besoin d'interface graphique et aussi pour éviter de consommer de l'énergie et des ressources.

Je télécharge l’instaleur raspbian sur le site de la fondation Raspberrry .

Ensuite après que l’ISO est téléchargé , je l’installe sur une micro SD avec balenaEtcher .

Mais d’abord avant d’insérer la carte SD dans le raspberry pi, je vais créer un fichier et ssh dans le dossier boot de la carte SD pour que le SSH soit activé (pour ne pas devoir brancher un écran et un clavier au raspberry pi et devoir l’activer manuellement)

Je peux donc maintenant mettre la carte SD dans le raspberry pi , attendre quelques minutes qu’il démarre et aller sur l’interface d’administration de ma box pour trouver l’adresse IP assignée au raspberry pi.

Le IP privé de mon raspberry pi et donc 192.168.0.23 soite mje peux maintenant lancer une connexion ssh depuis mon ordinateur pour contrôler le raspberry pi.

2) Accès à distance

Pour pouvoir accéder au raspberry pi depuis l’IUT et pour la configuration et par la suite la maintenance et la supervision, il est donc important de pouvoir avoir un accès au raspberry pi, mais de manière sécurisée, c’est pour cela que nous avons fait un vpn WIREGUARD pour avoir de très bonnes performances tout en restant très sécurisé.
Nous sommes prêts à passer à l’étape 2.

2) Installation de Suricata

On commence donc à préparer l’installation , en installant les dépendances nécessaires :

sudo apt install libpcre3 libpcre3-dbg libpcre3-dev build-essential libpcap-dev libyaml-0-2 libyaml-dev pkg-config zlib1g zlib1g-dev make libmagic-dev libjansson-dev rustc cargo python3-yaml liblua5.1-dev

Télécharger les sources de Suricata :

wget https://www.openinfosecfoundation.org/download/suricata-6.0.1.tar.gz

Décompresser les sources :

tar -xvf suricata-6.0.1.tar.gz

Se placer dans le dossier Suricata :

cd $HOME/pi/suricata-6.0.1/

Configurer l’installation du logiciel :

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua

Pour la ompiler suricata :

make

ensuite installer suricata :

sudo make install

image

Se placer dans le dossier suricata-update :

cd $HOME/pi/suricata-6.0.1/suricata-update/

Compiler suricata-update :

sudo python setup.py build

Installer suricata-update :

sudo python setup.py install

Se placer dans le dossier Suricata :

cd ..

Finaliser l’installation de suricata en y incluant ses règles :

sudo make install-full

Mettre à jour les règles de suricata :

sudo suricata-update

image

Configurer Suricata

Configurer suricata en éditant le fichier suricata.yaml :

sudo nano /etc/suricata/suricata.yaml

Modifier la variable HOME_NET afin qu’elle contienne votre réseau local, par exemple :

image

Maintenant lancer Suricata

Lancer suricata avec la commande suivante :

sudo suricata -c /etc/suricata/suricata.yaml -i eth0 -S /var/lib/suricata/rules/suricata.rules

Soit avec :

Maintenant que suricata est bien installé , on peut tester Suricata

Teste Suricata

Pour vérifier le bon fonctionnement de Suricata , j’ajoute une règle qui affiche un avertissement à chaque réception d’un ICMP Echo (ping).

lancer suricata.rules :

nano /var/lib/suricata/rules/suricata.rules

pour ajouter la regle suivant :

alert icmp any any -> any any (msg: "ICMP Packet found"; sid: 1; rev: 1;)

image

3)Suricata en mode service

Pour pouvoir utiliser suricata en tant que service Suricata en tant que service, il faut créer ce fichier

nano /etc/systemd/system/suricata.service
# Exemple de fichier d'unité systemd de Suricata.
[Unit]
Description=Suricata Intrusion Detection Service
After=network.target syslog.target
[Service]
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 -S /var/lib/suricata/rules/suricata.rules
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target

soit pour activer notre nouveau service suricata on utilise la commande commande :

systemctl enable suricata.service

Maintenant suricata peut etre utiliser en tant que service :

systemctl start suricata.service

Pour le stopper :

systemctl stop suricata.service

Pour le relancer :

systemctl restart suricata.service

Pour vérifier l’état du service :

systemctl status suricata.service

Maintenant le service se démarre automatiquement au démarrage du raspberry pi on verifie que le service est bien lancer. image

Le service se lancera maintenant automatiquement au démarrage du Raspberry Pi.

4) Les Regles Suricata

Il faut à la fois éviter les faux positifs et s’assurer que les règles utilisées sont à jour et permettent la détection de menaces récentes. Les règles activées par défaut de Suricata génèrent de nombreux faux positifs (alertes qui ne sont pas de vrais problèmes). Par exemple, si vous utilisez Dropbox ou Skype sur votre réseau, vous devrez désactiver les règles correspondantes afin de ne pas générer d’alertes inutiles pour votre réseau. Pour plus de sécurité de votre installation, vous pouvez ajouter de nouvelles sources de règles ou créer vos propres règles. Il est donc bon de savoir que chaque règle Suricata suit le modèle suivant : action l’en-tête options L’action correspond à l’action effectuée en cas de détection (alerte, abandon, passage…).

L’en-tête permet de définir le protocole (tcp, http, ftp, dns, tls…) ainsi que l’adresse IP et le port de source et de destination du trafic concerné par l’alerte.

Les options de la règle sont indiquées entre parenthèses et séparées par des virgules. Certaines options ont des paramètres, qui sont spécifiés par leur mot clé, suivi de deux points et de la valeur du paramètre. Les règles sont identifiées par leur identifiant de signature, le paramètre sid.

Par exemple:
drop tcp $HOME_NET any -> $EXTERNAL_NET any (msg:”ET TROJAN Likely Bot Nick in IRC (USA +..)”; flow:established,to_server; flowbits:isset,is_proto_irc; content:”NICK “; pcre:”/NICK .USA.[0-9]{3,}/i”; reference:url,doc.emergingthreats.net/2008124; classtype:trojan-activity; sid:2008124; rev:2;)

L’action

La Source and destination ( $HOME_NET $EXTERNAL_NET).
Avec source et destination, vous spécifiez respectivement la source du trafic et la destination du trafic. Vous pouvez attribuer des adresses IP (IPv4 et IPv6 sont pris en charge) et des plages IP. Ceux-ci peuvent être combinés avec des opérateurs :

image

Normalement, vous utiliserez également des variables, telles que $HOME_NETet $EXTERNAL_NET. Le fichier de configuration spécifie les adresses IP concernées et ces paramètres seront utilisés à la place des variables dans vos règles. Voir Rule-vars pour plus d’informations. Par exemple :

image

Le Ports (source and destination) (any).
Le trafic entre et sort par les ports. Différents ports ont des numéros de port différents. Par exemple, le port par défaut pour HTTP est 80 alors que 443 est généralement le port pour HTTPS.

Les ports mentionnés ci-dessus sont généralement les ports de destination. Les ports sources, c’est-à-dire l’application qui a envoyé le paquet, se voient généralement attribuer un port aléatoire par le système d’exploitation.

Lors de la configuration des ports, vous pouvez également utiliser des opérateurs spéciaux, comme décrit ci-dessus. Des signes comme :

image

La direction (->).

La direction indique de quelle manière la signature doit correspondre. Presque chaque signature a une flèche vers la droite( ->). Cela signifie que seuls les paquets avec la même direction peuvent correspondre. Cependant, il est également possible qu’une règle corresponde dans les deux sens ( <>) :

source -> destination source <> destination (les deux directions)

Pour finir les options Le reste de la règle se compose d’options. Ceux-ci sont entourés de parenthèses et séparés par des points-virgules. Certaines options ont des paramètres (tels que msg), qui sont spécifiés par le mot-clé de l’option, suivi de deux-points, suivi des paramètres. D’autres n’ont pas de paramètres et sont simplement le mot-clé (tel que nocase):

5) Exploiter les fichiers de logs

Il enregistre le trafic réseau détecté et des activités suspectes, Suricata enregistre également des informations de service et des statistiques de trafic réseau. D’ailleurs, il faut faire attention, car ces logs prennent vite de la place, ils peuvent facilement remplir la carte sd sur raspberry pi et aussi un carte sd ne sont pas conçues pour des lectures, écritures intensives et elles peuvent échouer après un certain temps. Donc pour une raison de fiabilité et avoir un système de stockage et de sauvegarde performant, nous n’allons pas utiliser une carte sd.

Suricata enregistre 4 type de log :

Gestion des fichiers de logs sur NAS

Nous choisissions le nas pour une raison de fiabilité êtres sur de ne pas perdre les logs, mais vous pouvez très bien utiliser un disque dur externe branché en USB N’ayant pas de NAS à disposition, j’utilise une vm https://xpenology.club/ pour simuler un nas synology pour ce faire nous allons monter un système de fichiers distant sur le Pi à l’aide d’iSCSI. creer une cible iscsi sur le NAS synology.

Proxmox

N’ayant pas de NAS à la maison, mais un serveur, j’avais d’abord pensé et fait une VM avec XPEinology qui simulait donc un nas synology dans Virtual box mais cela consommer énormément de ressources pour un résultat très peu concluant et très instable. Nous avons donc choisi la solution de l’hyperviseur de type 1 Ce qui permet d’avoir une bien meilleure émulation, pouvoir le utilisation à distance et aussi surtout pour une question de sécurité il est très simple de faire des sauvegardes d’avoir des serveurs de réplication Nous avons donc choisi proxmox , mais proxmox, c’est quoi ? Proxmox (Proxmox Virtual Environment) est une solution de virtualisation basée sur Linux KVM (Debian 64 bits) qui permet la création de machines virtuelles de type OpenVZ et KVM. Il s’agit d’une solution de type bare metal (bare metal en français), au sens de tourner directement sur la machine, c’est-à-dire sans OS. Le nom signifie un hyperviseur de type 1 (également appelé natif), où un hyperviseur minimaliste simplifié et optimisé se comporte comme un moniteur qui démarre le matériel, se connecte à un réseau et démarre une machine virtuelle. Le serveur ESX de VMware, le LPAR d’IBM ou Hyper-V de Microsoft sont des hyperviseurs de type 1. Proxmox est géré via une interface web (https://serverur_proxmox:8006) et fournit une vue d’ensemble de toutes les VM installées. En plus de cette interface web, des scripts peuvent être créés pour automatiser certaines tâches et il est totalement gratuit. Donc je pars prendre ma clé téléchargée l’iso sur le site officiel et commencer à booster mon serveur sur la clé usb, je suis bien l’installation ensuite l’installation finie mon serveur démarre sur proxmox , il m’invite à aller sur l’interface web https://192.3168.0.45:8006, Je m’y rends et on me demande mon nom et mot de passe je me log donc en root

image

D’ailleurs pour des soucis d’énergie comme c’était un ordinateur portable l’écran reste en permanence allumé et si je rappelle capot l’ordinateur se met en veille donc pour contrer ce problème voici la commande : systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

Je configure simplement et je me lance dans l’installation de la VM Je commence part téléchargé et uplaod les fichiers de conf https://drive.google.com/drive/folders/120qSow3L5XTYqhO3AkgngmBEXv3x0LTj Puis je crée ma vm et je poursuis l’installation après que tout soit fini, je peux avoir accès a l’interface graphique.

image

image

je prends en main le interface et installe le service iscsi

image

image image image

ensuite j’install et demarre le service iscsi sur le raspberry

apt install open-iscsi
systemctl start open-iscsi

image

Laissez le système “découvrir” la cible iSCSI sur le NAS, notez/copiez le dans de la cible et attachez-la à votre système :

sudo iscsiadm --mode discovery --type sendtargets --portal 192.168.0.33
sudo iscsiadm --mode node --targetname <fqdn of the target as returned by the command above> --portal 192.168.0.33 --login

À ce stade, j’exécute fidsk -l
image

pour identifiez le périphérique qui a été attribué à la cible iSCSI, dans mon cas, c’était /dev/sda . Puis je formatez le périphérique via la commande : mkfs.ext4 /dev/sda . je peux maintenant le monter ou je veux (j’ai choisi /mnt/nas-iscsi) : mount /dev/sda /mnt/nas-iscsi/

image

pour que le disque soit automatiquement monté au démarrage : blkid /dev/sda "l'UUID de votre périphérique"

Epusi j’edite le fichier de configuration de la cible iSCSI situé dans /etc/iscsi/node/<fqdn>/<nom court>/default et modifiez-le apr node.startup = automatic image

Ajoutez à /etc/fstab : UUID=<UUID de votre périphérique> /mnt/nas-iscsi ext4 defaults,_netdev 0 0 image

je vais sur l’interface de mon nas et je vois que le lecteur est bien connecter a mon raspberry et qu’il est fonctionnel image

Créez un répertoire pour les logs de Suricata mkdir /mnt/nas-iscsi/suricata_logs j’arrêtez le service Suricata et j’editez son fichier de configuration nano /etc/suricata/suricata.yml et indiquez le répertoire de logs par défaut : default-log-dir : /mnt/nas-iscsi/suricata_logs/ . image

Redémarrez Suricata systemctl start suricata.service et vérifiez que les fichiers journaux de Suricata sont créés dans le nouvel emplacement. Voila mon fichier mes log sont maintenant stoke sur mon serveur NAS

6) Installation d'une interface graphique

Installation ELK

Maintenant que nous avons des alertes de journalisation Suricata, concentrons-nous sur l’extrémité destinataire. Nous devons configurer le moteur Elasticsearch qui ingérera et indexera les alertes et Kibana qui sera utilisé pour visualiser les alertes, construire de beaux écrans de tableau de bord, etc.

Nous allons donc utiliser ELK Mais qu’est ce que ELK , ELK est un acronyme upour décrire une pile qui comprend trois projets open source:

C’est la principal source de gestion des logs pour les entreprises qui souhaitent bénéficier des avantages d’une solution de journalisation centralisée. En effet, les outils : Elasticsearch, Logstash et Kibana, lorsqu’ils sont utilisés ensemble car vous pouvez aussi les utiliser séparément et avec d’autre outils mais ils forment une pile de bout en bout qui offre une analyse de données dont des logs en temps réel afin de fournir des informations exploitables à partir de presque tout type de source de données structurée et non structurée. On verra plus tard que chaque élément joue un rôle important. Ils peuvent être utilisés pour des projets simples ou complexe car ils prennent en charge des opérations avance et simple. Il est important de dissocier le rôle de ces 3 outils afin de mieux comprendre le rôle et la communication de l’ensemble de ces composants :

Cela correspond parfaitement a notre projet et il est aussi énormément utilisé en entreprise comme :

Heureusement, il existe de très bonnes images Docker prêtes à l’emploi pour Elasticsearch et Kibana, utilisons-les pour économiser du temps et des efforts. Ces images sont conservées par Idriss Neumann et sont disponibles ici : https://gitlab.comwork.io/oss/elasticstack/elasticstack-arm

Installer Docker :

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

Doker ?

Nous allons donc utiliser de docker donc un petit point sur qu’est-ce que le docker

Avec la technologie Docker, vous pouvez traiter les conteneurs comme des machines virtuelles très légères et modulaires. En outre, ces conteneurs vous offrent une grande flexibilité : vous pouvez les créer, déployer, copier et déplacer d’un environnement à un autre.

Comment ça fonctionne

La technologie Docker utilise le noyau Linux et des fonctions de ce noyau, telles que les groupes de contrôle cgroups et les espaces de noms, pour séparer les processus afin qu’ils puissent s’exécuter de façon indépendante. Ce qui est l’objectif des conteneurs : exécuter plusieurs processus et applications séparément les uns des autres afin d’optimiser l’utilisation de votre infrastructure tout en bénéficiant du même niveau de sécurité que celui des systèmes distincts.

Les outils de conteneurs, y compris Docker, sont associés à un modèle de déploiement basé sur une image (container). Il est ainsi plus simple de partager une application ou un ensemble de services, avec toutes leurs dépendances, entre plusieurs environnements.

Docker offre donc pas mal d’avantage modularité, sécurité, simplicité et rapidité. mais fessons un petit point sur les commande a connaître lorsque vous utilisez Docker.

docker ps (-a) : cela vous montre toutes les instances de docker en cours d’exécution dans votre environnement. Si vous ajoutez l’option -a, vous verrez même des conteneurs arrêtés.

docker images (-a): la commande montre les images que vous avez construites, et le -a vous montre les images intermédiaires.

docker network ls : La commande docker network ls liste les différents réseaux

Déconnexion et reconnectez-vous au Raspberry. Ensuite, extrayez les images Docker que nous utiliserons et créez un réseau Docker pour laisser les deux conteneurs d’Elasticsearch et de Kibana parler ensemble :

docker pull comworkio/elasticsearch:latest-arm
docker pull comworkio/kibana:latest-arm
docker network create elastic

Nous voulons également stocker les journaux et les données d’Elasticsearch et de Kibana sur la cible iSCSI du NAS. Pour ce faire, créez les répertoires :

mkdir /mnt/nas-iscsi/es01_logs
mkdir /mnt/nas-iscsi/es01_data
mkdir /mnt/nas-iscsi/kib01_logs
mkdir /mnt/nas-iscsi/kib01_data

On lance les conteneur , nommés ES01 et KIB01, et mappez les répertoires hôtes créés ci-dessus :

docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 -v /mnt/nas-iscsi/es01_data:/usr/share/elasticsearch/data -v /mnt/nas-iscsi/es01_logs:/usr/share/elasticsearch/logs -e "discovery.type=single-node" comworkio/elasticsearch:latest-arm &
docker run --name kib01 --net elastic -p 5601:5601 -v /mnt/nas-iscsi/kib01_data:/usr/share/kibana/data -v /mnt/nas-iscsi/kib01_logs:/var/log -e "ELASTICSEARCH_HOSTS=http://es01:9200" -e “ES_HOST=es01” comworkio/kibana:latest-arm &

Il y a un petit bug dans l’image Kibana et que l’adresse IP du serveur Elasticsearch n’est pas correctement configurée. je vais donc dans le conteneur (docker exec -it kib01 bash) et modifiez le fichier nano /usr/share/kibana/config/kibana.yml. Sur la dernière ligne, il y a une adresse IP de serveur qui est codée en dur, remplacez-la par es01. Changez également la destination de journalisation par défaut et enregistrez le fichier, cela devrait ressembler à :

image

Redémarrez le conteneur Kibana : docker stop kib01; docker start kib01 Bravo, maintenant le moteur Kibana fonctionne correctement et il est connecté au serveur Elasticsearch.

7) Installation Fluent Bit

Malheureusement la suite ELK est très gourmande en ram et n’ayant qu’un raspberry pi 3B+ qui n’a que 1go de ram et Fluent Bit car il est le plus léger en termes d’utilisation de la mémoire (-200/300 Mo par rapport à Logstash basé sur Java) Il est donc impossible de faire tourner Logstash en plus des deux autres, soit Fluent Bit fera le pont entre le producteur de logs (Suricata) et les consommateurs de logs (ElasticSearch et Kibana). Entre les deux, Fluent Bit enrichira les logs avec la géolocalisation des adresses IP pour pouvoir visualiser sur une carte du monde les origines ou destinations des paquets déclenchant des alertes, etc.

Nous allons télécharger la carte de GeoLiteCity en suivant cette procédure https://docs.fluentbit.io/manual/installation/linux/raspbian-raspberry-pi. Pour commencer, nous devons ajouter un nouveau dépôt APT pour en extraire le paquet :

 curl https://packages.fluentbit.io/fluentbit.key | sudo apt-key add - 

Editez le fichier /etc/apt/sources.listet ajoutez la ligne suivante :

 deb https://packages.fluentbit.io/raspbian/buster buster main 

image

Exécutez ensuite les commandes suivantes :

 apt-get update 
 apt-get install td-agent-bit 

À ce stade, td-agent-bit est installé et doit encore être configuré. On configure le fichier /etc/td-agent-bit/td-agent-bit.conf (nano /etc/td-agent-bit/td-agent-bit.conf) avec cette configuration (adaptez l’IP du réseau interne à votre propre réseau - encore une fois dans mon cas, c’est 192.168.0.X et changez l’IP externe pour permettre aux alertes qui sont purement internes au LAN d’être géolocalisées sans erreur) :

  [SERVICE]
    Flush           5
    Daemon          off
    Log_Level       error
    Parsers_File    parsers.conf


[INPUT]
    Name tail
    Tag  eve_json
    Path /mnt/nas_iscsi/suricata_logs/eve.json
    Parser myjson
    Db /mnt/nas_iscsi/fluentbit_logs/sincedb

[FILTER]
    Name  modify
    Match *
    Condition Key_Value_Does_Not_Match src_ip 192.168.0.*
    Copy src_ip ip

[FILTER]
    Name modify
    Match *
    Condition Key_Value_Does_Not_Match dest_ip 192.168.0.*
    Copy dest_ip ip

[FILTER]
    Name modify
    Match *
    Condition Key_Value_Matches dest_ip 192.168.0.*
    Condition Key_Value_Matches src_ip 192.168.0.*
    Add ip <ENTER YOUR PUBLIC IP HERE OR A FIXED IP FROM YOUR ISP>

[FILTER]
    Name  geoip2
    Database /usr/share/GeoIP/GeoLite2-City.mmdb
    Match *
    Lookup_key ip
    Record lon ip %{location.longitude}
    Record lat ip %{location.latitude}
    Record country_name ip %{country.names.en}
    Record city_name ip %{city.names.en}
    Record region_code ip %{postal.code}
    Record timezone ip %{location.time_zone}
    Record country_code3 ip %{country.iso_code}
    Record region_name ip %{subdivisions.0.iso_code}
    Record latitude ip %{location.latitude}
    Record longitude ip %{location.longitude}
    Record continent_code ip %{continent.code}
    Record country_code2 ip %{country.iso_code}

[FILTER]
    Name nest
    Match *
    Operation nest
    Wildcard country
    Wildcard lon
    Wildcard lat
    Nest_under location


[FILTER]
    Name nest
    Match *
    Operation nest
    Wildcard country_name
    Wildcard city_name
    Wildcard region_code
    Wildcard timezone
    Wildcard country_code3
    Wildcard region_name
    Wildcard ip
    Wildcard latitude
    Wildcard longitude
    Wildcard continent_code
    Wildcard country_code2
    Wildcard location
    Nest_under geoip

[OUTPUT]
    Name  es
    Match *
    Host  127.0.0.1
    Port  9200
    Index logstash
    Logstash_Format on

image

Créez le fichier db utilisé pour enregistrer la position du décalage dans le fichier source :

mkdir -p /mnt/nas_iscsi/fluentbit_logs/
touch /mnt/nas_iscsi/fluentbit_logs/sincedb

Créer un compte sur https://dev.maxmind.com/geoip/geolocate-an-ip/databases et télécharger la base de données GoeLiteCity2, pour la mettre dans /usr/share/GeoIP/GeoLite2-City.mmdb Créez un fichier de configuration de l’analyseur : nano /etc/td-agent-bit/parsers.conf

[PARSER]
    Nom monjson
    Format json
    Time_Key timestamp
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z

Tout est terminé , je peux démarrer le deamon Fluent Bit service td-agent-bit start

Maintenant tout devrait fonctionner à ce stade. Je me connect à Kibana à l’adresse http://192.168.0.23:5601 et utilisez la fonction Discover pour afficher votre index Logstash et toutes les données poussées de Logstash vers Elasticsearch.

Maintenant pour avoir de beau visuel

j’utilse des templates de https://github.com/StamusNetworks/KTS7 et avec ce template cela donne acces a 28 tableaux de bord pour Kibana 7.x et Elasticsearch 7.x à utiliser avec le système Suricata IDS/IPS/NSM - Détection des intrusions, prévention des intrusions et surveillance de la sécurité du réseau

pour l’installer

CD API-KIBANA7 curl -X POST "192.168.0.23:5601/api/saved_objects/_import" -H 'kbn-xsrf: true' --form file=@index-pattern.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import" -H 'kbn-xsrf: true' --form file=@search.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import" -H 'kbn-xsrf: true' --form file=@visualization.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import" -H 'kbn-xsrf: true' --form file=@dashboard.ndjson curl -X POST "localhost:5601/api/saved_objects/_import" -H 'kbn-xsrf: true' --form file=@query.ndjson service de redémarrage de kibana

et

  CD API-KIBANA7 curl -X POST "192.168.0.23:5601/api/saved_objects/_import? overwrite=true" -H 'kbn-xsrf: true' --form file=@index-pattern.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import? overwrite=true" -H 'kbn-xsrf: true' --form file=@search.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import? overwrite=true" -H 'kbn-xsrf: true' --form file=@visualization.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import? overwrite=true" -H 'kbn-xsrf: true' --form file=@dashboard.ndjson curl -X POST "192.168.0.23:5601/api/saved_objects/_import? overwrite=true" -H 'kbn-xsrf: true' --form file=@query.ndjson service de redémarrage de kibana

et voila notre système est opérationnel

Capture d’écran 2022-03-20 à 14 51 55

Source : https://www.reddit.com/r/raspberry_pi/comments/np1a8f/building_my_home_intrusion_detection_system/
: https://jufajardini.wordpress.com/2021/02/15/suricata-on-your-raspberry-pi/
: https://www.framboise314.fr/detection-dintrusion-ids-avec-suricata-sur-raspberry-pi/