Bagaimana saya bisa mengkonfigurasi file syslog.conf, untuk mencatat pesan iptables di file terpisah?


10

Bagaimana saya dapat mengkonfigurasi /etc/syslog.conffile untuk menyimpan informasi log tentang iptablesfile tertentu.

Saya ingin menyimpan informasi ini secara terpisah, sehingga saya dapat mengekstrak apa yang saya inginkan dengan mudah dan cepat.


Apakah Anda menggunakan syslog.conf atau rsyslog.conf?
slm

Jawaban:


13

syslog

Lihatlah halaman manual untuk iptables. Ini menunjukkan target yang disebut LOGyang dapat melakukan apa yang Anda inginkan.

Contoh

  1. Atur level logging LOGke 4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Konfigurasikan syslog.confuntuk menulis pesan-pesan ini ke file terpisah.

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

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

CATATAN: Metode logging ini disebut prioritas tetap. Mereka adalah angka atau nama (1,2,3,4, ..) atau (DEBUG, PERINGATAN, INFO, dll.).

rsyslog

Jika kebetulan Anda menggunakan rsyslog, Anda dapat membuat filter berbasis properti seperti:

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

Kemudian tambahkan switch untuk beralih ke aturan iptables yang ingin Anda log:

–log-prefix NETFILTER

Sebagai alternatif, Anda juga bisa mencatat pesan menggunakan jenis filter properti ini:

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

CATATAN: Metode ke-2 ini tidak memerlukan perubahan apa pun iptables.

Referensi


Dalam hal ini, informasi akan disimpan di /var/log/iptablesdan juga di /var/log/messages. Saya hanya ingin satu salinan dari data ini diiptables.log
Abid

1
Saya menambahkan jawaban saya sendiri untuk juga mencakup pertanyaan Abid, ditambah konfigurasi logrotate yang hilang. "stop" atau "& ~" mencegah pesan melanjutkan aturan rsyslog untuk sampai ke / var / log / messages.
Peter

6

Ini mengasumsikan firewall Anda sudah membuat log, seperti firewall waras yang seharusnya. Untuk beberapa contoh, ini membutuhkan pesan yang dapat diidentifikasi, seperti "NETFILTER" dalam contoh slm.

buat file di rsyslog.d

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

Ini berfungsi di CentOS 7. Saya tidak tahu cara memverifikasi bahwa itu berasal dari firewall selain mencari IN dan OUT ... CentOS aneh. Jangan gunakan ini kecuali versi berikutnya tidak berfungsi.

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

Ini berfungsi di CentOS 7 dan memeriksa konten pesan juga (ganti "Shorewall" dengan apa pun yang Anda miliki di pesan aturan -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
    & ~
}

Ini berfungsi di orang lain (Ubuntu, Debian, openSUSE). Dan ini adalah cara terbaik untuk melakukannya. Tidak mencari string dalam pesan:

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

Dan inilah yang dimiliki oleh mesin openSUSE default (yang saya pikir setiap distro seharusnya ada dan tidak ada) (perbedaannya sepertinya hanya "berhenti" daripada "& ~"; tidak semua sistem mendukung kedua sintaksis):

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

Dan untuk semua hal di atas, jangan lupa file logrotate.d juga:

vim /etc/logrotate.d/firewall

mengandung:

/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
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.