设置 iptables 后。我的网络服务器出现“连接超时”提示。我正尝试根据从另一篇 serverFault 帖子中读到的关于网络服务器的非常好的起点来设置我的 iptables。我有一个名为“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 连接?
答案1
您可能希望显示输出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输入-p tcp --dport 80 -i eth0 -j 接受
但是,输出中的规则使用了不同的策略,其中有一个名为“acctboth”的公共链,该链已插入到 INPUT 和 OUTPUT 链中。
我会检查您是否正在加载正确的配置文件。
快速谷歌搜索表明你粘贴的脚本,带有账户两者chain其实就是cpanel提供的用于带宽监控的iptables规则集;
http://forums.cpanel.net/f5/iptables-acctboth-chain-74575.html
这解释了所有疯狂的!lo 和其他与您的输入不匹配的东西......基本上重新加载您的规则就是忽略您的规则集,这可能是由于安装了“acctboth”带宽监控链造成的。