chaihongjun.me

ngx_lua_waf防火墙安装配置实录

ngx_lua_waf防火墙安装配置实录

之前写过一篇文章《fail2ban阻止SSH及FTP暴力破解》是关于针对扫描SSH端口以及FTP端口的防护教程,今天在配置新的网站服务器的时候,突然想到能不能再加固一下服务器,弄一些设置防止CC之类的攻击呢?于是,在参考了以下几篇文章之后终于如愿完成,这里记录一下整个操作过程以便将来再次操作的时候方便查阅。

参考文章:

  1. Nginx Lua Redis防止CC攻击

  2. Nginx添加lua支持并安装ngx_lua_waf

  3. github:ngx_lua_waf

前景交代:

服务器端已经完成了其他模块的安装,目前只是想安装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~~]]

备注:不要乱动双引号,区分大小写

 

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。作者:chaihongjun»