Cool 🙂
Bon on reprend dans l'ordre.
A.i.A a écritPour lui dire que ce script doit être appliqué sur cet interface !
c sa ?
Oui c'est exactement ça.
A.i.A a écritComment on fera si j'ai 2 interfaces !?
Comme ça:
if [ "$IFACE" != "eth0" ] && [ "$IFACE" != "br0" ]
then
exit 0
fi
A.i.A a écritet si tu permets d m'expliquer ce que veut dire ces 2 lignes :
RESULT=$(/usr/bin/killall suricata 2>&1)
logger -t suricata_ifdown "Resultat: $RESULT"
Tout d'abord il faut savoir que chaque exécutable possède 2 flux de sortie:
- stdout: chaque fois que tu fais printf dans un exe ou echo dans un script, le message est envoyé dans ce flux. Dans bash, ce flux porte le numéro 1,
- stderr: un exe peux envoyer ses messages d'erreur vers un flux spécifique aux erreurs en utilisant pas exemple fprintf(stderr, ...); dans le code. Dans bash, ce flux porte le numéro 2.
Cette séparation de flux permet à celui qui appelle l'exécutable de diriger la sortie standard (stdout) vers l'écran pour l'utilisateur et les erreurs vers un fichier ou autre.
Dans un script, la syntaxe variable=$(<commande>) signifie: exécute la commande, puis envoie le stdout de la commande dans la variable. Le problème est que cela ne fonctionne que pour stdout et s'il y a une erreur on ne la verra pas puisque stderr n'est pas redirigé.
Et ça c'est le but de la syntaxe 2>&1 (rappel: 2=stderr, 1=stdout). Elle indique à bash de renvoyer tout ce qui sort sur stderr vers stdout. Ainsi la variable contiendra tout le texte qui sort de la commande que ce soit du texte normal ou bien une erreur.
Donc la première ligne exécute la commande "killall suricata" et met le résultat dans la variable RESULT. Ensuite la deuxième ligne se contente d'envoyer ce texte au serveur syslog.
A.i.A a écritMais, Voici ce que j'ai maintenant
root 1265 0.0 0.0 1828 536 ? S 16:30 0:00 /bin/sh /etc/network/if-up.d/suricata_ifup
Ok y a un petit problème dans le script de démarrage car il reste en marche 🙂
C'est parce que j'ai oublié de lancer suricata en tâche de fond. Le script attend qu'il ait terminé sauf qu'il ne termine jamais puisque c'est un démon 😛
Faut donc adapter le script de démarrage:
Au lieu de ça:
suricata -c /etc/suricata/suricata.yaml -q 0
Il faut mettre ça:
suricata -c /etc/suricata/suricata.yaml -q 0 &
ça va le lancer en tâche de fond et continuer le script. Je ne serais pas étonné que ce soit ça qui fait que le script d'arrêt ne soit pas exécuté.