在我的 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
.