如何啟用 iptables log 紀錄機制



在日常維運中,有時候會遇到某些客戶的 IP 進不來,或是不該允許的 IP 卻可以進入伺服器的問題,而啟動 iptables 的 log 機制,有助於我們快速釐清問題,並達到稽核、分析等附加價值。


一、 啟動 iptables log

一開始最簡單的方式,就是讓進來的流量都記錄,以下指令可以達到此目的

iptables -A INPUT -j LOG

我們也可以只指定特定的網段來做紀錄

iptables -A INPUT -s 192.168.10.0/24 -j LOG

而如果要指定 log level 可以添加 -log-level 在指令內

iptables -A INPUT -s 192.168.10.0/24 -j LOG --log-level 7

最後,在加點 prefix ,方便我們從大量訊息中找到我們想記錄的 log

iptables -A INPUT -s 192.168.10.0/24 -j LOG --log-prefix "iptables log: "

二、 檢查是否開始寫入

當我們把規則寫進 iptables 的規則後,iptables 會開始紀錄 log ,而它們的路徑分別如下:

- Ubuntu

/var/log/kern.log

- CentOS / RHEL

/var/log/messages

三、 (選項) 過濾 kern / message log

如果你覺得寫在 kern / messages log 會太雜亂、難以閱讀。各位同學可以依照以下步驟,把 iptables 的 log 從 kern / message log 中過濾出來。

1、 新增 iptables.conf

在 /etc/rsyslog.d/目錄下,新增 iptables.conf。

- Ubuntu

vim /etc/rsyslog.d/49-iptables.conf

這邊用 ubuntu 的同學,可能要注意一下,非常重要! 檔名前面的數字一定要小於 default.conf

/etc/rsyslog.d/ ├── 20-ufw.conf ├── 21-cloudinit.conf └── 50-default.conf

例如在我的環境中,default.conf 被命名為 50-default.conf ,那我們這邊就用任何小於它的數字做為檔名開頭,否則後面的步驟可能會產生預期外的結果。

- CentOS / RHEL

而 CentOS / RHEL 的同學就用自己喜歡的命名方式命名即可

vim /etc/rsyslog.d/iptables.conf

四、 添加 rsyslog 規則

1、 將以下內容寫入設定檔

:msg,contains,"iptables log: " /var/log/iptables.log
& ~

& ~ 的意思是告訴 rsyslog 丟棄這些訊息,如果沒加這個的話,rsyslog 會在寫完後,觸發 default 設定,再寫一份至 message / kern。

而用 ubuntu 的朋友,如果你的檔名前面沒有帶數字、或是數字大於 default,會造成兩邊同時都有資料的窘境,因為 rsyslog 會先讀取 default 的設定,先寫一份至 kern ,然後才讀取 iptables.conf。所以,如果你只想紀錄一份 log ,請記得一定要用數字檔名開頭,並小於 default 設定檔的數字。


2、重啟 rsyslog

service rsyslog restart



留言

  1. 請問第三步驟在 /etc/rsyslog.d/目錄下,新增 iptables.conf後,依第四步驟添加 rsyslog 規則完成。
    重新啟用rsyslog服務,
    var/log/messages有防火牆紀錄,但同目錄底下沒有生成iptables.log
    有看到firewalld.log已停止。

    請問大神我有沒有環節疏忽設定!?

    回覆刪除