我正在尝试允许互联网流量7778
在我的服务器上传输,但无法正确执行。可能我犯了一些新手错误。您能帮我诊断并解决问题吗?
我只是做了以下事情:
sudo iptables -A TCP -p tcp -m tcp --dport 7778 -j ACCEPT
如果我这样做iptables -S
,我确实会看到附加在列表中的规则,例如:
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
-A TCP -p tcp -m tcp --dport 7778 -j ACCEPT
但是,如果我从另一台服务器 ping 这个特定端口telnet example.com 7778
,我会看到:
telnet:无法连接到远程主机:连接被拒绝
我还能在这里做什么?端口80
,443
并且22
工作正常,仅供参考。
注意:我的服务器使用 Azure 基础架构(经典 VM)。我采取的额外步骤是endpoint
在 Azure 门户中添加端口 7778。因此涵盖了这部分。
答案1
通过使用-A
交换机,您已将规则添加到链的末尾。这几乎肯定会将其放置在丢弃/阻止数据包的规则之后。
当 iptables/netfilter 检查应如何处理数据包时,第一个匹配的数据包将获胜。在您的情况下,它可能会匹配如下行,-A INPUT -j REJECT --reject-with icmp-port-unreachable
这将在匹配您的允许消息之前导致出现“连接被拒绝”消息。
解决方案是将规则插入-I
到 INPUT 链中的合适位置。
答案2
根据错误日志,似乎您的服务没有监听。
为了更有效地解决此问题,我建议按以下方式检查:
1.检查虚拟机中的服务。
netstat -ant|grep 7778
请确保端口正在监听。
- 使用本地主机 IP 进行测试
远程登录 127.0.0.1 7778
据我所知,如果您的防火墙缺少一些配置,您将收到以下错误。
telnet:无法连接到远程主机:连接超时