我有rails3 Nginx堆栈.
几天前它是ddos攻击,有很多GET请求,类似于:
GET /?aaa2=bbbbbbb&ccc=1234212
GET /?aaa1=bbbbbbb&ccc=4324233
首先,我添加到应用程序控制器规则:
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
它保护控制器免受繁重的DB调用.
是否可以使用特定规则过滤ddos消息的任何gems或Nginx模块?
最佳答案
您应该考虑使用像Rack::Attack这样的中间件.由于它在应用程序堆栈中较低,它将比Rails更早,更快地过滤掉恶意请求.
Rack middleware for blocking & throttling abusive requests
Rack::Attack is a rack middleware to protect your web app from bad
clients. It allows whitelisting,blacklisting,throttling,and
tracking based on arbitrary properties of the request.
如果您看一下gem自述文件,可以使用很好的例子来处理像你这样的案例.
但请记住,如果攻击者至少有点聪明,他们会注意到你的努力,并试图超越他们. DDOS保护通常是猫捉老鼠游戏.