dmesg dibanjiri dengan log firewall

8

Di iptables saya, saya memiliki aturan yang mencatat paket yang dijatuhkan:

-A INPUT -i eth0       -j   LOG  --log-prefix "FW: " --log-level 7
-A INPUT -i eth0       -j   DROP

Dan /etc/rsyslog.conf, saya punya aturan lain yang mengirim log ini ke file khusus /var/log/firewall.log.

:msg, contains, "FW: "                    -/var/log/firewall.log
& ~

The & ~menghapus log segera, sehingga mereka tidak banjir syslogatau file log lainnya.

Ini bekerja dengan baik, kecuali bahwa ia membanjiri dmesglog-log firewall itu (tidak /var/log/dmesghanya output dari perintah dmesg).

Apakah ada cara untuk mencegah agar log ini tidak ditampilkan dmesg?

Martin Vegter
sumber
Apa gunanya mencatat semuanya?
0xC0000022L
1
Benar-benar bukan ide yang baik untuk mencatat semua paket yang terjatuh. Hal yang lebih baik daripada menghilangkan gejala akan lebih spesifik dengan aturan logging Anda. Misalnya tidak bijaksana untuk mencatat paket yang tidak berhubungan dengan koneksi apa pun dan tidak melakukan apa-apa »khusus« (seperti initasi koneksi). Akan jauh lebih baik untuk memotong ini ke hal-hal yang relevan seperti »Host A ingin terhubung ke port B«. Berpotensi jumlah alasan suatu paket dijatuhkan secara besar-besaran lebih besar dari jumlah alasan Anda akan menjatuhkannya karena alasan yang relevan .
Andreas Wiese
1
@ Andreas Wiese - Saya telah menyederhanakan aturan saya demi pertanyaan ini. Aturan saya lebih canggih dan spesifik. Tapi bagaimanapun, pertanyaannya adalah bagaimana mencegah dmesgbanjir, bukan tentang aturan firewall.
Martin Vegter
Lihat juga jawaban ini tentang daemon logging Netfilter ulogd2. Begitulah cara saya memecahkan masalah.
mivk

Jawaban:

4

Anda bisa menggunakan NFLOGtarget alih-alih LOG:

NFLOG
    This target provides logging of matching packets. When this  target  is  set  for  a
    rule, the Linux kernel will pass the packet to the loaded logging backend to log the
    packet. This is usually used in combination with nfnetlink_log as  logging  backend,
    which  will multicast the packet through a netlink socket to the specified multicast
    group. One or more userspace processes may subscribe to the  group  to  receive  the
    packets.  Like  LOG, this is a non-terminating target, i.e. rule traversal continues
    at the next rule.

Yang Anda perlukan hanyalah nfnetlink_logprogram logging yang mumpuni. Pesan akan pergi ke sana dan proses userspace akan memutuskan apakah akan mencatat paket atau tidak.

Hal lain yang bisa Anda coba adalah membatasi LOGaturan ke ambang tertentu:

-A INPUT -i eth0 -m limit --limit 10/minutes -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP

Ini akan rata-rata mencatat 10 paket per menit. Anda tentu saja dapat menyesuaikan ini dengan kebutuhan Anda.

Andreas Wiese
sumber
Saya tidak dapat menemukan informasi cara mengkonfigurasi rsyslogke NFLOGpaket log . Saya perlu beberapa solusi yang akan berhasil rsyslog.
Martin Vegter
2
@ MartinVegter - NFLOG akan bekerja dengan rsyslog. Untuk NFLOG, Anda akan menggunakan ulogd (saya pikir ulogd2 diperlukan) sebagai perantara. Ini akan mendengarkan pada soket netlink untuk mendapatkan log, dan mengirimkannya (sesuai konfigurasi) ke syslog. Jika ulogd2 tidak tersedia, gunakan ulogd (1.x) dan target ULOG.
Christopher Cashell
0

Ini mungkin terkait dengan tingkat log yang Anda gunakan di iptables. Seperti yang saya mengerti dari tingkat log dokumentasi rsyslog adalah: "Prioritas adalah salah satu kata kunci berikut, dalam urutan naik: debug, info, pemberitahuan, peringatan, peringatan (sama seperti peringatan), err, kesalahan (sama seperti err), kritik, waspada, muncul, panik (sama seperti muncul). " Bagaimana dengan mencoba menentukan level log di iptables dengan menggunakan namanya, yaitu 'pemberitahuan'. Baik melayani saya untuk memposting tanpa memeriksa karena sekarang saya pikir itu bukan masalah sama sekali. Saya menerapkan skema serupa dengan yang diuraikan di atas dan saya mendapatkan masalah yang sama. Kernel centos 7 saya adalah v3.10.0 dan tampaknya sejak v3.5 tampaknya logging kernel dilakukan menggunakan / dev / kmsg dan saya kira dmesg entah bagaimana mendapatkan inputnya dari sana.

VaughanR
sumber
0

Ketika Anda telah mengatur level log ke 7 dengan perintah:

-A INPUT -i eth0       -j   LOG  --log-prefix "FW: " --log-level 7

Kemudian Anda cukup memfilter pesan-pesan ini dengan mengirimkan ambang batas level ke dmesg:

dmesg --level=err,warn
puncak
sumber
-7

Kenapa kamu peduli? dmesgadalah alat tingkat rendah untuk mencetak pesan-pesan kernel terbaru, dan Anda memang meminta kernel untuk mencatat paket yang dijatuhkan.

Konfigurasikan sistem syslog sistem Anda untuk mencatat pesan iptables dalam file log terpisah dari pesan kernel lainnya, dan gunakan file log yang ditulisnya dmesg.

Colin Phipps
sumber