Cela suppose que votre pare-feu crée déjà des journaux, comme tout pare-feu sain devrait le faire. Pour certains exemples, il nécessite un message identifiable, tel que "NETFILTER" dans l'exemple de slm.
créer un fichier dans rsyslog.d
vim /etc/rsyslog.d/10-firewall.conf
Cela fonctionne dans CentOS 7. Je ne sais pas comment vérifier qu'il provient du pare-feu à part chercher IN et OUT ... CentOS est bizarre. Ne l'utilisez que si la prochaine version ne fonctionne pas.
# into separate file and stop their further processing
if ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Cela fonctionne dans CentOS 7 et vérifie également le contenu du message (remplacez «Shorewall» par tout ce que vous avez dans le message de votre règle -j LOG):
# into separate file and stop their further processing
if ($msg contains 'Shorewall') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Cela fonctionne dans d'autres (Ubuntu, Debian, openSUSE). Et c'est la meilleure façon de le faire. Aucune recherche de chaînes dans le message:
# into separate file and stop their further processing
if ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then -/var/log/firewall
& ~
Et voici ce qu'une machine openSUSE par défaut a (que je pense que chaque distribution devrait avoir et est manquante) (la différence ne semble être que "stop" au lieu de "& ~"; tous les systèmes ne prennent pas en charge les deux syntaxes):
if ($syslogfacility-text == 'kern') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
stop
}
Et pour tout ce qui précède, n'oubliez pas non plus un fichier logrotate.d:
vim /etc/logrotate.d/firewall
contenant:
/var/log/firewall {
rotate 7
size 500k
postrotate
# before using this, run the command yourself to make sure
# it is right... the daemon name may vary
/usr/bin/killall -HUP rsyslogd
endscript
}