Iptables
使用 iptables 創建/配置防火牆
我想使用 iptables 設置防火牆。
伺服器在執行httpd服務(httpd) 作業系統是Centos7,下面的資訊是安裝iptables-services後,不做任何修改就啟動iptables。
[root@iptables ~]# iptables -nL --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination
如您所見,在 INPUT 鏈第 num3 行中,似乎伺服器已打開。
但是無法通過瀏覽器訪問網頁。
有什麼我必須設置的嗎?
作為
iptables-save
(取自評論)的輸出:# Generated by iptables-save v1.4.21 on Thu Sep 16 13:41:53 2021 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [527:50260] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Thu Sep 16 13:41:53 2021
正如我所懷疑的那樣,
iptables -L
隱藏了額外的匹配,但iptables-save
顯示了赤裸裸的真相。您的規則 #3 僅匹配lo
- 環回介面。此防火牆僅接受來自外部的 tcp/22 (SSH) 連接。最簡單的解決方案是:
iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
您還可以使用 conntrack 進行過濾,並將兩個規則組合成一個帶多埠的規則:
iptables -I INPUT 4 -m conntrack --ctstate NEW -p tcp -m multiport --dports 80,443 -j ACCEPT -m comment --comment "HTTP/HTTPS service"
還要注意我添加的評論。為每條規則使用註釋,如果您的防火牆發展到超過 50 條規則,您會感謝我的建議。
不要使用
-m state
. 這是過時的。它確實-m conntrack
在引擎蓋下使用,並且像這樣明確地拼寫更加透明。不要使用
iptables -L
. 如您所見,它的輸出看起來“更漂亮”,優勢到此為止,但它也未能呈現所有需要的細節。的輸出iptables-save
看起來不太漂亮,但它顯示了所有最好的細節,所以總是使用後者。