Come posso configurare il file syslog.conf per registrare i messaggi iptables in un file separato?


10

Come posso configurare il /etc/syslog.conffile per salvare le informazioni del registro iptablesin un file specifico.

Voglio salvare queste informazioni separatamente, in modo da poter estrarre ciò che voglio facilmente e rapidamente.


Stai usando syslog.conf o rsyslog.conf?
slm

Risposte:


13

syslog

Dai un'occhiata alla pagina di manuale di iptables. Mostra un bersaglio chiamato LOGche può fare quello che vuoi.

Esempio

  1. Impostare il livello di registrazione LOGsu 4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Configurare syslog.confper scrivere questi messaggi in un file separato.

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. Riavvia syslogd.

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

NOTA: questo metodo di registrazione è chiamato priorità fisse. Sono numeri o nomi (1,2,3,4, ..) o (DEBUG, WARN, INFO, ecc.).

rsyslog

Se per caso stai usando rsyslog, puoi creare un filtro basato sulle proprietà in questo modo:

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

Quindi aggiungi l'interruttore thils alle regole di iptables che desideri registrare:

–log-prefix NETFILTER

In alternativa è possibile anche registrare i messaggi utilizzando questo tipo di filtro proprietà:

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

NOTA: questo secondo metodo non richiede alcuna modifica a iptables.

Riferimenti


In questo caso, le informazioni verranno salvate in /var/log/iptablese anche in /var/log/messages. Voglio solo una copia di questi dati iniptables.log
Abid

1
Ho aggiunto la mia risposta per coprire anche la domanda di Abid, oltre alla configurazione di logrotate mancante. "stop" o "& ~" impedisce ai messaggi di continuare a seguire le regole di rsyslog per accedere anche a / var / log / messages.
Peter,

6

Ciò presuppone che il firewall abbia già creato registri, come dovrebbe fare qualsiasi firewall sano di mente. Per alcuni esempi, richiede un messaggio identificabile, come "NETFILTER" nell'esempio di slm.

crea un file in rsyslog.d

vim /etc/rsyslog.d/10-firewall.conf

Funziona in CentOS 7. Non so come verificare che provenga dal firewall oltre a cercare IN e OUT ... CentOS è strano. Non usare questo a meno che la prossima versione non funzioni.

# into separate file and stop their further processing
if  ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Funziona in CentOS 7 e verifica anche il contenuto del messaggio (sostituisci "Shorewall" con tutto ciò che hai nel messaggio della regola -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
    & ~
}

Funziona in altri (Ubuntu, Debian, openSUSE). E questo è il modo migliore per farlo. Nessuna ricerca di stringhe nel messaggio:

# into separate file and stop their further processing
if  ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then    -/var/log/firewall
    &   ~

Ed ecco cosa ha una macchina openSUSE predefinita (che penso che ogni distribuzione dovrebbe avere e che manca) (la differenza sembra essere solo "stop" invece di "& ~"; non tutti i sistemi supportano entrambe le sintassi):

if  ($syslogfacility-text == 'kern') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    stop
}

E per tutto quanto sopra, non dimenticare anche un file logrotate.d:

vim /etc/logrotate.d/firewall

contenente:

/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
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.