天天看點

Linux安全之iptables黑白名單

iptables 是運作在使用者空間的應用軟體,通過控制 Linux 核心 netfilter 子產品,來管理網絡資料包的處理和轉發。在大部分 Linux 發行版中,可以通過手冊頁 或 man iptables 擷取使用者手冊。通常 iptables 需要核心子產品支援才能運作,此處相應的核心子產品通常是 Xtables。

Linux安全之iptables黑白名單

Linux安全之iptables黑白名單

封包在經過 iptables 的鍊時會比對鍊中的規則,遇到比對的規則時就執行對應的動作,如果鍊中的規則都無法比對到目前封包,則使用鍊的預設政策(預設動作),鍊的預設政策通常設定為 ACCEPT 或者 DROP。

  • 當鍊的預設政策設定為 ACCEPT時(黑名單機制)如果對應的鍊中沒有配置任何規則,就表示接受所有的封包如果對應的鍊中存在規則,但是這些規則沒有比對到封包,封包還是會被接受對應鍊中的動作應該設定為 DROP 或者 REJECT
  • 當鍊的預設政策設定為 DROP時(白名單機制)如果對應的鍊中沒有配置任何規則,就表示拒絕所有封包如果對應的鍊中存在規則,但是這些規則沒有比對到封包,封包還是會被拒絕對應鍊中的規則對應的動作應該為 ACCEPT
Linux安全之iptables黑白名單

Linux安全之iptables黑白名單

我們就來做一個簡單的白名單,隻放行被規則比對到的封包,其他封包一律拒絕。

# 清空防火牆規則
$ sudo iptables -t filter -F INPUT

# 設定預設規則為DROP,拒絕所有請求
$ sudo iptables -t filter -P INPUT DROP

# 設定白名單防火牆機制,開放指定端口
$ sudo iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
$ sudo iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT      

在目前 ssh 遠端工具中執行 iptables -F 指令後,由于 INPUT 鍊中已經不存在任何規則,所有封包都被拒絕了,包括目前的 ssh 遠端連接配接。

這就是預設政策設定為 DROP 的缺點,在對應的鍊中沒有設定任何規則時,這樣使用預設政策為 DROP 是非常不明智的。是以,我們如果想要使用白名單機制,最好将鍊的預設政策保持為 ACCEPT,然後将拒絕所有請求這條規則放在鍊的尾部,将放行規則放在前面,這樣做,既能實作白名單機制,又能保證在規則被清空時,管理者還有機會連接配接到主機

# 清空防火牆規則
$ sudo iptables -t filter -F INPUT

# 設定預設規則為ACCEPT,接受所有請求
$ sudo iptables -t filter -P INPUT ACCEPT

# 設定白名單防火牆機制,開放指定端口
$ sudo iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
$ sudo iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT

# 拒絕所有請求規則放在鍊的尾部
$ sudo iptables -t filter -A INPUT -j REJECT      

繼續閱讀