我有rails3 + nginx堆栈。
几天前是ddos攻击,带有许多类似于以下内容的GET请求:
GET /?aaa2=bbbbbbb&ccc=1234212
GET /?aaa1=bbbbbbb&ccc=4324233
首先,我添加了应用程序 Controller 规则:
before_filter :ddos_check
def ddos_check
params.each do |param|
if (!param[1].nil? && (param[1].is_a?String) && !param[1].scan(/bbb/sim).blank?)
redirect_to 'http://google.com/'
return
end
end
end
它可以防止 Controller 受到繁重的数据库调用。
是否可以使用特定规则过滤ddos消息的gems或nginx模块?
最佳答案
您应该考虑使用像Rack::Attack这样的中间件。由于它在应用程序堆栈中的位置较低,因此它将比Rails更早,更快地过滤出恶意请求。
如果您查看gem自述文件,有很好的示例介绍了如何处理诸如您这样的案例。
但是请记住,如果攻击者至少有些聪明,他们会注意到您的努力,并试图超越他们。 DDOS保护通常是猫和老鼠的游戏。