dmesg 充斥著防火牆日誌

dmesg 充斥著防火牆日誌

在我的 iptables 中,我有一條記錄丟棄資料包的規則:

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

在中/etc/rsyslog.conf,我有另一個規則將這些日誌傳送到專用檔案/var/log/firewall.log

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

立即刪除& ~日誌,以便它們不會淹沒syslog或其他日誌檔案。

這很有效,除了它會充斥著dmesg這些防火牆日誌(不是/var/log/dmesg命令的輸出dmesg)。

有沒有辦法阻止這些日誌顯示dmesg

答案1

您可以使用NFLOG目標而不是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.

您所需要的只是一個nfnetlink_log強大的日誌記錄程式。訊息將發送到那裡,用戶空間進程將決定是否記錄資料包。

您可以嘗試的另一件事是將LOG規則限制為特定閾值:

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

這平均每分鐘記錄 10 個資料包。您當然可以根據需要進行調整。

答案2

當您使用以下命令將日誌等級設為 7 時:

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

然後,您可以透過將等級閾值傳遞給 dmesg 來簡單地過濾掉這些訊息:

dmesg --level=err,warn

答案3

這可能與您在 iptables 中使用的日誌等級有關。據我從 rsyslog 文件日誌層級了解,優先順序是以下關鍵字之一,按升序排列:debug、info、notice、warn、warn(與 warning 相同)、err、error(與 err 相同)、暴擊、警報、緊急、恐慌(與緊急)。嘗試使用名稱「notice」來指定 iptables 中的日誌等級怎麼樣?不檢查就發文是我的權利,因為我現在認為這根本不是問題。我實施了與上面概述的類似的方案,但也遇到了同樣的問題。我的 centos 7 核心是 v3.10.0,顯然從 v3.5 開始,內核日誌記錄似乎是使用 /dev/kmsg 完成的,我認為 dmesg 以某種方式從那裡獲取輸入。

答案4

你為什麼在乎?dmesg是一個列印最近內核訊息的低階工具,並且您確實要求核心記錄丟棄的資料包。

設定係統的 syslog 系統,將 iptables 訊息記錄在與其他核心訊息不同的日誌檔案中,並使用它寫入的日誌檔案而不是dmesg.

相關內容