標籤:linux centos 防火牆
問題:將規則添加到防火牆中,總是連接埠無法開啟
(1)修改檔案
首先vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT(允許5001到5009的連接埠通過防火牆)
接著執行/etc/init.d/iptables restart (重啟防火牆使配置生效)。
因將該句加在檔案末尾,導致防火牆重啟後連接埠仍然無法使用。
(2)解決方案
應該在預設的22連接埠這條規則的下面添加連接埠新規則,然後重啟防火牆才會生效。如下:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
其中
:INPUT ACCEPT [0:0]
# 該規則表示INPUT表預設策略是ACCEPT
:FORWARD ACCEPT [0:0]
# 該規則表示FORWARD表預設策略是ACCEPT
:OUTPUT ACCEPT [0:0]
# 該規則表示OUTPUT表預設策略是ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 意思是允許進入的資料包只能是剛剛我發出去的資料包的回應,ESTABLISHED:已建立的連結狀態。RELATED:該資料包與本機發出的資料包有關。
-A INPUT -i lo -j ACCEPT
# 意思就允許本地環回介面在INPUT表的所有資料通訊,-i 參數是指定介面,介面是lo,lo就是Loopback(本地環回介面)
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 這兩條的意思是在INPUT表和FORWARD表中拒絕所有其他不符合上述任何一條規則的資料包。並且發送一條host prohibited的訊息給被拒絕的主機。
這個是iptables的預設策略,你也可以刪除這些,另外建立符合自己需求的策略。
因此把-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT放在首行(INPUT ACCEPT前),因預設策略沒有設定不會生效.
而把-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT放在最後,執行-A INPUT -j REJECT --reject-with icmp-host-prohibited時INPUT表和FORWARD表只有22,後加的連接埠5001到5009都會被拒絕。
(3)其他方法
使用命令iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT跟上述問題一樣,無法開啟連接埠,-A是添加在後行。可以使用iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT能成功,-I
是插入在前排。
也可以使用命令system-config-firewall啟動圖形化介面添加連接埠,如:
centos下配置防火牆連接埠失敗