我希望这不超出 ServerFault 的范围。如果问题在这里不起作用,一些指导会有所帮助。
我们有一台带有 2 个网卡的 Ubuntu 开发服务器。一个具有公共 IP,另一个是内部 IP。无论我们将主机文件设置为使用内部 IP 还是公共 IP,内部一切都运行良好。GoDaddy 的 DNS 设置在我们看来是准确的,但我们无法从网络外部访问我们的网站。我们尝试了几种 iptables 方法,但都无济于事。/var/log/nginx/error.log 中没有显示任何内容。现在,我们正在使用 iptables-persistant,如果我们运行iptables -L -n -v
,我们会得到以下内容:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
6300 5345K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
446 19640 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
8 480 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 220 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
23 1264 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
8 416 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:6081
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8080
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8000
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:225
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1581
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2123
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2124
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32869
435K 43M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 7064 packets, 2805K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 64.224.199.0/27 tcp dpt:1500
0 0 ACCEPT tcp -- * * 0.0.0.0/0 69.0.166.0/27 tcp dpt:1500
0 0 ACCEPT tcp -- * * 0.0.0.0/0 66.40.60.0/27 tcp dpt:1500
0 0 ACCEPT tcp -- * * 0.0.0.0/0 83.222.224.32/28 tcp dpt:1500
0 0 ACCEPT tcp -- * * 0.0.0.0/0 209.15.255.224/27 tcp dpt:1500
答案1
由于您的 iptables 规则均不基于接口匹配,因此很容易排除这种可能性……您会从内部看到相同的问题。您的问题不在于 iptables。
请注意,您发布的输出仅来自 filter 表,还有 nat 和 mangle 表。您可以使用以下命令检查它们:
iptables -L -v -n -t mangle
iptables -L -v -n -t nat
下一步是检查问题是否出在来自外部的数据包或对它们的响应。添加(在结尾之前)一个 iptables 规则,该规则只会匹配它们,但不执行任何操作。然后,您可以检查计数器(最左边的列)以查看数据包是否进入:
iptables -I -i eth0 -p tcp --dport 22
其中 eth0 是面向互联网的接口的名称。
顺便说一句,这些 OUTPUT 规则看起来有点奇怪。您明确允许流量选择具有目标端口 1500 的 tcp 流量的子网,然后也允许所有其他流量... 您将获得与拥有空的 OUTPUT 表相同的效果(工作量更少)。