是否有可能使用 iptables 欺骗成功的 TCP 连接?

是否有可能使用 iptables 欺骗成功的 TCP 连接?

通常,对于 IP 表,您会丢弃或拒绝流量。对于 TCP,有没有办法让 iptables 发回一个 syn 但忘记连接?

答案1

xtables-addonsTARPIT目标(手册页):

TARPIT
不使用本地每个连接资源来捕获并保留传入的 TCP 连接。

TARPIT 仅在 TCP 级别工作,并且完全与应用程序无关。该模块将应答 TCP 请求并像侦听服务器一样进行操作,但除了发送 ACK 或 RST 之外,不发送任何数据。传入的数据包将被忽略并丢弃。

在 Debian/Ubuntu 上,该软件包是xtables-addons-common

答案2

有几件不太好的事情是可以做的;可以插入 RST 数据包,除非涉及的主机具有异常和自定义的防火墙配置,否则 RST 将导致连接关闭。另一种方法是接受连接,但随后以某种方式删除状态条目;这可能看起来像

...
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --syn -m tcp --dport 22 -j ACCEPT
...

可能还带有日志记录(通过日志扫描仪进行操作,例如sec.pl)或安装的某些其他模块conntrack-tools运行类似于以下的命令

conntrack -D -s 192.0.2.42

192.0.2.42 通过 ssh 连接后删除该 IP 的状态表条目。

答案3

发回一个 syn 但忘记了连接?

这意味着生成 SYN/ACK 但不跟踪连接。

不完全是,有点。


首先第一件事:为什么?

如果 SYN 发送至关闭端口,则:

如果 SYN 是到打开端口然后:

  • 允许服务器(服务)按其认为合适的方式处理请求。

  • 使用 SYNPROXY 帮助服务器。

    使用 SYNPROXY 缓解 SYN 洪水

    这实际上是试图保护服务器免受 SYN-ACK Flood DDoS 攻击。这与你所问的不一样,也不可能。不可能有两个实体(服务器和 iptables)同时对同一个数据包使用 SYN/ACK 进行应答。要么是其中之一,要么是另一个。

但 SYNPROXY 很聪明。它是如何工作的(以及更多):

使用 SYNPROXY 时,客户端会透明地连接到 SYNPROXY。因此,3 路 TCP 握手首先发生在客户端和 SYNPROXY 之间:

  • 客户端向服务器 A 发送 TCP SYN

  • 在防火墙处,当该数据包到达时,它被标记为 UNTRACKED

  • 然后将 UNTRACKED TCP SYN 数据包提供给 SYNPROXY

  • SYNPROXY 获取此信息并使用 TCP SYN+ACK(未跟踪)进行响应(作为服务器 A)

  • 客户端使用 TCP ACK 进行响应(在 iptables 中标记为 INVALID 或 UNTRACKED),该 ACK 也提供给 SYNPROXY

  • 一旦客户端连接到 SYNPROXY,SYNPROXY 就会自动发起与真实服务器的 3 向 TCP 握手,欺骗 SYN 数据包,以便真实服务器将看到原始客户端正在尝试连接:

  • SYNPROXY 向真实服务器 A 发送 TCP SYN。这是 iptables 中的一个新连接,发生在 OUTPUT 链上。数据包的源IP是客户端的IP

  • 真实服务器A向客户端回复SYN+ACK

  • SYNPROXY 接收此消息并用 ACK 响应服务器。连接现已标记为 ESTABLISHED

  • 一旦建立连接,SYNPROXY 就会离开客户端和服务器之间的流量

因此,SYNPROXY 可用于任何类型的 TCP 流量。它可用于未加密和加密的流量,因为它不会干扰内容本身。

话虽如此...

您无法在没有服务器的端口中设置 SYNPROXY(它将不起作用)。

因此,对于封闭的端口,您需要一台服务器,也许是一台假服务器,但无论如何都是一台服务器。

Python - Scapy - 将所有端口显示为打开状态

有关的:

Syn cookies 之类的不是工作

相关内容