nginx 配置csrf防护 nginx 防cc_nginx 配置csrf防护


#实战描述:

CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

nginx 配置csrf防护 nginx 防cc_nginx_02


OpenResty又被称为ngx_openresty,是基于Nginx的核心Web应用程序服务器。OpenResty是基于Nginx和Lua的高性能Web平台,OpenResty通过汇聚各种设计精良的Nginx模块,从而将Nginx有效地变成一个强大的通用Web应用平台。

OpenResty同样也支持开源的waf组件,通过Nginx和Lua的结合,可以简化攻击的配置,OpenResty抵御CC攻击。

接下来,我们看下如何具体实现。

#实战环境:

准备一台Linux系统(给她起个hostname名称叫webserver.upwen.com),作为发布web页面以及OpenResty和Waf组件部署。

#具体实现:

##所需软件包下载

OpenResty下载地址:https://openresty.org/en/

我们选择openresty-1.15.8.3.tar.gz版本开源waf组件下载地址:https://github.com/unixhot/waf/releases

得到的waf版本是waf-1.0.0.zip的zip压缩包

##安装编译过程中需要用到的软件包

我们在webserver.upwen.com主机上采用编译安装的方式安装OpenResty,安装时要比Nginx多一个readline-devel软件包。

nginx 配置csrf防护 nginx 防cc_Nginx_03


下载软件包到本地:

nginx 配置csrf防护 nginx 防cc_运维_04


##配置并编译安装OpenResty

nginx 配置csrf防护 nginx 防cc_nginx 配置csrf防护_05


##环境变量设置

nginx 配置csrf防护 nginx 防cc_运维_06


环境变量配置好后,测试启动和关闭Nginx;此时查看Nginx版本会发现,Nginx路径是存在于OpenResty安装目录中。

nginx 配置csrf防护 nginx 防cc_nginx 配置csrf防护_07


nginx 配置csrf防护 nginx 防cc_lua_08


当然,我们也可以基于systemd,在/usr/lib/systemd/system/nginx.service配置好,通过systemctl来管理OpenResty的服务启动。##测试Openresty

通过配置/usr/local/openresty/nginx/conf/nginx.conf,在server标签段内添加如下配置。

nginx 配置csrf防护 nginx 防cc_nginx 配置csrf防护_09


保存退出后,检查Nginx语法是否有错误,若没有错误,刷新Nginx主配置文件的配置。

nginx 配置csrf防护 nginx 防cc_Nginx_10


打开浏览器访问http://OpenResty所在IP/upwen可以看到发布结果。

nginx 配置csrf防护 nginx 防cc_nginx 配置csrf防护_11


##开源waf部署

将开源waf组件软件包解压缩,移动到/usr/local/openresty/nginx/conf/目录下。

nginx 配置csrf防护 nginx 防cc_运维_12


##开源waf策略配置文件说明

在waf目录下有一个rule-config目录,该目录存放waf的一些策略配置文件。每一个策略文件作用如下:

nginx 配置csrf防护 nginx 防cc_Nginx_13


##实现Openresty防止CC攻击

通过配置/usr/local/openresty/nginx/conf/nginx.conf,在http标签段中加入:

nginx 配置csrf防护 nginx 防cc_nginx 配置csrf防护_14


同样的,保存退出后,检查Nginx语法是否有错误,若没有错误,刷新Nginx主配置文件的配置。

nginx 配置csrf防护 nginx 防cc_lua_15


#测试结果:

首先,打开浏览器执行如下内容:

http://OpenResty所在IP/upwen/test.jsp?id=1 and (select top 1 m from users where d=1 and m not in(select top 0 m from users))>0

此内容是构造一小段Sql语句,希望通过报错得到深度d=1的相关信息。执行结果如下:

nginx 配置csrf防护 nginx 防cc_nginx_16


此时触发了异常URL测试策略,Openresty抵挡了这次请求。

另外,我们找来一台Linux系统作为客户端,通过执行curl 10.60.100.108 -A ‘hydra’其用意是通过curl方式访问,模拟user-agent为hydra(九头蛇,一种密码猜解工具),因触发异常User-Agent策略,也被Openresty拦了下来。

nginx 配置csrf防护 nginx 防cc_Nginx_17


另以上两种测试,在Openresty的日志中都会有记录

nginx 配置csrf防护 nginx 防cc_运维_18


更多Linux技术交流文档资料下载,扣裙11372462

#知识点:

Yum仓库安装软件;

编译安装部署软件;

Openresty中的Nginx主配置文件的使用;

开源waf组件的部署和使用;

Sql语句注入的构造;

Curl命令构造user-agent;

通过查看安全日志进行溯源的方法,达到应急。