一、Nginx安全限制
前面已经详细介绍了nginx负载均衡的配置以及nginx本身自带的的一些安全措施,详情请参考“生产环境下的负载均衡配置”,但毕竟nginx自带的安全功能有限也不太适合复杂的应用环境,本文可作为上一篇文章的续集。
随着业务的增加,网络连接的流量越来越大,合理的控制访问请求及连接数非常重要,否则仍会出现失去响应的情况。
二、增加WAF模块
ngx_lua_waf是一个基于ngx_lua的web应用防火墙,主要防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击;防止svn/备份之类文件泄漏;防止ApacheBench之类压力测试工具的攻击;屏蔽常见的扫描黑客工具,扫描器;屏蔽异常的网络请求;屏蔽图片附件类目录php执行权限;防止webshell上传。
git clonehttp://luajit.org/git/luajit-2.0.git make make install wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz –-no-check-certificate tar zxvf v0.2.19.tar.gz wgethttps://github.com/openresty/lua-nginx-module/archive/v0.9.13.tar.gz--no-check-certificate
./configure--prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf--pid-path=/var/run/nginx/nginx.pid --error-log-path=/var/log/nginx/nginx.log--http-log-path=/var/log/nginx/nginx-http.log --add-module=/root/ngx_devel_kit-0.2.19/--add-module=/root/lua-nginx-module-0.9.13/--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" make –j2 service nginx stop mv/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.orig cp ./objs/nginx/usr/local/nginx/sbin/nginx service nginx start
wgethttps://github.com/loveshell/ngx_lua_waf/archive/master.zip--no-check-certificateunzip master mv ngx_lua_waf-master//etc/nginx/waf mkdir -p/var/log/nginx/hack chmod -R 755/var/log/nginx/hack/
三、增加fail2ban防止非法IP
fail2ban是一款日志扫描软件,它可以从日志中扫描异常记录结合相应的识别规则并通过iptables封禁恶意的用户IP防止进一步的攻击。
安装fail2ban非常简单,直接通过yum installfail2ban就可以完成安装,它的配置文件是/etc/fail2ban/jail.conf,所有的过滤策略则保存在/etc/fail2ban/filter.d/下。jail.conf的配置内容如下图所示:
我们可以先对照nginx的日志查看,之前的nginx中已经对IP和服务请求数做了限制,对于同一IP多次超过原有的请求限制的情况,我们可以使用fail2ban定义的规则(例如600秒内超过5次则封禁该IP2小时)。当然也可以根据实际情况自定义策略。
首先分析nginx的日志记录,需注意过滤策略要和日志中的内容匹配,如下图所示。
完成后重启fail2ban服务,你可以看到fail2ban的日志中封禁及解封IP的信息,如下图所示。
也可以通过fail2ban-client指令查看指定策略的应用情况或使用“fail2ban-client -D”查看配置文件的相关内容。
四、查看nginx状态
通过Nginx转发的方式实现负载均衡,除了可以通过分析访问日志记录的方式来统计转发次数外还可以使用nginx自带的状态统计功能来实现。它依赖于nginx的“ngx_http_stub_status_module”模块,请确保该模块在当前版本中存在。
启用它的方式很简单,具体配置如下图所示。
配置完成并重新加载nginx服务后可以通过浏览器访问目标服务器的8000端口来查看转发状态,如下图所示。
active connections:23 #nginx 正处理的活动连接数 23个。
server accepts handled requests
nginx启动到现在共处理了 24个连接 ,
nginx启动到现在共成功创建24 次握手 ,
请求丢失数=(握手-连接),可以看出,我们没丢请求
总共处理了50 次请求。
Reading :nginx 读取到客户端的 Header 信息数。
Writing : nginx 返回给客户端的 Header 信息数。
Waiting : Nginx 已经处理完正在等候下一次请求指令的驻留连接。开启 keep-alive 的情况下,这个值等于 active – (reading + writing)。
生产环境下的负载均衡配置