这可能是一个愚蠢的问题,但我想知道即使服务器正在侦听未阻塞的端口(如 80),网络如何阻止像 SSH 这样的协议。我什至尝试将未阻塞端口转发到服务器端的端口 22,我仍然被阻止。(这只影响外部连接,SSH 在本地连接上工作得很好。)
我很好奇这样的事情究竟是如何完成的。这绝对是我的弱点,如果这是一个愚蠢的问题,再次抱歉。
谢谢!
这可能是一个愚蠢的问题,但我想知道即使服务器正在侦听未阻塞的端口(如 80),网络如何阻止像 SSH 这样的协议。我什至尝试将未阻塞端口转发到服务器端的端口 22,我仍然被阻止。(这只影响外部连接,SSH 在本地连接上工作得很好。)
我很好奇这样的事情究竟是如何完成的。这绝对是我的弱点,如果这是一个愚蠢的问题,再次抱歉。
谢谢!
传统上,服务由服务器端的侦听端口识别,然后通过操纵对该端口的访问来控制。然后,您将能够通过执行您尝试做的事情来规避该控制,让被阻止的服务在不同的端口上侦听,并希望绕过该块。
现代网络不仅能够查看目标端口,还能够分析比特流以匹配和识别不同协议固有的模式。这通常称为“深度包检测”或“协议分析”。
现代防火墙不仅会检查 IP 和 TCP 层,还会更上一层。它将检查 TCP 包的内容。
它将检查始终适用于特定协议的模式。
在 SSH 的情况下,模式是:
因此,如果防火墙看到内容为 4 个字节的包,当转换为一个数字时,它总是等于数据的长度,并且在这 4 个字节之后,所有数据看起来都是随机的,那么它可以非常确定它是 ssh 流量并阻止它。
服务器上可能存在允许或拒绝发往守护程序的流量的安全设置。因此,通过某个端口的 telnet 可能会起作用,因为服务器在该端口上侦听 - 但 sshd 可能会拒绝源地址。通过检查服务器上的以下文件来验证这一点:
/etc/hosts.allow
/etc/hosts.deny
有关详细信息,请参阅 hosts_access(5)。