Comment puis-je configurer le file syslog.conf, pour save les messages iptables dans un file séparé?

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.

syslog

Jetez un oeil sur la page man pour iptables . Il montre une cible appelée LOG qui peut faire ce que vous voulez.

Exemple

  1. 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 
  2. Configurez syslog.conf pour écrire ces messages dans un file séparé.

     # /etc/syslog.conf kern.warning /var/log/iptables.log 
  3. 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.).

rsyslog

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 .

Les references

  • Force iptables à consigner les messages dans un file journal différent
  • Journalisation des messages iptables avec rsyslog

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 }