1. 首页>
  2. 腾讯云代理

[经验分享] 为nginx做一个WAF防护

腾讯云 2017年05月14日 浏览637

腾讯云代理 腾讯云直播申请 游戏上云

摘要:

什么是WAF?
WAF等于web应用程序防火墙
WAF的详细说明请参照技术文档
http://bbs.qcloud.com/thread-5356-1-1.html

WAF的作用是什么?
用于过滤post,get,cookie方式常见的web攻击
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传

腾讯云提供了可靠的WAF防护,具体接入教程请参照
http://bbs.qcloud.com/thread-7953-1-1.html

本贴主要讲述在使用腾讯云WAF的同时如何制作轻量级的WAF防护

本贴主要使用ngx_mruby 而类似于mruby的还有ngx_lua_waf

ngx_mruby是什么?
从名字上来看就是把mruby整合到nginx

如何安装?
可以使用这个脚本进行安装

  1. apt-get update

  2. apt-get upgrade -y

  3. apt-get install -y make gcc git-core htop libreadline-dev bison tar libssl-dev zlib1g-dev bzip2 libpcre3-dev

  4. git clone https://github.com/rbenv/rbenv.git ~/.rbenv

  5. cd ~/.rbenv && src/configure && make -C src

  6. echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

  7. ~/.rbenv/bin/rbenv init

  8. echo 'eval "$(rbenv init -)"' >>~/.bashrc

  9. git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

  10. export PATH="$HOME/.rbenv/bin:$PATH"

  11. eval "$(rbenv init -)"

  12. sed -i "s/cache.ruby-lang.org\/pub\/ruby\/2.3\/ruby-2.3.0.tar.bz2/ruby.taobao.org\/mirrors\/ruby\/2.3\/ruby-2.3.0.tar.bz2/" 


  13. ~/.rbenv/plugins/ruby-build/share/ruby-build/2.3.0

  14. rbenv install 2.3.0

  15. rbenv global 2.3.0

  16. cd ~

  17. git clone git://github.com/matsumoto-r/ngx_mruby.git

  18. cd ngx_mruby/

  19. git submodule init

  20. git submodule update

  21. # sed -i "/mruby-io/s/^ /#/" build_config.rb

  22. sed -i "/mruby-env/s/^ /#/" build_config.rb

  23. sed -i "/mruby-dir/s/^ /#/" build_config.rb

  24. sed -i "/mruby-digest/s/^ /#/" build_config.rb

  25. sed -i "/mruby-process/s/^ /#/" build_config.rb

  26. sed -i "/mruby-pack/s/^ /#/" build_config.rb

  27. sed -i "/mruby-socket/s/^ /#/" build_config.rb

  28. sed -i "/mruby-json/s/^ /#/" build_config.rb

  29. sed -i "/mruby-onig-regexp/s/^ /#/" build_config.rb

  30. sed -i "/mruby-vedis/s/^ /#/" build_config.rb

  31. sed -i "/mruby-sleep/s/^ /#/" build_config.rb

  32. sed -i "/mruby-userdata/s/^ /#/" build_config.rb

  33. sed -i "/mruby-uname/s/^ /#/" build_config.rb

  34. sed -i "/mruby-mutex/s/^ /#/" build_config.rb

  35. sed -i "/mruby-cache/s/^ /#/" build_config.rb

  36. sh build.sh

  37. make install

  38. ln -s /root/ngx_mruby/build/nginx/sbin/nginx /bin/nginx

复制代码

安装后设定Nginx 配置文件.

  1. # Nginx.conf

  2. location /m {

  3.     mruby_content_handler '/root/hello.rb';

  4. }

复制代码

其次编写过滤规则,具体过滤规则请根据实际情况进行编写,数据库推荐使用腾讯 Redis

  1. # 初始化

  2. def initialize

  3.   @db  = Redis.new('127.0.0.1', 6379)

  4.   @req = Nginx::Request.new

  5.   @ip  = Nginx::Connection.new.remote_ip

  6. end

  7. # 加入黑名单

  8. def add_black_list(msg)

  9.   @db.set "#{@ip}_ban", '1'

  10.   @db.expire "#{@ip}_ban", 10

  11.   err_msg "ban #{@ip}! #{msg}"

  12. end

  13. # 重定向

  14. def redirect(time, score, threshold)

  15.   if score > threshold

  16.     add_black_list("#{score} > #{threshold}")

  17.     clear_time time

  18.     FALSE_BACKEND

  19.   else

  20.     TRUE_BACKEND

  21.   end

  22. end

  23. # 过滤流程示意

  24. def filter

  25.   return TRUE_BACKEND if white_list?

  26.   return FALSE_BACKEND if black_list?

  27.   if bad_ua?

  28.     add_black_list('UA banned!')

  29.     return FALSE_BACKEND

  30.   end

  31.   redirect 5, incr_time(5), 4

  32.   redirect 60, incr_time(60), 30

  33. end

复制代码

注意事项
memory + swap > 2 G .



腾讯云服务商邀请关注:

http://partners.qcloud.com/invitation/99377079157835da208bd0

关注服务商的链接,提供下您关注的QQ,我们这边审核下即可快速回复您的工单问题与技术支持! 感谢您的信任与支持!

auto_1452.png

相关文章

在线客服
淘宝购买
腾讯云直播申请 title=
+成为腾讯云VIP客户 腾讯云直播申请 客服电话

15818558013

0755-33940501-803

0755-33940501-808