Iptables

iptables 中的 POSTROUTING 鏈上只有一個日誌條目

  • March 15, 2021

我的表和鏈iptables規則如下:nat``POSTROUTING

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             LOG level warning prefix " packet-pre-snat"
MASQUERADE  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere             LOG level warning prefix " packet-post-snat"

我在主機之間發送一個 HTTP 請求,然後查看日誌,我只看到一個條目:

Mar 15 08:41:55 vpn-instance5 kernel: [  385.657182]  packet-pre-snatIN= OUT=ens5 SRC=10.132.0.2 DST=10.0.0.24 LEN=60 TOS=0x00 PREC=0x00 TTL=61 ID=40 DF PROTO=TCP SPT=53896 DPT=443 WINDOW=65320 RES=0x00 SYN URGP=0 

為什麼我只看到一個條目?

  1. 我希望至少有一些條目(因為為了建立 TCP 連接而交換了許多數據包。
  2. 我看到了 pre-snet 日誌條目。為什麼我看不到 post-snat 條目(iptables 中的第三條規則)

您看不到 post-snat 條目,因為永遠不會觸發第三條規則,因為 MASQUERADE 是終止目標,而 LOG 是非終止目標。

當 pre-snat LOG 規則被啟動時,iptables 繼續處理鏈中的規則,進入 MASQUERADE 規則,而當 MASQUERADE 規則被啟動時,iptables 停止處理鏈中的規則,因此它下的 post-snat LOG 規則永遠不會收到任何數據包由它處理,因此它不會記錄任何內容。

終止目標:終止目標執行一個動作,終止鏈內的評估並將控制權返回給 netfilter 鉤子,如果有任何剩餘,則轉到下一個鏈。

非終止目標:非終止目標執行一個動作並在鏈內繼續評估。

引用自:https://unix.stackexchange.com/questions/639322