即使在开放的端口上,协议如何被阻止?

网络工程 安全 SSH
2022-02-28 06:03:14

这可能是一个愚蠢的问题,但我想知道即使服务器正在侦听未阻塞的端口(如 80),网络如何阻止像 SSH 这样的协议。我什至尝试将未阻塞端口转发到服务器端的端口 22,我仍然被阻止。(这只影响外部连接,SSH 在本地连接上工作得很好。)

我很好奇这样的事情究竟是如何完成的。这绝对是我的弱点,如果这是一个愚蠢的问题,再次抱歉。

谢谢!

3个回答

传统上,服务由服务器端的侦听端口识别,然后通过操纵对该端口的访问来控制。然后,您将能够通过执行您尝试做的事情来规避该控制,让被阻止的服务在不同的端口上侦听,并希望绕过该块。

现代网络不仅能够查看目标端口,还能够分析比特流以匹配和识别不同协议固有的模式。这通常称为“深度包检测”或“协议分析”。

现代防火墙不仅会检查 IP 和 TCP 层,还会更上一层。它将检查 TCP 包的内容。

它将检查始终适用于特定协议的模式。

在 SSH 的情况下,模式是:

  • 前 4 个字节包含包的长度。
  • 其他所有内容都使用一种算法进行加密,该算法会产生每个字节都可能出现的输出。

因此,如果防火墙看到内容为 4 个字节的包,当转换为一个数字时,它总是等于数据的长度,并且在这 4 个字节之后,所有数据看起来都是随机的,那么它可以非常确定它是 ssh 流量并阻止它。

服务器上可能存在允许或拒绝发往守护程序的流量的安全设置。因此,通过某个端口的 telnet 可能会起作用,因为服务器在该端口上侦听 - 但 sshd 可能会拒绝源地址。通过检查服务器上的以下文件来验证这一点:

/etc/hosts.allow
/etc/hosts.deny

有关详细信息,请参阅 hosts_access(5)。