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