user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 25-11-2015 04:53:36

rodrigue daniel
Membre

Script d'envoie de mails après détection d'intruision avec SNORT

Salut je suis Rodrigue Daniel

Dans le but de simuler un réseau intranet sous GSN3, avec Debian 7 : (je ne vais pas trop entrer dans les détails de mon architecture)
J'ai configuré un serveur de messagerie dans ce réseau intranet sur une machine avec postfix (serveur SMTP) et courrier (serveur POP, serveur IMAP).
J'ai aussi configuré le programme IDS snort pour la détection d'intruision sous cette même machine.

Mon but était maintenant d'envoier une alerte par mail dans le même serveur de messagerie en local (sur le même serveur) dans la boîte mail de l'administrateur,
lors d'une éventuelle détection d'intruision par SNORT.
J'ai ecris un script bash que j'ai permis son éxécution au demarrage du serveur et envoiant un mail de manière automatique au serveur mail après détection d'intruision par SNORT.
Et l'administrateur pourra consulter son mail dans ce réseau local ou via Internet à travers un VPN (réseau VPN déjà mis en place avec le programme openvpn).
Bon le problème qui se pose est que mon script ne fonctionne pas bien. j'avais fait une première version qui fonctionnait à peu près mais pas comme je voulais.
Dans le but de l'améliorer je me suis heurté à un serieux problème.

Voici d'abord le code source de mon script : nom du script alertMailSnort.sh

#!/bin/sh
# script qui envoie un mail après chaque détection intruision par snort
set -u
numProcessus=""
repertoire_snort="/var/log/snort"
fichierLog="snort.log*"

ls $repertoire_snort/$fichierLog >/dev/null 2>&1
if [ $? -eq 0 ] ; then
	rm $repertoire_snort/$fichierLog >/dev/null 2>&1
fi

envoieMail() {
	domaine="entreprise.org"
        emetteur="alert@entreprise.org"
        recepteur="admin@entreprise.org"
        objet="Alert Intruision"
        donnee1="Détection d'intruision dans votre resau."
        donnee2=$(date)
        (
        	echo "EHLO $domaine"
                echo "MAIL FROM:<$emetteur>"
                echo "RCPT TO:<$recepteur>"
                echo "DATA"
                echo "SUBJECT:$objet"
                echo "$donnee1"
                echo "$donnee2"
                echo "."
                echo "quit"
        ) | telnet $domaine 25
}

start() {
	(ps '-e' | grep "alertMailSnort") >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		echo "alertMailSnort already started..."
		exit 0
	else
		ls $repertoire_snort/$fichierLog >/dev/null 2>&1
		if [ $? -eq 0 ] ; then
			journalSnort=$(ls $repertoire_snort/$fichierLog)
			compteur1=$(wc -l $repertoire_snort/$journalSnort)
        		nombreLignes1=${compteur%%/*}
        		sleep 58
        		compteur2=$(wc -l $repertoire_snort/$journalSnort)
        		nombreLignes2=${compteur%%/*}
        		if [ $nombreLignes2 -gt $nombreLignes1 ] ; then
                		envoieMail
        		fi
        		#heure=$(date +%H)
        		#minute=$(date +%M)
        		#at $heure:$((minute + 1)) <<- END
                	#	/etc/init.d/alertMailSnort start
        		#END
		fi
	fi
}

stop() {
	(ps '-e' | grep "alertMailSnort") >/dev/null 2>&1
        if [ $? -eq 0 ] ; then
                numProcessus=$(ps '-e' | grep "alertMailSnort")
                kill ${numProcessus%%\?*}
                numProcessus=""
		rm $repertoire_snort/$fichierLog.*
                exit 1
        else
        	echo "alertMailSnort already stopped..."
        fi
}

status() {
	(ps '-e' | grep "alertMailSnort") >/dev/null 2>&1
        if [ $? -eq 1 ] ; then
               echo "alertMailSnort is not running..."
        else
               echo "alertMailSnort is running..."
	       exit 1
        fi
}

case "$1" in
        start)
                start
        	;;
        stop)
                stop
        	;;
        restart)
                stop
                start
        	;;
        status)
                status
        	;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
		exit 1
esac

#exit 0

Idée : je voulais me baser sur les fichiers log de snort car lorsque snort effectue une détection d'intruision, il fait une journalisation dans ses fichiers log (je l'ai configuré de la sorte). Alors très souvent (après demarrage) snort pourvait créer plusieurs fichiers de journalisation mais je voulais un seul. c'est pourquoi j'ai eu l'idée de les supprimer au départ et de m'intéresser sur un seul fichier (que SNORT créera) en testant sa modification. Pire la commande ps (pour lister les processus) dans mon script pose problème avec son option -e (même ses options : -aux).
Je souhaiterais une aide.
Merci

Dernière modification par rodrigue daniel (25-11-2015 04:54:44)


Passionné par la Sécurité Informatique.
Le véritable ennemi de la connaissance n'est pas l'ignorance mais l'illusion de la connaissance.
La quête de la connaissance passe d'abord par l'humilité et ensuite la détermination.

Hors ligne

#2 03-01-2016 12:48:51

IceF0x
#! Gourou Linux

Re : Script d'envoie de mails après détection d'intruision avec SNORT

Excuse moi pour le temps de réponse, mais je suis vraiment débordé ces derniers temps.

PS: Iddl3 sur hackademics c'est également moi.

Essaye ceci:

par contre pourquoi utiliser telnet et pas la fonction mail ????

#!/bin/sh
# script qui envoie un mail après chaque détection intruision par snort
set -u
numProcessus=""
repertoire_snort="/var/log/snort"
fichierLog="snort.log*"

if [ -f "$repertoire_snort/$fichierLog" ] ; then
	rm "$repertoire_snort/$fichierLog" >/dev/null 2>&1
fi

envoieMail() {
	domaine="entreprise.org"
        emetteur="alert@entreprise.org"
        recepteur="admin@entreprise.org"
        objet="Alert Intruision"
        donnee1="Détection d'intruision dans votre resau."
        donnee2=$(date)
        (
        	echo "EHLO $domaine"
                echo "MAIL FROM:<$emetteur>"
                echo "RCPT TO:<$recepteur>"
                echo "DATA"
                echo "SUBJECT:$objet"
                echo "$donnee1"
                echo "$donnee2"
                echo "."
                echo "quit"
        ) | telnet $domaine 25
}

start() {
	if pgrep -a "alertMailSnort" >/dev/null 2>&1 ; then
		echo "alertMailSnort already started..."
		exit 0
	else
		if [ -f "$repertoire_snort/$fichierLog" ] ; then
			journalSnort=$(ls "$repertoire_snort/$fichierLog")
			compteur1=$(wc -l "$repertoire_snort/$journalSnort")
        		nombreLignes1=${compteur%%/*}
        		sleep 58
        		compteur2=$(wc -l "$repertoire_snort/$journalSnort")
        		nombreLignes2=${compteur%%/*}
        		if [ "$nombreLignes2" -gt "$nombreLignes1" ] ; then
                		envoieMail
        		fi
        		#heure=$(date +%H)
        		#minute=$(date +%M)
        		#at $heure:$((minute + 1)) <<- END
                	#	/etc/init.d/alertMailSnort start
        		#END
		fi
	fi
}

stop() {
        numProcessus=$(pgrep "alertMailSnort")
        if pgrep "$numProcessus" >/dev/null 2>&1 ; then
                kill "$numProcessus"
                numProcessus=""
		rm "$repertoire_snort/$fichierLog".*
                exit 1
        else
        	echo "alertMailSnort already stopped..."
        fi
}

status() {
        if pgrep "alertMailSnort" >/dev/null 2>&1 ; then
               echo "alertMailSnort is not running..."
        else
               echo "alertMailSnort is running..."
	       exit 1
        fi
}

case "$1" in
        start)
                start
        	;;
        stop)
                stop
        	;;
        restart)
                stop
                start
        	;;
        status)
                status
        	;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
		exit 1
esac

#exit 0

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#3 09-01-2016 21:35:29

rodrigue daniel
Membre

Re : Script d'envoie de mails après détection d'intruision avec SNORT

Salut

Bon voici le code que j'ai amélioré, j'ai utilisé le programme sendEmail. Voici mon code :
Je teste la modification du fichier log de snort à une durée < -1 minute

#!/bin/bash
#
# Script d'envoie des mails après détection d'intruision par snort
# Rodrigue Daniel (email : rodrigue_daniel@yahoo.com)
# Mon blog : rodriguedaniel.blogspot.com

set -u 

###########################################################
# Déclaration des variables
repertoireLogSnort="/var/log/snort"
fichierLogSnort="snort.log"
domaine="mail.entreprise.org"
adresseAdmin="admin@entreprise.org"
motDePasseAdmin="entrepriseadmin"
objetMessage="Alert Intruision"
message="Attention Une intruision a été détectée !"
horaireDate=$(date)

pushd $repertoireLogSnort > /dev/null
        if [ ! -d sauvegardeLogSnort ]; then
                mkdir sauvegardeLogSnort
        else
                mv $fichierLogSnort".*" sauvegardeLogSnort
        fi
popd > /dev/null


if find "$repertoireLogSnort" -mmin -1 -name "$fichierLogSnort" > /dev/null ; then
        sendEmail -f $adresseAdmin -s $domaine -xu $adresseAdmin $motDePasseAdmin -t $adresseAdmin -o tls=auto -u $objetMessage -m "$message $horaireDate"
fi

exit 0

- Pour ce script, il faut faire une copie dans le repertoire /etc/init.d/
- Ensuite, il faut planifier son éxécution pour chaque minute via le programme crontab
- Puis il faut mettre le script dans le répertoire /usr/sbin/
- Enfin il faut l'ajouter au démarrage du système

MERCI, j'attend vos suggestions, vos critiques...

Dernière modification par rodrigue daniel (09-01-2016 21:42:15)


Passionné par la Sécurité Informatique.
Le véritable ennemi de la connaissance n'est pas l'ignorance mais l'illusion de la connaissance.
La quête de la connaissance passe d'abord par l'humilité et ensuite la détermination.

Hors ligne

Pied de page des forums