如何将连接数限制为 5 秒内 1 个连接?(IPTABLES)

如何将连接数限制为 5 秒内 1 个连接?(IPTABLES)

我在游戏中使用服务器,该服务器已损坏 AntyCheat,如果一次连接过多,则整个服务器都会损坏,没有人可以连接。因此,解决方案是使用 IPTables 将一次连接限制为 5 秒内 1 个连接。它应该是这样的:1 个玩家 -> 5 秒 -> 2 个玩家 -> 5 秒(如果一个连接,它必须停止其他连接 5 秒)

答案1

对于此示例答案,协议是 tcp,其他信息取自评论。请进行相应调整。

第一个例子将仅给出连接之间的平均值 5 秒:

sudo iptables -A INPUT -i eth0 -m state --state NEW -p tcp -m limit --limit 12/minute --dport 12871 -j ACCEPT
sudo iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 12871 -j DROP

第二个示例将要求两次连接尝试之间正好间隔 5 秒,并且在这 5 秒内没有任何其他新连接尝试。即,在这 5 秒内的尝试将重置时间计数器。

sudo iptables -A INPUT -i eth0 --protocol tcp --destination-port 12871 -m state --state NEW -m recent --mask 0.0.0.0 --update --hitcount 1 --seconds 5 --name LIMIT_NEW_RATE -j DROP
sudo iptables -A INPUT -i eth0 --protocol tcp --destination-port 12871 -m state --state NEW -m recent --mask 0.0.0.0 --set --name LIMIT_NEW_RATE -j ACCEPT

您必须确定此规则在整体 iptables 规则环境中需要去往何处。

答案2

使用connlimitlimit模块:

sudo iptables -A INPUT -p tcp --syn -i eth0 --dport 12871:12881 -m connlimit --connlimit-above 1 --connlimit-mask 24 -j REJECT --reject-with tcp-reset    
sudo iptables -A INPUT --dport 12871:12881 -m state --state RELATED,ESTABLISHED -m limit --limit 12/minute --limit-burst 1 -j ACCEPT 
sudo iptables -A INPUT -p tcp --dport 12871:12881 -i eth0 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 12871:12881 -i eth0 -m state --state NEW,RELATED,ESTABLISHED -m recent --update --seconds 5 --hitcount 1 -j DROP

然后应用新规则:

sudo iptables-save > /etc/iptables/rules.v4

安装持久 iptables 包:

sudo apt install iptables-persistent
sudo service netfilter-persistent reload

笔记:

  • 将接口名称更改为您的
  • 添加您的端口范围
  • 这会附加到现有规则,因此您可以将-I这些规则放在前面。

相关内容