一文从原理到实践教你使用Nginx

您所在的位置:网站首页 防火墙代码语言是什么 一文从原理到实践教你使用Nginx

一文从原理到实践教你使用Nginx

2024-07-14 15:50| 来源: 网络整理| 查看: 265

Part1Nginx_lua实现waf1WAF产生的背景

过去企业通常会采用防火墙,作为安全保障的第一道防线;当时的防火墙只是在第三层(网络层)有效的阻断一些数据包;而随着web应用的功能越来越丰富的时候,Web服务器因为其强大的计算能力,处理性能,蕴含较高的价值,成为主要的被攻击目标(第七层应用层)而传统防火墙在阻止利用应用程序漏洞进行的攻击方面,却没有办法;在此背景下,WAF(Web Application Firewall)应运而生。

2什么是WAF

Web 应用防火墙 (WAF-Web Application Firewall) 旨在保护 Web 应用免受各类应用层攻击,例如跨站点脚本 (XSS)、SQL 注入,以及 cookie 中毒等应用是您重要数据的网关,因此针对应用发起的攻击就成为了造成漏洞的主要原因有了 WAF 就可以拦截一系列企图通过入侵系统来泄漏数据的攻击。

3工作原理用户通过浏览器向Web服务器发送网页请求用户的请求到达Web服务器之前,WAF对用户的请求过滤WAF拿到用户的HTTP请求参数去跟配置文件定义的规则做比较,如果匹配上就返回403拒绝,否则放行WEB服务器响应用户请求,把页面数据返回给用户。4WAF作用

waf是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品

5WAF和传统防火墙的区别传统防火墙是工作在网络层(第三层)和传输层(第四层)WAF是工作在应用层(第七层)传统防火墙更多是对IP和端口进行过滤WAF是对HTTP请求进行过滤,包括URL,IP,User-Agent等等。6WAF和DDos

DDos的全称是Distributed Denial of service主要依靠一组计算机来发起对一个单一的目标系统的请求,从而造成目标系统资源耗尽而拒绝正常的请求

根据OSI网络模型,最常见的DDos有三类,第三层(网络层)DDos、第四层(传输层)DDos和第七层(应用层)DDos

WAF主要处理第七层DDos攻击,它在处理第七层DDos攻击时会比其它防护手段更高效一些WAF会对HTTP流量做详细的分析,这样WAF就能针对正常的访问请求进行建模,然后使用这些模型来区分正常的请求和攻击者使用机器人或者脚本触发的请求。

7Nginx WAF功能支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝(新增cdip功能支持ip段)支持URL白名单,将不需要过滤的URL进行定义支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理支持CC攻击防护,单个URL指定时间的访问次数,超过设定值(新增针对不同域名)支持Cookie过滤,匹配自定义规则中的条目,然后进行处理支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些支持URL参数过滤,原理同上支持日志记录,将所有拒绝的操作,记录到日志中去新增支持拉黑缓存(默认600秒)8Nginx Waf防护流程代码语言:javascript复制if whiteip() then elseif blockip() then elseif denycc() then elseif ngx.var.http_Acunetix_Aspect then ngx.exit(444) elseif ngx.var.http_X_Scan_Memo then ngx.exit(444) elseif whiteurl() then elseif ua() then elseif url() then elseif args() then elseif cookie() then elseif PostCheck then 检查IP白名单,通过就不检测;检查IP黑名单,不通过即拒绝;检查CC攻击,匹配即拒绝检查http_Acunetix_Aspect扫描是否开启检查http_X_Scan_Memo扫描是否开启检查白名单URL检查;检查UA,UA不通过即拒绝;检查URL参数检查;检查cookie;检查post;9基于Nginx实现WAF安装依赖包代码语言:javascript复制yum -y install gcc gcc-c++ autoconf automake make unzip yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 安装LuaJIT2.0

LuaJIT是Lua的即时编译器,简单来说,LuaJIT是一个高效的Lua虚拟机

代码语言:javascript复制# 进入目录 cd /usr/local/src # 下载LuaJIT2.1 wget https://github.com/openresty/luajit2/archive/refs/heads/v2.1-agentzh.zip # 解压 unzip v2.1-agentzh.zip && cd luajit2-2.1-agentzh # 编译 make -j 3 # 安装 make install PREFIX=/usr/local/lj2 # 建立软连接 ln -sf /usr/local/lj2/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 # 添加环境变量 export LUAJIT_LIB=/usr/local/lj2/lib export LUAJIT_INC=/usr/local/lj2/include/luajit-2.1 安装ngx_devel_kit

kit模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现

代码语言:javascript复制# 进入目录 cd /usr/local/src # 下载 wget https://github.com/vision5/ngx_devel_kit/archive/refs/tags/v0.3.1.tar.gz -O ngx_devel_kit.tar.gz # 解压 tar zxxf ngx_devel_kit.tar.gz 安装lua-nginx-module

ngx_lua_module 是一个nginx http模块,它把 lua 解析器内嵌到 nginx,用来解析并执行lua 语言编写的网页后台脚本。

ngx_lua模块的原理

每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;每个外部请求都由一个Lua协程处理,协程之间数据隔离;Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;I/O等异步操作完成时还原相关协程上下文数据,并继续运行。代码语言:javascript复制# 进入目录 cd /usr/local/src # 下载 wget https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.14.zip # 解压 unzip v0.10.14.zip 安装nginx代码语言:javascript复制# 进入目录 cd /usr/local/src # 下载 wget http://nginx.org/download/nginx-1.21.0.tar.gz # 解压 tar zxvf nginx-1.21.0.tar.gz # 添加用户 groupadd nginx useradd -g nginx nginx -s /sbin/nologin # 编译 ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_realip_module \ --with-pcre \ --add-module=/usr/local/src/lua-nginx-module-0.10.14 \ --add-module=/usr/local/src/ngx_devel_kit-0.3.1 \ --with-stream \ --user=nginx \ --group=nginx \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-pcre \ --with-file-aio \ --without-http_scgi_module \ --without-http_uwsgi_module \ --without-http_fastcgi_module # 安装 make -j 3 && make install # 修改配置(server 块添加配置) vim /usr/local/nginx/conf/nginx.conf location /lua { default_type 'text/plain'; content_by_lua 'ngx.say("hello, lua")'; } # 配置开机启动 cat > /usr/lib/systemd/system/nginx.service


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3