[OMV] Log personnalisé pour le firewall

Bambusa29

Chevalier Jedi
10 Avril 2022
321
144
83
Bonjour,

Dans ce tuto je vais vous montrer comment externaliser les logs du firewall d'OMV vers un fichier dédié. Par défaut les logs du firewall se retrouve dans les log système d'OMV, ce qui n'est pas très pratique quand nous souhaitons les consulter facilement.
Je vais procéder en plusieurs étapes :

1) Modification du gestionnaire de log


Nous allons modifier le gestionnaire de log 'rsyslog' afin de rediriger les traces du firewall dans un fichier de log 'iptables'. Nous allons modifier le fichier de config '/etc/rsyslog.conf' via la commande :

Code:
$ sudo nano /etc/rsyslog.conf

firewall03.png


Nous rajoutons la ligne suivante en dessous du paragraphe ‘RULES’ (vers la ligne 63).

Code:
:msg, contains, "[iptables]" -/var/log/iptables.log
& stop

Nous signalons au système que nous voulons filtrer les messages contenant la chaine ‘[iptables] ‘.

On sauve le fichier en tapant les deux touches simultanément ‘CTRL+O’, puis on fait de même pour quitter en tapant ‘CTRL+X’.

2) Gestion de logrotate


Nous allons configurer la gestion de rotation de notre ficher de log 'iptables'.

Il faudra créer un fichier de configuration pour la rotation d'un log sur 7 jours en créant le fichier '/etc/logrotatde.d/iptables' suivant :

Code:
/var/log/iptables.log
{
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate >/dev/null
    endscript
}

Il faut relancer le daemon système ‘rsyslog’ pour que les modification soient prises en compte; puis on vérifie aussi le bon fonctionnement du daemon ‘rsyslog‘ :

Code:
$ sudo systemctl restart rsyslog
$ sudo systemctl status rsyslog


3) Règles spécifiques pour gérer les logs dans le firewall


Le firewall d’OMV est par défaut actif mais tous les ports sont ouverts. Je vais partir sur l'hypothèse ou vous avez ouvert tous ce dont vous avez besoin et vous bloquez tout le reste.

Nous allons ajoutés deux règles dans le firewall pour renvoyer tout ce qui est rejeté en INPUT et OUTPUT vers le log avec le préfixe ‘[iptables] ‘. Ces deux règles devront se situer à la fin de toutes les autres règles du firewall, juste avant la ou les dernières règle(s) 'DROP'.

Code:
INPUT ACCEPT ALL -j LOG --log-prefix "[iptables] in : "
OUTPUT ACCEPT ALL -j LOG --log-prefix "[iptables] Out : "

Concrètement dans le firewall, cela donnera ca comme règles :

firewall.png


firewall01.png


4) Vérification bon fonctionnement


Vous pouvez vérifier la présence du fichier '/var/log/iptables.log' qui vous indiquera les connexions qui ont été bloquées. S’il n’est pas présent c’est que le Firewall n’a encore rien bloquer pour le moment.

Pour terminer, nous allons vérifier le bon fonctionnement du fichier de log. Taper par exemple une requête extérieur sur le port 23 (TELNET) ou un protocole que vous bloquez en sortie :

$ wget google.fr:23

Vous devriez voir la trace du blocage dans le fichier de log :

firewall02.png

5) Recevoir des notifications


Vous pouvez aussi surveiller votre fichier de log 'iptables' pour qu'il vous envoi une notification en cas de nouvelle entrée.
Au préalable il faudra ajouter des règles dans le firewall an amont de la direction 'LOG' pour filtrer tous les rejets considérés comme normal (broadcast... etc)

Voici un exemple de script à rajouter par exemple dans le cron pour qu'il démarre au lancement d'OMV.
Il envoi une notification dans un canal dédié à 'Gotify' en cas de nouvelle entrée de le log 'iptables'.
Gotify est installé ici derrière un reverse proxy (Swag).

Il faudra remplacer dans le script :

GOTIFY_URL : Chemin vers l'URL du containeur Gotify
GOTIFY_TOKEN : Le 'token' du canal vers lequel la notification sera envoyée.


Bash:
#!/bin/sh
IPTABLES_FILE="/var/log/iptables.log"
IPTABLES_FILESIZE=$(wc -c <"$IPTABLES_FILE")

GOTIFY_URL=https://gotify.xxxx.duckdns.org
GOTIFY_TOKEN=xxxxxxxxxxx
GOTIFY_PRIORITY=2
URL=${GOTIFY_URL}/message?token=${GOTIFY_TOKEN}
MESSAGE="Nouveau blocage dans le firewall"
TITLE=iptables

while true
do

IPTABLES_FILESIZE_ACTUEL=$(wc -c <"$IPTABLES_FILE")
if [ "$IPTABLES_FILESIZE_ACTUEL" != "$IPTABLES_FILESIZE" ]; then
    # actualise taille et envoi message Gotify
    IPTABLES_FILESIZE=${IPTABLES_FILESIZE_ACTUEL}
    curl -s -S --data '{"message": "'"${MESSAGE}"'", "title": "'"${TITLE}"'", "priority":'"${GOTIFY_PRIORITY}"', "extras": {"client::display": {"contentType": "text/markdown"}}}' -X POST -H Content-Type:application/json "$URL"
fi
sleep 300
done

6) Démarrer script notification au lancement d'OMV


Les tables 'cron' d'OMV se trouve dans le répertoire '/etc/cron.d'.

Pour créer des taches spécifiques en dehors de l'interface d'administration d'OMV , il faut créer un fichier 'cron' dans ce répertoire.

Pour lancer par exemple un script "checkFirewall" & Envoyer un email à chaque démarrage d'OMV, il faut créer un fichier en y ajoutant le code suivant :

Bash:
@reboot root sleep 5 && /xxx/checkFirewall.sh | mail -E -s "Cron - Lancement /xxx/checkFirewall.sh" -a "From: Daemon root" root >/dev.null 2>&1
 
Dernière édition:
  • J'adore
Réactions: EVO
30/10/2022 : Ajout des paragraphes
5) Recevoir des notifications
6) Démarrer script notification au lancement d'OMV


 
Dernière édition: