Comment puis-je configurer le fichier syslog.conf pour enregistrer les messages iptables dans un fichier séparé?


10

Comment puis-je configurer le /etc/syslog.conffichier afin d'enregistrer les informations du journal iptablesdans un fichier spécifique.

Je souhaite enregistrer ces informations séparément, afin de pouvoir extraire ce que je veux facilement et rapidement.


Utilisez-vous syslog.conf ou rsyslog.conf?
slm

Réponses:


13

syslog

Jetez un œil dans la page de manuel de iptables. Il montre un objectif appelé LOGqui peut faire ce que vous voulez.

Exemple

  1. Définissez le niveau de journalisation LOGsur 4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Configurez syslog.confpour écrire ces messages dans un fichier 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 soit des nombres, soit des noms (1,2,3,4, ..) ou (DEBUG, WARN, INFO, etc.).

rsyslog

Si par hasard vous utilisez rsyslog, vous pouvez créer un filtre basé sur la propriété comme ceci:

# /etc/rsyslog.conf
:msg, contains, "NETFILTER"       /var/log/iptables.log
:msg, contains, "NETFILTER"     ~

Ajoutez ensuite ce commutateur à vos règles iptables que vous souhaitez enregistrer:

–log-prefix NETFILTER

Vous pouvez également enregistrer les messages à l'aide de ce type de filtre de propriété:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

REMARQUE: cette 2e méthode ne nécessite aucune modification iptables.

Références


Dans ce cas, les informations seront enregistrées dans /var/log/iptableset également dans /var/log/messages. Je veux seulement une copie de ces données dansiptables.log
Abid

1
J'ai ajouté ma propre réponse pour couvrir également la question d'Abid, ainsi que la configuration logrotate manquante. le "stop" ou "& ~" empêche les messages de continuer dans les règles de rsyslog pour accéder à / var / log / messages également.
Peter

6

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
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.