iptables 捕獲 DENY,但不捕獲鏈中位於其先前的 ACCEPT 位置

iptables 捕獲 DENY,但不捕獲鏈中位於其先前的 ACCEPT 位置

我的 iptables 防火牆有一個奇怪的問題:如果我設定兩個連續相同的規則,第一個是ACCEPT,第二個是DENY,傳入的封包將被拒絕(並如此記錄)。

傳入的資料包怎麼可能被第一個規則忽略並被第二個規則捕獲?

fwbuilder 視圖在這裡: 在此輸入影像描述

這是iptables轉儲:

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state     RELATED,ESTABLISHED
In_RULE_0  all  --  0.0.0.0/0            0.0.0.0/0            state NEW
In_RULE_1  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
In_RULE_0  all  --  0.0.0.0/0            0.0.0.0/0            state NEW
In_RULE_1  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

Chain In_RULE_0 (2 references)
target     prot opt source               destination         
LOG        all  --  0.0.0.0/0            0.0.0.0/0            LOG flags 0     level 6 prefix "FW RULE 0 -- ACCEPT "
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain In_RULE_1 (2 references)
target     prot opt source               destination         
LOG        all  --  0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 6 prefix "FW RULE 1 -- DENY "
DROP       all  --  0.0.0.0/0            0.0.0.0/0  

我也嘗試過ACCEPT單獨使用該規則,但沒有成功。

我看到的唯一區別是DENY規則不是state NEW,但對於我已經配置的數十個防火牆來說是相同的,並且它們工作正常。

答案1

你需要知道: 帶有 iptables 選項的規則-I將規則放在清單的開頭;帶有選項的規則-A將規則放在清單末尾。

在您的情況下:我認為您可能在兩個(幾乎相同的)iptables 規則中使用了“-I”,第二個規則被插入到第一個規則之前的列表開頭,因此您創建了一個規則列表規則依序:

match -s x.x.x.x action DROP
match -s x.x.x.x action ACCEPT

由於您的封包符合這兩個規則,因此DROP實際操作表(駐留在 RAM 中)順序中的第一個 ( ) 將生效。該順序與 iptable 設定檔中的順序無關。

交換順序,結果就會不同。

答案2

好的,我找到了。事實證明我的韌體非常好,但虛擬主機配置錯誤。我沒有任何錯誤,但 iptables 不被允許。當我允許時,韌體開始運行...難怪我們在 iptables 級別找不到錯誤...感謝所有幫助:)

答案3

當您使用 時,您的 iptablesIn_RULE_0僅適用於新連線state NEW

它也設定在您的 FORWARD 鏈(透過伺服器的封包)上,而不是您的 INPUT 鏈(傳送到伺服器的封包)上。

你測試得怎麼樣?您是否正在 ping 伺服器的特定介面?

您能否發布以下內容的完整輸出:

iptables -vnL

嘗試以下規則來記錄 INPUT 鏈上的流量(ping 到伺服器介面)

iptables -I INPUT 1 -j In_RULE_0

相關內容