Vous n'êtes pas identifié(e).
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
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
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