Jak skonfigurować plik syslog.conf, aby rejestrować komunikaty iptables w osobnym pliku?

10

Jak mogę skonfigurować /etc/syslog.confplik, aby zapisać informacje dziennika iptablesw określonym pliku.

Chcę zapisać te informacje osobno, aby łatwo i szybko wyodrębnić to, czego chcę.

Oferta
źródło
Czy używasz syslog.conf lub rsyslog.conf?
slm

Odpowiedzi:

13

syslog

Zajrzyj na stronę podręcznika użytkownika iptables. Pokazuje cel zwany, LOGktóry może robić, co chcesz.

Przykład

  1. Ustaw poziom rejestrowania na LOG4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Skonfiguruj, syslog.confaby zapisywać te wiadomości w osobnym pliku.

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

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

UWAGA: Ta metoda rejestrowania nazywa się stałymi priorytetami. Są to liczby lub imiona (1,2,3,4, ..) lub (DEBUG, WARN, INFO itp.).

rsyslog

Jeśli przypadkiem używasz rsyslog, możesz utworzyć filtr oparty na właściwościach, taki jak:

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

Następnie dodaj przełącznik Thils do reguł iptables, które chcesz zalogować:

–log-prefix NETFILTER

Alternatywnie można również rejestrować wiadomości przy użyciu tego typu filtru właściwości:

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

UWAGA: Ta druga metoda nie wymaga żadnych zmian w iptables.

Bibliografia

slm
źródło
W takim przypadku informacje zostaną zapisane w /var/log/iptablesi również w /var/log/messages. Chcę tylko jedną kopię z tych danych wiptables.log
Abid
1
Dodałem własną odpowiedź, aby zakryć również pytanie Abida, a także brakującą konfigurację logrotate. „stop” lub „& ~” zapobiegają dalszemu przechodzeniu wiadomości przez reguły rsyslog, aby dostać się również do / var / log / messages.
Peter
6

Zakłada się, że zapora już tworzy dzienniki, jak każda rozsądna zapora ogniowa. W niektórych przykładach wymaga rozpoznawalnego komunikatu, takiego jak „NETFILTER” w przykładzie slm.

utwórz plik w rsyslog.d

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

Działa to w CentOS 7. Nie wiem, jak zweryfikować, że pochodzi z zapory, oprócz szukania IN i OUT ... CentOS jest dziwny. Nie używaj tego, chyba że następna wersja nie działa.

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

Działa to w CentOS 7 i sprawdza również zawartość wiadomości (zamień „Shorewall” na cokolwiek, co masz w wiadomości reguły -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
    & ~
}

Działa to w innych (Ubuntu, Debian, openSUSE). I to jest najlepszy sposób, aby to zrobić. Brak wyszukiwania ciągów w wiadomości:

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

I oto, co ma domyślna maszyna openSUSE (którą, jak sądzę, powinna mieć i której brakuje każda dystrybucja) (różnica wydaje się być tylko „stop” zamiast „& ~”; nie wszystkie systemy obsługują obie składnie):

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

Poza tym nie zapomnij też pliku logrotate.d:

vim /etc/logrotate.d/firewall

zawierający:

/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
}
Piotr
źródło