文档章节

linux cc攻击防范

wild-life
 wild-life
发布于 2015/02/24 13:02
字数 1163
阅读 59
收藏 1

参考了一下链接的内容:

http://blog.csdn.net/cnbird2008/article/details/8723149

让 Nginx 支持 WAF 防护功能实战 (安装使用)

http://wiki.nginx.org/HttpLuaModule

https://github.com/loveshell/ngx_lua_waf

作者github地址(源码)

http://drops.wooyun.org/tips/734

通过nginx配置文件抵御攻击(原理)



一、安装

1 下载luajit 2.0并安装
http://luajit.org/download.html
直接使用源码make && make install
所以lib和include是直接放在/usr/local/lib和usr/local/include


2 下载nginx源码解压
wget  http://nginx.org/download/nginx-1.2.7.tar.gz
注意版本号,如果机子上已经装了nginx,不想升级的话,请使用/to/nginx/sbin/nginx -v 来查看版本号
tar -zxvf  nginx-1.2.7.tar.gz


3  下载ngx_devel_kit解压
https://github.com/simpl/ngx_devel_kit/tags
wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gz --no-check-certificate
tar -zxvf  v0.2.18  


4  下载nginx_lua_module解压
https://github.com/chaoslawful/lua-nginx-module/tags
wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.7.18rc2.tar.gz --no-check-certificate
tar -zxvf v0.7.18rc2


5 进入nginx源码文件夹
cd nginx-1.2.7/


6 导入环境变量,编译
export LUAJIT_LIB=/usr/local/lib    #这个很有可能不一样
export LUAJIT_INC=/usr/local/include/luajit-2.0  #这个很有可能不一样
./configure --prefix=/opt/nginx \    #nginx的安装路径
--add-module=/path/to/ngx_devel_kit \   #ngx_devel_kit 的源码路径
--add-module=/path/to/lua-nginx-module  #nginx_lua_module 的源码路径

例子:
./configure --prefix=/usr/local/nginx-help --add-module=/root/jiangbin/ngx_devel_kit-0.2.18 --add-module=/root/jiangbin/lua-nginx-module-0.7.18rc2 --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
make -j2
make install

安装lua模块发现的问题:
我在编译安装 Nginx 的第三方模块时,碰到一个错误:
[plain] view plaincopyprint?
/usr/local/nginx/sbin/ngxin -s reload  
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory  
百事不得其解,后来Google之,发现了解决办法。
在 Nginx 编译时,需要指定 RPATH,加入下面选项即可:
[plain] view plaincopyprint?
./configure --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
或者
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH  


7 请提前新建/data/logs/hack/目录攻击日志,并赋予nginx用户对该目录的写入权限。
mkdir -p /data/logs/hack/
www账户是跑nginx和php-fpm
chown -R www:www /data/logs/hack/
chmod -R 755 /data/logs/hack/

该目录是lua日志目录,可以自定义配置路径,查看源码下config.lua文件

attacklog = "on"
logdir = "/data/logs/hack/"


8 安装ngx_lua_waf模块

git clone 'https://github.com/loveshell/ngx_lua_waf.git'
ll ngx_lua_waf/

-rw-r--r-- 1 root root  288 Apr 22 15:51 config.lua
-rw-r--r-- 1 root root 5705 Apr 22 15:51 init.lua
-rw-r--r-- 1 root root 1587 Apr 22 15:51 install.sh
-rw-r--r-- 1 root root 4547 Apr 22 15:51 README.md
drwxr-xr-x 2 root root 4096 Apr 22 15:51 wafconf
-rw-r--r-- 1 root root 1721 Apr 22 15:51 waf.lua


mv ngx_lua_waf /opt/nginx/etc/waf


在nginx中引入ngx_lua_waf模块

   #lua_code_cache off;        #是否开启cache,off:修改.lua文件不需要reload nginx         lua_need_request_body on;
   lua_package_path "/opt/nginx/etc/waf/?.lua";
   lua_shared_dict limit 20m;
   init_by_lua_file "/opt/nginx/etc/waf/init.lua";
   access_by_lua_file /opt/nginx/etc/waf/waf.lua;



9 使用

   server {
       listen 80;
       server_name nginxlua.com;
       error_log  /var/nginx/logs/debug_preview.log  debug;
       location = /hello.html{

                default_type 'text/plain';                        

                content_by_lua 'ngx.say("hello,nginx_lua!")';
       }
       }

测试一下有没有500 如果有一般就是ngx_lua_waf模块目录不对。


10 进阶


模块的逻辑关系都在waf.lua文件里面,通过调用init.lua中定义的函数实现各个不同的功能。

白名单,黑名单,cc攻击,whiteurl,useragent,url,参数,cookie,post参数过滤等。


再次我们需要根据业务来适当修改添加某些功能。添加的函数都放在init.lua文件里面,在waf.lua中应用。

--添加单纯的对于ip并发的限制

config.lua 中设置CCiprate = "10/60"

每分钟10个。可设置。

适用于:类似爬虫类的高并发cc

wKioL1NWOAfzUrXkABFgE6xAxEg116.jpg

function denyipcc()
   if CCDeny then
       CCipcount=tonumber(string.match(CCiprate,'(.*)/'))
       CCipseconds=tonumber(string.match(CCiprate,'/(.*)'))
       local token = getClientIp()
       local limit = ngx.shared.limit
       local req,_=limit:get(token)
       if req then
           if req > CCipcount then
               local rule="ip-cc-attrack"
               log('GET',ngx.var.request_uri,"-",rule)
               ngx.exit(503)
               return true
           else
                limit:incr(token,1)
           end
       else
           limit:set(token,1,CCipseconds)
       end
   end
   return false
end


--重新改写denycc()函数

适用于:

wKiom1NWOO3Ti8RGABNP5jyUckc905.jpg

function denycookiecc()
   if CCDeny then
       local ck = ngx.var.http_cookie
       CCcookiecount=tonumber(string.match(CCcookierate,'(.*)/'))
       CCcookieseconds=tonumber(string.match(CCcookierate,'/(.*)'))
       if ck  then
               local token = string.match(ck,'_session_id=(.*)')
                       local limit = ngx.shared.limit
                       local req,_=limit:get(token)
                       if req then
                               if req > CCcookiecount then
                                       local rule="cookie-cc-attrack"
                                       log('GET',ngx.var.request_uri,"-",rule)
                                       ngx.exit(503)
                                       return true
                                   else
                                        limit:incr(token,1)
                                   end
                       else
                           limit:set(token,1,CCcookieseconds)
                       end
       else
               denycc()
       end
   end
   return false
end
根据是否包含cookie来处理,很多程序或者说肉鸡发起cc攻击时不包含cookie可以将这部分流量分离出来,进入更加严格的函数denycc(),设置的频率同样通过config.lua来读取。

CCrate = "10/60"
CCcookierate = "15/60"


--添加日志标记

是由哪个函数处理的,添加标志,方便以后的日志分析。

local rule="cookie-cc-attrack"
log('GET',ngx.var.request_uri,"-",rule)


更多功能。可以自己动手尝试。可以开启nginx的debug日志,方便调试,前提是编译了nginx debug module。一些lua的语法,不懂的自查下,脚本语言学起来还是不太费力的。


本文出自 “monkey的linux小路” 博客,请务必保留此出处http://monkeyzhu.blog.51cto.com/5764358/1400680

本文转载自:http://monkeyzhu.blog.51cto.com/5764358/1400680

wild-life
粉丝 18
博文 94
码字总数 56147
作品 0
成都
技术主管
私信 提问
如何通过iptables设置来缓解DDoS攻击和CC攻击?

最近这几年,互联网高速发展的同时,网络安全威胁也日益严重。很多互联网公司经常会遭到各种各样的网络攻击,特别是DDOS攻击最让互联网企业感到头痛,因为DDOS攻击会直接造成服务器崩溃,导致...

墨者安全
2018/12/11
0
0
[性能调优] mysql 优化变量

http://bbs.linuxpk.com/thread-37168-1-1.html [安全技巧] Linux系统下的DDOS攻击防范 http://bbs.linuxpk.com/thread-40510-1-1.html 一些不错的国外linux安全站点 http://bbs.linuxpk.com......

慎道
2011/11/29
58
0
认识Linux病毒 做好操作系统防护工程

对使用Windows的人来说,病毒无处不在,各种各样的新型病毒层出不穷,近年来,一种类似Unix的操作系统也在发展壮大,开始走进我们的视野,并在各领域内得到应用,它就是Linux系统,对于受病毒...

learningloong
2010/09/24
273
0
Linux 内核曝 TCP 漏洞,极小流量就可以 DoS 瘫痪设备

卡内基梅隆大学的 CERT/CC 发出警告,称 Linux 内核 4.9 及更高版本中有一个 TCP 漏洞,该漏洞可使攻击者通过极小流量对系统发动 DoS (Denial-of-Service,拒绝服务)攻击。 该漏洞是由诺基...

h4cd
2018/08/09
1K
13
Linux服务器的四种攻击级别及解决方案

随着Linux企业应用的扩展,有大量的网络服务器使用Linux操作系统。Linux服务器的安全性能受到越来越多的关注,这里根据Linux服务器受到攻击的深度以级别形式列出,并提出不同的解决方案。 对...

范堡
2009/05/07
162
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
6
0
linux 命令-文本比较comm、diff、patch

本文原创首发于公众号:编程三分钟 今天学了三个文本比较的命令分享给大家。 comm comm 命令比较相同的文本 $ cat charabc$ cat chardiffadc 比如,我有两个文件char和chardiff如上,...

编程三分钟
今天
7
0
QML教程

https://blog.csdn.net/qq_40194498/article/category/7580030 https://blog.csdn.net/LaineGates/article/details/50887765...

shzwork
今天
5
0
HA Cluster之5

对于使用heartbeat v2版的CRM配置的集群信息都是保存在一个名为cib.xml的配置文件中,存放在/var/lib/heartbeat/crm/下。CIB:Cluster Information Base,由于xml文件配置不是那么方便,所以...

lhdzw
今天
6
0
玩转Redis-Redis基础数据结构及核心命令

  《玩转Redis》系列文章主要讲述Redis的基础及中高级应用,文章基于Redis5.0.4+。本文主要讲述Redis的数据结构String,《玩转Redis-Redis基础数据结构及核心命令》相关操作命令为方便对比...

zxiaofan666
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部