之前写过一篇文章《fail2ban阻止SSH及FTP暴力破解》是关于针对扫描SSH端口以及FTP端口的防护教程,今天在配置新的网站服务器的时候,突然想到能不能再加固一下服务器,弄一些设置防止CC之类的攻击呢?于是,在参考了以下几篇文章之后终于如愿完成,这里记录一下整个操作过程以便将来再次操作的时候方便查阅。
参考文章:
前景交代:
服务器端已经完成了其他模块的安装,目前只是想安装ngx_lua_waf
1.首先进入放置源码包的目录
cd /root/lnmp/src
2.在该目录下,下载好如下几个软件包
git clone https://github.com/simpl/ngx_devel_kit.git git clone https://github.com/openresty/lua-nginx-module.git #LuaJIT 可以进入官网的下载页面(http://luajit.org/download.html)下载最新的 wget -c http://luajit.org/download/LuaJIT-2.0.5.tar.gz #解压 tar xzf LuaJIT-2.0.5.tar.gz
3.进入LuaJIT-2.0.5目录并安装
make && make install
4.进入nginx的源码包重新"平滑升级"
cd /root/lnmp/src/nginx-1.12.1 .configure {之前的配置参数} --add-module=/root/lnmp/src/lua-nginx-module --add-module=/root/lnmp/src/ngx_devel_kit make #后面是平滑升级make之后的操作,不赘述 ...
这里需要特别说明一下,当平滑升级完,照例去检测nginx配置是否正确的时候,可能会出现错误
error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决方法很简单:
echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig
5.下载ngx_lua_waf项目文件夹并移动到nginx.conf同级目录,且修改目录名称为waf
git clone https://github.com/loveshell/ngx_lua_waf.git mv ngx_lua_waf /usr/local/nginx/conf mv ngx_lua_waf waf #这里先创建存放ngx_lua_waf运行日志的目录 mkdir -p /alidata1/logs/hack #nginx可以访问这个目录 chown -R nginx /alidata1/logs/hack
6.修改config.lua文件内的两个路径
#config.lua在/usr/local/nginx/conf/waf内 #RulePath是存放规则文件的路径 RulePath = "/usr/local/nginx/conf/waf/wafconf/" #日志存放路径 logdir = "/alidata1/logs/hack/"
7.在nginx.conf的http段内添加
lua_need_request_body on; lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
8.nginx重新加载,OK。
9.由于日志是每天都在按照日期增加的,所以为了便于管理,这里增加了防护日志的清理功能:
#!/bin/bash #LOGS_PATH 是ngx_lua_waf的日志存放目录 #这里只保留最近3天的日志 LOGS_PATH=/alidata1/logs/hack cd ${LOGS_PATH} find . -mtime +3 -name "*sec.log" | xargs rm -f exit 0
将以上的日志做一个定时执行:
#crontab ### clean ngx_waf_lua logs 1 0 * * * /root/clean_ngx_waf_lua.sh
关于config.lua的配置说明:
#规则存放目录 RulePath = "/usr/local/nginx/conf/waf/wafconf/" #是否开启攻击信息记录,需要配置logdir attacklog = "off" #log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限 logdir = "/usr/local/nginx/logs/hack/" #是否拦截url访问 UrlDeny="on" #是否拦截后重定向 Redirect="on" #是否拦截cookie攻击 CookieMatch = "on" #是否拦截post攻击 postMatch = "on" #是否开启URL白名单 whiteModule = "on" #填写不允许上传文件后缀类型 black_fileExt={"php","jsp"} #ip白名单,多个ip用逗号分隔 ipWhitelist={"127.0.0.1"} #ip黑名单,多个ip用逗号分隔 ipBlocklist={"1.0.0.1"} #是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;) CCDeny="on" #设置cc攻击频率,单位为秒. #默认1分钟(60秒)同一个IP只能请求同一个地址100次 CCrate = "100/60" #警告内容,可在中括号内自定义 html=[[Please go away~~]] 备注:不要乱动双引号,区分大小写