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

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

  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
    
    

原文链接:https://tlingc.com/2020/03/defense-source-engine-query-flood-attack-2/

你可能感兴趣的:(防御Source Engine Query泛洪攻击(二))