Iptables

使用 iptables 創建/配置防火牆

  • September 16, 2021

我想使用 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看起來不太漂亮,但它顯示了所有最好的細節,所以總是使用後者。

引用自:https://serverfault.com/questions/1077712