iptables 網路伺服器連接超時
設置好iptables後。我的網路伺服器“連接超時”。我正在嘗試根據我所閱讀的內容設置我的 iptables,這是來自另一個 serverFault 文章的 Web 伺服器的一個很好的起點。我有一個名為“iptables-setup”的文件,其中包含以下內容:
# Allow outgoing traffic and disallow any passthroughs iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # Allow traffic already established to continue iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow ssh, #dns, ftp and web services iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT # DNS # iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT iptables -A INPUT -p tcp --dport ftp -i eth0 -j ACCEPT iptables -A INPUT -p udp --dport ftp -i eth0 -j ACCEPT iptables -A INPUT -p tcp --dport ftp-data -i eth0 -j ACCEPT iptables -A INPUT -p udp --dport ftp-data -i eth0 -j ACCEPT # HTTP iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT # HTTPS iptables -A INPUT -p tcp --dport 443 -i eth0 -j ACCEPT # CPanel iptables -A INPUT -p tcp --dport 2083 -i eth0 -j ACCEPT # WHM iptables -A INPUT -p tcp --dport 2087 -i eth0 -j ACCEPT # Allow local loopback services iptables -A INPUT -i lo -j ACCEPT # Allow pings iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -I INPUT -p icmp --icmp-type source-quench -j ACCEPT iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
然後我執行:
% service iptables stop Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: mangle filter [ OK ] Unloading iptables modules: [ OK ] % sh iptables-setup % service iptables save Saving firewall rules to /etc/sysconfig/iptables: [ OK ] % service iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: mangle filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] % iptables --list -n -v Chain INPUT (policy ACCEPT 84670 packets, 33M bytes) pkts bytes target prot opt in out source destination 84083 33M acctboth all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 110K packets, 52M bytes) pkts bytes target prot opt in out source destination 109K 52M acctboth all -- * * 0.0.0.0/0 0.0.0.0/0 Chain acctboth (2 references) pkts bytes target prot opt in out source destination 116 16979 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:80 78 158K tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:80 0 0 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:25 0 0 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:25 0 0 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:110 0 0 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:110 5 866 icmp -- !lo * [MY_IP] 0.0.0.0/0 3 132 icmp -- !lo * 0.0.0.0/0 [MY_IP] 26431 11M tcp -- !lo * [MY_IP] 0.0.0.0/0 19622 7514K tcp -- !lo * 0.0.0.0/0 [MY_IP] 64 4250 udp -- !lo * [MY_IP] 0.0.0.0/0 66 10580 udp -- !lo * 0.0.0.0/0 [MY_IP] 26500 11M all -- !lo * [MY_IP] 0.0.0.0/0 19691 7524K all -- !lo * 0.0.0.0/0 [MY_IP] 0 0 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:80 0 0 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:80 0 0 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:25 0 0 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:25 0 0 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:110 0 0 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:110 1 576 icmp -- !lo * [MY_IP] 0.0.0.0/0 0 0 icmp -- !lo * 0.0.0.0/0 [MY_IP] 15 600 tcp -- !lo * [MY_IP] 0.0.0.0/0 17 720 tcp -- !lo * 0.0.0.0/0 [MY_IP] 0 0 udp -- !lo * [MY_IP] 0.0.0.0/0 1 1016 udp -- !lo * 0.0.0.0/0 [MY_IP] 16 1176 all -- !lo * [MY_IP] 0.0.0.0/0 18 1736 all -- !lo * 0.0.0.0/0 [MY_IP] 47158 19M all -- !lo * 0.0.0.0/0 0.0.0.0/0 % netstat -lntp | egrep ":80" tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13687/httpd
我為易讀性添加了空格,並且
$$ MY_IP $$被替換為我的 ip。同樣,我的問題是,我的 ipconfig 是否存在可能導致我的 Web 伺服器失敗的 HTTP 連接的問題?
您可能希望顯示
iptables --list -n -v
獲取完整防火牆規則綁定的輸出(包括載入的介面和模組)然後包括
netstat -lntp
您想要確認 httpd 確實在埠 0.0.0.0:80 而不是 127.0.0.1 上偵聽的輸出,例如# netstat -lntp | egrep ":80" tcp 0 0 :::80 :::* LISTEN 1954/httpd
**編輯:**對
iptables -v --list -n
輸出的響應…假設所有缺少協議或“全部”的行都用於 icmp 和 DENY 規則,那麼與埠 80 HTTP 匹配的唯一行如下:
116 16979 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:80 78 158K tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:80 0 0 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:80 0 0 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp spt:80
我認為目標埠與源埠混淆了。對於到 HTTP 埠的傳入流量(帶有 “tcp dpt:80” 的行),左列應該是 WAN 地址(0.0.0.0/0),目的地應該有你自己的 IP;
116 16979 tcp -- !lo * [MY_IP] 0.0.0.0/0 tcp dpt:80
它應該看起來像這樣;
116 16979 tcp -- !lo * 0.0.0.0/0 [MY_IP] tcp dpt:80
另一個更新::
關於您創建規則的原始腳本,我看不到輸出如何連接到輸入,因為您的輸入腳本添加了一條通用規則以允許埠 80 上的所有流量,就像這樣;
iptables -A INPUT -p tcp –dport 80 -i eth0 -j ACCEPT
但是,您的輸出中的規則使用不同的策略,其中包含一個名為“acctboth”的公共鏈,該鏈已插入到 INPUT 和 OUTPUT 鏈中。
我會檢查您是否正在載入正確的配置文件。
快速google一下,你粘貼的腳本,acctboth鏈的腳本實際上是cpanel提供的iptables規則集,用於頻寬監控;
http://forums.cpanel.net/f5/iptables-acctboth-chain-74575.html
這解釋了所有瘋狂的 !lo 和其他與您的輸入不匹配的東西……基本上重新載入您的規則是忽略您的規則集,這可能是由於安裝了“acctboth”頻寬監控鏈的任何東西。