我有一个安装了 Ubuntu 16.0.4 的 VPS。每次我通过 SSH 连接到它时,下次尝试连接时都会出现超时错误以及任何其他类型的连接尝试(http、git、ping、端口 8080)。
我认为这意味着IP被封锁了。但在系统中却找不到任何迹象。甚至停止整个“ufw”也没有效果。
最终我参考了系统日志并运行了 tcpdump,如下所示:
tcpdump -i ens3 icmp and icmp[icmptype]=icmpecho
然后尝试从被阻止的 IP 进行 ping 操作,但没有任何结果。请注意,我可以看到来自我的 VPS 提供商服务器的一些常规 ping,并且当我从未阻止的设备进行 ping 时,它也会出现。
这是否意味着问题存在于我购买的 VPS 之外?或者还有其他地方我可以查找可能发生的阻塞吗?
Ubuntu 安装几乎是原始的,除了“ufw”之外,没有像我检查的那样安装其他防火墙。
答案1
tcpdump
在数据包到达本地端口过滤之前确实看到数据包。如果您在 tcpdump 中看到传入数据包,但它没有到达您确定正在侦听的应用程序,则意味着该数据包正在被防火墙丢弃或修改。但是,如果您根本没有通过 tcpdump 看到传入的数据包,则意味着该数据包在到达您的计算机之前已被丢弃。
这里有一些关于 Linux 防火墙的更多信息,这些信息对您没有帮助,但有助于调查数据包是否在您的计算机上被丢弃。
Ufw 是一种防火墙操纵工具。防火墙机制是网络过滤器。您可以使用以下命令列出 netfilter 规则iptables
命令。完整的机制涉及许多部分,但是要调查端口阻塞,您只需要查看 INPUT 链:
iptables -nvxL INPUT
每一行代表一个规则,规则按顺序执行,直到一次对数据包(例如ACCEPT
或DROP
它)做出决定。链可以将其他链作为“子例程”涉及。如果没有规则作出决定,则适用连锁店的政策。iptables -nvxL
不带参数列出所有链。每个规则旁边都有一个数据包计数,如果您正在发送一个数据包并想知道它在哪里丢失,那么检查之前和之后的计数器值通常是一种廉价的查找方法。