我无法连接到我的网络服务器上的端口 80。我的 iptables 处于默认状态:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
当我启动不同的服务器(nginx、nodejs……)时,我可以让它们监听端口 80,但尝试访问时,我总是收到“连接被拒绝”的提示。监听任何其他端口(81、8080 等)都可以正常工作。只有端口 80 不知为何被阻止了。通过 localhost 访问端口 80 确实有效,因此出于测试目的,我甚至关闭了外部防火墙,但仍然没有成功。我该怎么做才能找出是谁阻止了这个端口 80?
根据要求,netstat -tlpn 的输出(在端口 80 上运行 nginx 时):
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 710/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1179/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1661/master
tcp 0 0 0.0.0.0:5984 0.0.0.0:* LISTEN 980/beam.smp
tcp 0 0 87.106.64.11:3306 0.0.0.0:* LISTEN 1346/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3274/nginx: master
tcp6 0 0 :::22 :::* LISTEN 1179/sshd
tcp6 0 0 :::25 :::* LISTEN 1661/master
答案1
我做了一个tcptraceroute 87.106.64.11 80
,肯定是我的服务器阻塞了端口。在跟踪的某个时刻,我得到了这个:
s18132051.onlinehome-server.info (87.106.64.11) [closed]
所以我[重置了我的 IP 表][1],这成功了。
因此,要么表中存在一些隐藏规则,要么iptable -L
没有提供所有规则。我会将此标记为答案,因为它解决了问题。
我仍然很想听听,为什么我在执行时没有得到任何阻止规则iptables -L
[1]:链接不再有效
答案2
我遇到了同样的问题,但使用的是 Debian 8.4 (Jessie)。与上述情况一样,解决方案是 IPTables 刷新脚本,如以下所列http://insanelabs.net/linux/linux-reset-iptables-firewall-rules/。虽然 iptables 没有报告任何规则,但肯定存在一些“隐藏”规则,或者 iptables 本身存在错误。我正在向 Debian 维护人员报告此错误。
如果链接的网站出现故障,这里是相关脚本的全文,为方便起见,在此重现。
#!/bin/sh
echo "Flushing iptables rules..."
sleep 1
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
答案3
您没有列出所有规则。我发现获取任何活动 netfilter 表的一个好方法是:
对于 blah in sudo /bin/cat /proc/net/ip_tables_names
; 执行 sudo /sbin/iptables -t $blah -L -vn --line-numbers|sed "s/^/$blah: /" ; 完成 |less -RXF
另一个选择是运行:
/sbin/iptables-保存
如果您有耐心,您可以逐一检查每个规则,并将任何 DENY 目标更改为 ACCEPT,然后查看哪一个可以解决问题。