带有nginx ddos​​保护的Ruby on rails

Vol*_*kiy 5 ruby-on-rails ddos nginx

我有rails3 + nginx堆栈.

几天前它是ddos攻击,有很多GET请求,类似于:

GET /?aaa2=bbbbbbb&ccc=1234212
GET /?aaa1=bbbbbbb&ccc=4324233
Run Code Online (Sandbox Code Playgroud)

首先,我添加到应用程序控制器规则:

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
Run Code Online (Sandbox Code Playgroud)

它保护控制器免受繁重的DB调用.

是否可以使用特定规则过滤ddos消息的任何gems或nginx模块?

Mik*_*del 18

您应该考虑使用像Rack :: Attack这样的中间件.由于它在应用程序堆栈中较低,它将比Rails更早,更快地过滤掉恶意请求.

用于阻止和限制滥用请求的机架中间件

Rack :: Attack是一个机架中间件,可以保护您的Web应用免受恶意客户的侵害.它允许基于请求的任意属性进行白名单,黑名单,限制和跟踪.

如果您看一下gem自述文件,可以使用很好的例子来处理像你这样的案例.但请记住,如果攻击者至少有点聪明,他们会注意到你的努力,并试图超越他们.DDOS保护通常是猫捉老鼠游戏.

  • 这是更好的解决方案,但需要一些bash知识.Rack :: Attack适用于我们其他人;) (5认同)
  • 通过以下命令解决:'grep"msg.*= wow"/var/log/nginx/access.log | awk"{print $ 1}"| 排序| uniq | wc -l> ddos​​.txt'和'for $ in $(cat ddos​​.txt); 回应"禁止IP"; iptables -A INPUT -s $ IP/32 -d 0/0 -j DROP; 完成" (3认同)