DevsDawn
DevsDawn

防御Source Engine Query泛洪攻击(二)

上一篇文章《防御Source Engine Query泛洪攻击(一)》提到使用限速模块对单IP进行请求限速,但若攻击者使用伪造的IP发送数据包,那么限速模块就不能很好地起到作用了。
在没有很好的方法防御的情况下,可以使用主动丢弃被DDoS攻击的端口的查询包(即类似于封禁端口)的方法来防止查询包到达游戏服务器,防止产生反射流量影响服务器的上行带宽,同时已在游戏内的玩家也不会受到影响。但这样也会导致被攻击时其它玩家无法搜索到服务器,需要配合其它方法加入白名单访问。

  1. 首先添加标记查询包的规则。
    iptables -t raw -A PREROUTING -p udp -m string --hex-string '|ff ff ff ff 54 53 6f 75 72 63 65 20|' --algo kmp -j MARK --set-mark 1
    
  2. 然后用ipset新建一个集合,用于存储封禁的端口。timeout 超时时间代表集合内的元素在多少时间后会被清除,可根据个人需求修改。
    ipset create SourceEngineQuery_BanPort hash:ip,port timeout 5
    

    如果没有安装ipset,可以先安装(以ubuntu下apt安装方式为例)。

    apt-get install ipset
    
  3. 然后添加端口封禁规则,封禁在上述集合中的端口。
    iptables -t raw -A PREROUTING -p udp -m mark --mark 1 -m set --match-set SourceEngineQuery_BanPort dst,dst -j DROP
    
  4. 添加速度检测规则,把超过设定速度的端口加入集合。

    其中 hashlimit-abovehashlimit-burst 可根据个人情况调整。

    iptables -t raw -A PREROUTING -p udp -m mark --mark 1 -m hashlimit --hashlimit-name SourceEngineQuery_BanPort --hashlimit-mode dstip,dstport --hashlimit-above 1500/second --hashlimit-burst 2 --hashlimit-htable-expire 10000 -j SET --add-set SourceEngineQuery_BanPort dst,dst
    
  5. 这样一来封禁被攻击端口的查询的规则就完成了,可以使用以下命令查看ipset的情况。
    ipset list SourceEngineQuery_BanPort
    
若无特别说明,本文采用 CC BY-SA 4.0 协议进行许可。如需转载,请附上本文链接和本声明。
本文链接:https://devsdawn.com/2020/03/defense-source-engine-query-flood-attack-2/
DigitalOcean云服务,美国上市公司,注册即送200USD体验金
Vultr云服务,全球25+地域,注册即送100USD体验金

发表回复

textsms
account_circle
email

  • Max1mus

    泛洪攻击(一)我用了之后玩家进服无法选队伍了,我撤销之后用了泛洪攻击(二)的方法,然后没有起作用,望解答一下

    4 年前 回复
    • DevsDawn博主

      @Max1mus: 可以试试用:iptables -t raw -vxL看看规则命中数量,检查是否有误封,我感觉是因为不同游戏发包的频率不同,你可能要修改一下hashlimit的参数。

      4 年前 回复
      • Max1mus

        @DevsDawn: Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
        pkts bytes target prot opt in out source destination

        Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
        pkts bytes target prot opt in out source destination

        4 年前 回复
        • DevsDawn博主

          @Max1mus: 你这个是使用了(一)中的示例吗?可以把(一)中的INPUT链改成iptables -t raw -A PREROUTING再试试

          4 年前 回复

DevsDawn

防御Source Engine Query泛洪攻击(二)
上一篇文章《防御Source Engine Query泛洪攻击(一)》提到使用限速模块对单IP进行请求限速,但若攻击者使用伪造的IP发送数据包,那么限速模块就不能很好地起到作用了。 在没有很好的方法…
扫描二维码继续阅读
2020-03-23