Telnet - “目标无法访问”响应

网络工程 思科 国际会议
2021-07-26 23:44:31

当涉及到不需要的主机启动到我的一台设备的 Telnet 连接时,我希望实现我的感觉是 Telnet 安全。

我可以锁定特定子网或只允许具有扩展访问列表的地址或网络范围,除了将其应用于传入接口之外,还可以在 VTY 线路上设置具有访问类的入站规则,这不是问题。

但是,当尝试连接时,会收到以下信息:

R2#telnet 172.16.100.1 正在尝试 172.16.100.1 ... % 目标无法访问;网关或主机关闭

优点是工作已经在限制条件下完成,但缺点是输出。我不希望从此输出中显示主机无法访问,或者网关或主机已关闭。因为这意味着连接存在,并且从安全的角度来看,我希望这个连接是一个幽灵。

我的问题 - 有没有办法为这样的特定实例禁用 ICMP 消息?所以不是显示上面的输出,而是显示超时消息?或类似的规定。

我很确定我之前在某个地方通过在接口上应用没有 ip unreachables 读过它,但这不会将它锁定在接口上吗?而不仅仅是为了访问列表的目的?也许这是唯一的方法,但我很想知道是否有更精细的做事方式。

提前致谢。

附注。我没有被恶意黑客攻击什么的!这仅用于测试目的。(在你开始告诉我我有比 ICMP 消息更大的问题之前)

:)

3个回答

你有路由问题。如果在 vty 接口上放置访问列表(access-class),您将收到“连接被拒绝”消息(或超时消息)。您收到目的地不可达消息这一事实意味着您的路由器没有到目的地的路由。

我怀疑当你把你的访问列表放在接口上时,你也阻止了路由协议。

telnet只需打开一个套接字或连接到另一个 IP:Port。没有办法专门阻止 telnet 到端口,同时也阻止应用程序运行。

如果在端口上运行的应用程序希望请求以准确的格式出现,则您可以针对端口限制 telnet 的功能。但是一个足够聪明的用户也可以以正确的方式格式化他的请求。如果您的应用程序需要二进制格式的请求(SSL、OCSP 等),那么 telnet 几乎毫无用处,因为 telnet 以 ASCII 格式发送字符。

无论哪种方式,打开连接都有四种可能的响应(也就是对 的四种可能的响应telnet)。他们都启动之后telnet将第一SYN的的三方握手如果您试图控制对 Telnet 的响应,您必须了解这四个选项中的每一个

  1. 客户端发送SYN,服务器用 TCP 响应SYN ACK

这是正在接受的连接。这是表明连接已被接受的唯一响应。

  1. 客户端发送SYN,服务器用 ICMP 消息响应:Destination Unreachable - Port Unreachable

ICMP 将其不同的消息组织成不同的“类型”。Destination Unreachable 消息是 ICMP 类型 3 消息。

ICMP 还可以将不同的类型进一步划分为各种“代码”。Port Unreachable 消息是ICMP 类型 3 代码 3 消息

这种回应是理想主义的,“互联网的早期”暗示回应。当互联网是一个值得信赖的地方时,这非常有帮助。它告诉您“嘿,您尝试连接的 IP 是可访问的,但您使用的特定端口未处于活动状态。”

  1. 客户端发送SYN,服务器用 TCP 响应RST

遇到 ICMP 被阻止的防火墙策略并不少见。在这些情况下,如果服务器用上述 ICMP 类型 3 代码 3 响应,它将被丢弃并且客户端将什么也没有收到(我们将在 #4 中讨论)。或者有时由于 NAT 的复杂性,从服务器到客户端的 ICMP 消息将无法“通过”单向 NAT。

因此,服务器必须指示端口不接受连接的另一种方式是使用 RST 响应 SYN——这会立即终止客户端上的连接。

这与上述第二个选项的效果类似,但它不依赖于 ICMP 是否被允许从服务器返回到客户端。

  1. 客户端发送SYN,客户端没有收到任何响应

telnet 的最终结果是 Client 什么也没收到。它可能什么也没有收到,因为 ICMP Type3 Code3 消息被阻止或从未发送过。或者 TCP RST 消息被阻止或从未发送。或者它也可能没有收到任何信息,因为 IP 地址不存在。从发起连接的客户端的角度来看,所有这三种情况都是相同的——没有收到响应。

此选项有时也称为静默丢弃静默拒绝连接。服务器(或防火墙)丢弃初始 SYN 并且不发送任何内容。

从安全角度和“不信任 Internet”的角度来看,这通常是首选响应。因为它不向客户端提供任何信息。

  • 服务器是否存在?没办法说。
  • 端口是否开放?没办法说。
  • 我的数据包到达服务器了吗?没办法说。
  • 响应数据包是否返回到客户端?没办法说。
  • 是否在传输中阻止了我的连接尝试?没办法说。
  • 传输中是否有什么东西阻塞了服务器的响应?没办法说。
  • 是否有许多其他原因阻止了它的工作?对。

客户对上述#2 和#3 的响应是(几乎)即时的。一旦收到 RST 或 ICMP Type3 Code3 消息,客户端就可以显示错误消息。

但是,使用选项 4,客户端只能坐下来等待特定的超时时间,并且当该时间到期时向客户端显示“连接超时”。

大多数防火墙 ACL(等)在拒绝连接时实现此方法。


回到您的问题,了解上述四种可能的结果,您需要确定您想要的结果。我相信您正在寻找第四个,这意味着您必须:

  1. 停止应用程序在该端口上运行 - 不理想
  2. 阻止ICMP Type 3 Code 3到达客户端的结果 - 不是特别困难,但可能会比您预期的更多并非所有阻止 ICMP 响应的方法都能够阻止作为特定 TCP SYN 的结果的 ICMP 响应,因此您很难准确确定您希望防火墙阻止什么
  3. 停止TCP RST到达客户端的结果 - 有点困难,除非您的服务器(或防火墙,如果正在执行丢弃)可以配置为简单地不发送 RST。

ICMP 消息不是您看到的文本消息;它是一个代码,表示无法到达目的地。文本消息由运行 Telnet 的设备的操作系统或 Telnet 应用程序本身创建。

在 Cisco 接口上,您可以使用该no ip unreachables命令抑制接口生成 ICMP 目标不可达响应。这需要在目标接口上配置,而不是在您使用 Telnet 的接口上配置。

Cisco IOS IP 命令参考,第 1 卷(共 3 卷):寻址和服务,12.2 版

使用指南

如果 Cisco IOS 软件接收到使用其无法识别的协议发往自己的非广播数据包,则会向源发送 ICMP 不可达消息。

如果软件收到一个由于不知道到达目的地地址的路由而无法传送到其最终目的地的数据报,它会用 ICMP 主机不可达消息回复该数据报的发起者。

此命令会影响所有类型的 ICMP 不可达消息。

例子

以下示例允许在接口上适当地生成 ICMP 不可达消息:

interface ethernet 0
 ip unreachables