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
我们有一个旧的多人游戏(没有源代码),只要有人向服务器发送意外数据包,它就会崩溃,许多玩家使用 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