如何使用linux netfilter/iptables在特定条件下立即在两端重置tcp连接?

Jen*_*ser 6 linux iptables tcp strings session

亲爱的 Serverfault 社区,

我有以下问题:如果在数据包数据中遇到某个字符串,我需要立即重置(断开)网络两侧的 tcp 连接。我无法控制双方的应用程序,只能使用 linux iptables(或类似工具)来执行连接中止。

我的第一个想法是使用以下 iptables 规则来实现我想要的:

/usr/sbin/iptables -A INPUT -p tcp --dport 1234 -m string --algo bm --string 'BAD STRING' -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

通过向客户端发送 TCP RST 数据包,这将在远程端完美地工作,因此客户端将立即断开连接。不幸的是,在强制断开连接时不会通知本地端,并且服务器进程(连接)永远挂起。

我认为在特定条件下(在这种情况下 IP 数据包中的字符串匹配)立即断开双方已经建立的连接的要求并不少见。所以我进行了谷歌搜索,但令我惊讶的是在合理的时间内找不到任何可用的东西。

有没有办法使用iptables在网络两侧实现tcp断开连接?如果没有,我可以使用哪些其他工具(请记住,我无法控制客户端/服务器应用程序)?

非常感谢您的宝贵回答!

此致,

延斯

小智 1

您可以使用xt_RESET,例如,-j RESET