Comment puis-je configurer le file /etc/syslog.conf
afin d'save les informations de journal sur iptables
dans un file spécifique.
Je veux save ces informations séparément, afin que je puisse extraire ce que je veux facilement et rapidement.
Jetez un oeil sur la page man pour iptables
. Il montre une cible appelée LOG
qui peut faire ce que vous voulez.
Définissez le niveau de consignation pour LOG
sur 4.
# DROP everything and Log it iptables -A INPUT -j LOG --log-level 4 iptables -A INPUT -j DROP
Configurez syslog.conf
pour écrire ces messages dans un file séparé.
# /etc/syslog.conf kern.warning /var/log/iptables.log
Redémarrez syslogd.
Debian / Ubuntu
$ sudo /etc/init.d/sysklogd restart
Fedora / CentOS / RHEL
$ sudo /etc/init.d/syslog restart
REMARQUE: cette méthode de journalisation est appelée priorités fixes. Ce sont des nombres ou des noms (1,2,3,4, ..) ou (DEBUG, WARN, INFO, etc.).
Si par hasard vous utilisez rsyslog
, vous pouvez créer un filter basé sur la propriété comme ceci:
# /etc/rsyslog.conf :msg, contains, "NETFILTER" /var/log/iptables.log :msg, contains, "NETFILTER" ~
Ensuite, ajoutez thils à vos règles iptables que vous voulez save:
–log-prefix NETFILTER
Vous pouvez également save les messages en utilisant ce type de filter de propriétés:
:msg, startswith, "iptables: " -/var/log/iptables.log & ~ :msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log & ~
REMARQUE: cette deuxième méthode ne nécessite aucune modification de iptables
.
Cela suppose que votre pare-feu fabrique déjà des journaux, comme tout pare-feu devrait le faire. Pour certains exemples, il nécessite un message identifiable, tel que "NETFILTER" dans l'exemple de slm.
créer un file dans rsyslog.d
vim /etc/rsyslog.d/10-firewall.conf
Cela fonctionne dans CentOS 7. Je ne sais pas comment vérifier qu'il provenait du pare-feu autre que la search de IN et OUT … CentOS est bizarre. Ne l'utilisez pas à less que 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 ce que vous avez dans votre message de 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. Pas de search de strings 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 dissortingbution devrait avoir et qui manque) (la différence semble être "stop" au lieu de "& ~";
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 un file logrotate.d aussi:
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 }