題 iptables默認策略與`DROP`之間的區別,並在輸入鏈中插入單獨的策略以DROP所有連接


我正在嘗試將所有傳入連接DROP到我的服務器,除了特定的網絡。同時,我希望保持從我的服務器到外部網絡(通過任何協議的任何網絡)的所有傳出連接都打開。它正在通過在INPUT鏈中進行以下兩項更改來實現:

注意:測試是在3個服務器(VM)上完成的,IP地址在192.168.0.0/24網絡上,所有規則在server3上定義(IP:192.168.0.3)

a. iptables -P INPUT DROP
b. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
[root@server3 ~]# iptables -nvL

Chain INPUT (policy DROP 124 packets, 22308 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  265 34603 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 433 packets, 34693 bytes)
 pkts bytes target     prot opt in     out     source               destination         

但是,我的第一個問題:

  1. 當我定義上面的第一條規則(更改INPUT鏈的默認策略)時,它也停止了來自我的服務器(IP:192.168.0.3)的所有傳出連接(ssh,ping)。如果我的默認OUTPUT鏈策略仍然可以接受,並且我沒有在OUTPUT鏈下定義任何規則,為什麼會發生這種情況呢?

我想通過不改變INPUT鏈的默認策略來實現同樣的目的,如下所示:

c. iptables -I INPUT -j DROP
d. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

但它仍然阻止進出服務器3的所有傳入/傳出連接。這讓我想到了第二個問題:

  1. 規則如何? c. 和 a. 工作不同?請幫助理解,因為我是linux防火牆的新手。

2
2017-09-07 18:46


起源




答案:


如果您有默認的DROP INPUT策略,甚至是 響應 來自outgoint連接的數據包將被丟棄。

要接受這些,請添加此輸入規則:

iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

至於你的最後一個問題,在你的 c and d 例如(假設這些命令之前的空規則)您正在設置第一個規則 drop everything 和a 第二 接受來自某個網絡的流量的規則。 IPTABLES會盡快抓取匹配,因此第一個規則始終匹配(沒有條件設置),因此之後的每個規則都不會執行。必須定義規則的例外情況 之前 規則。

在第一個例子中 -P INPUT DROP,你正在設置一個 持續 將捕獲之前未匹配的任何內容的規則,因此添加的任何異常將在該默認規則之前執行(-P)。

-I  插入到某個位置(例如,在我之前的命令中,我將ESTABLISHED,RELATED規則設置為第一個,因此無論您在此之後設置什麼它都匹配。

-A  附加到規則列表,因此如果在默認值之前匹配。

如果你想用第一個帶有明確規則的例子(比如 c and d),你應該交換那些。


6
2017-09-07 19:15



非常感謝您的精心解釋。現在的重要性了 order 每個CHAIN中的規則更清晰。還有一個問題涉及到 rule 你建議的。它的行為是否與: iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT? - dig_123
一樣的。 State 是“老”似乎 conntrack 將成為新內核的標準。看到 serverfault.com/questions/358996/... 有關詳細說明。 - NuTTyX