IP Table 如果 PSH 负载不以特定字节开头,则丢弃 TCP 数据包和连接的规则

IP Table rule to drop TCP packet and connection if PSH payload does not begin with specific bytes

我们有一个旧的多人游戏(没有源代码),只要有人向服务器发送意外数据包,它就会崩溃,许多玩家使用 telnet 轻松做到这一点。我正在使用 iptables,我想过滤掉游戏服务器无法识别的数据包(并断开连接)。我想对游戏服务器的端口执行以下操作:

伪代码

if (PSH flag && Payload.Length > 0 bytes && Payload.Length < 6 bytes)
{
    // reject data, and drop client

}
else if (PSH flag && Payload.Length > 2)
{
    if (First3BytesOfPayload Not in [7f:ef:09, dc:0b:09, 08:00:09])
    {
        // reject data, and drop client

    }
}

这不是万无一失的解决方案,但对于我们的少数人来说应该足够好。我如何使用 iptables 完成此操作(如果有的话)?

感谢您的宝贵时间。

我明白了。我按照以下规则(不是所有规则)做到了,而且效果很好。我想我可以使用 iptables 长度选项,但我不需要它。任何决定这样做的人都应该使其特定于一个端口,并首先了解他们程序的 tcp 消息传递协议,否则你可能会被锁定。

iptables -A INPUT -p tcp --dport 1949 --tcp-flags ALL PSH,ACK -m u32 --u32 "39&0xFFFFFF=0x7fef09" -j ACCEPT
iptables -A INPUT -p tcp --dport 1949 --tcp-flags ALL PSH,ACK -m u32 --u32 "39&0xFFFFFF=0xdc0b09" -j ACCEPT
iptables -A INPUT -p tcp --dport 1949 --tcp-flags ALL PSH,ACK -m u32 --u32 "39&0xFFFFFF=0x080009" -j ACCEPT
iptables -A INPUT -p tcp --dport 1949 --tcp-flags ALL PSH,ACK -j DROP