亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Nginx使用Lua模塊實(shí)現(xiàn)WAF的原理解析

 更新時(shí)間:2021年09月04日 09:19:02   作者:在質(zhì)疑中選擇向前  
waf是通過執(zhí)行一系列針對(duì)HTTP/HTTPS的安全策略來專門為Web應(yīng)用提供保護(hù)的一款產(chǎn)品,本文重點(diǎn)給大家介紹Nginx使用Lua模塊實(shí)現(xiàn)WAF的原理,需要的朋友參考下吧

前言:最近一段時(shí)間在寫加密數(shù)據(jù)功能,對(duì)安全相關(guān)知識(shí)還是缺少積累,無意間接觸到了WAF相關(guān)知識(shí),剛好Nginx可以實(shí)現(xiàn)WAF功能,也簡單學(xué)習(xí)了Lua這門語言,分享下

一、WAF產(chǎn)生的背景

過去企業(yè)通常會(huì)采用防火墻,作為安全保障的第一道防線;當(dāng)時(shí)的防火墻只是在第三層(網(wǎng)絡(luò)層)有效的阻斷一些數(shù)據(jù)包;而隨著web應(yīng)用的功能越來越豐富的時(shí)候,Web服務(wù)器因?yàn)槠鋸?qiáng)大的計(jì)算能力,處理性能,蘊(yùn)含較高的價(jià)值,成為主要的被攻擊目標(biāo)(第七層應(yīng)用層)。而傳統(tǒng)防火墻在阻止利用應(yīng)用程序漏洞進(jìn)行的攻擊方面,卻沒有辦法;在此背景下,WAF(Web Application Firewall)應(yīng)運(yùn)而生。

二、什么是WAF

Web 應(yīng)用防火墻 (WAF-Web Application Firewall) 旨在保護(hù) Web 應(yīng)用免受各類應(yīng)用層攻擊,例如跨站點(diǎn)腳本 (XSS)、SQL 注入,以及 cookie 中毒等。應(yīng)用是您重要數(shù)據(jù)的網(wǎng)關(guān),因此針對(duì)應(yīng)用發(fā)起的攻擊就成為了造成漏洞的主要原因。有了 WAF 就可以攔截一系列企圖通過入侵系統(tǒng)來泄漏數(shù)據(jù)的攻擊。

三、工作原理

1.用戶通過瀏覽器向Web服務(wù)器發(fā)送網(wǎng)頁請(qǐng)求。

2.用戶的請(qǐng)求到達(dá)Web服務(wù)器之前,WAF對(duì)用戶的請(qǐng)求進(jìn)行過濾

3.WAF拿到用戶的HTTP請(qǐng)求參數(shù)去跟配置文件定義的規(guī)則做比較(比如ip黑名單),如果匹配上就返回403拒絕,否則就放行。

4.WEB服務(wù)器響應(yīng)用戶請(qǐng)求,把頁面數(shù)據(jù)返回給用戶。

四、WAF作用

waf是通過執(zhí)行一系列針對(duì)HTTP/HTTPS的安全策略來專門為Web應(yīng)用提供保護(hù)的一款產(chǎn)品。

五、WAF和傳統(tǒng)防火墻的區(qū)別

1.傳統(tǒng)防火墻是工作在網(wǎng)絡(luò)層(第三層)和傳輸層(第四層)

2.WAF是工作在應(yīng)用層(第七層)

3.傳統(tǒng)防火墻更多是對(duì)IP和端口進(jìn)行過濾

4.WAF是對(duì)HTTP請(qǐng)求進(jìn)行過濾,包括URL,IP,User-Agent等等

六、WAF和DDos

DDos的全稱是Distributed Denial of service。主要依靠一組計(jì)算機(jī)來發(fā)起對(duì)一個(gè)單一的目標(biāo)系統(tǒng)的請(qǐng)求,從而造成目標(biāo)系統(tǒng)資源耗盡而拒絕正常的請(qǐng)求。

根據(jù)OSI網(wǎng)絡(luò)模型,最常見的DDos有三類,第三層(網(wǎng)絡(luò)層)DDos、第四層(傳輸層)DDos和第七層(應(yīng)用層)DDos。

WAF主要處理第七層DDos攻擊,它在處理第七層DDos攻擊時(shí)會(huì)比其它防護(hù)手段更高效一些。WAF會(huì)對(duì)HTTP流量做詳細(xì)的分析,這樣WAF就能針對(duì)正常的訪問請(qǐng)求進(jìn)行建模,然后使用這些模型來區(qū)分正常的請(qǐng)求和攻擊者使用機(jī)器人或者腳本觸發(fā)的請(qǐng)求

七、Nginx WAF功能

  • 支持IP白名單和黑名單功能,直接將黑名單的IP訪問拒絕(新增cdip功能支持ip段)
  • 支持URL白名單,將不需要過濾的URL進(jìn)行定義
  • 支持User-Agent的過濾,匹配自定義規(guī)則中的條目,然后進(jìn)行處理
  • 支持CC攻擊防護(hù),單個(gè)URL指定時(shí)間的訪問次數(shù),超過設(shè)定值(新增針對(duì)不同域名)
  • 支持Cookie過濾,匹配自定義規(guī)則中的條目,然后進(jìn)行處理
  • 支持URL過濾,匹配自定義規(guī)則中的條目,如果用戶請(qǐng)求的URL包含這些
  • 支持URL參數(shù)過濾,原理同上
  • 支持日志記錄,將所有拒絕的操作,記錄到日志中去
  • 新增支持拉黑緩存(默認(rèn)600秒)

八、Nginx Waf防護(hù)流程

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參數(shù)檢查;
  • 檢查cookie;
  • 檢查post;

九、基于Nginx實(shí)現(xiàn)的WAF

9.1安裝依賴包

yum -y install gcc gcc-c++ autoconf automake make unzip
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

9.2安裝LuaJIT2.0

LuaJIT是Lua的即時(shí)編譯器,簡單來說,LuaJIT是一個(gè)高效的Lua虛擬機(jī)。

# 進(jìn)入目錄
cd /usr/local/src/
 
# 下載LuaJIT2.0
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
 
# 解壓
tar xf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5
 
# 編譯
make
 
# 安裝
make install PREFIX=/usr/local/lj2
 
# 建立軟連接
ln -s /usr/local/lj2/lib/libluajit-5.1.so.2 /lib64/
 
# 添加環(huán)境變量
export LUAJIT_LIB=/usr/local/lj2/lib/
export LUAJIT_INC=/usr/local/lj2/include/luajit-2.0/

9.3安裝ngx_devel_kit

kit模塊是一個(gè)拓展nginx服務(wù)器核心功能的模塊,第三方模塊開發(fā)可以基于它來快速實(shí)現(xiàn)。

# 進(jìn)入目錄
cd /user/local/src/
 
# 下載v0.3.0.tar.gz
wget  https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz -O ngx_devel_kit.tar.gz
 
# 解壓
tar xf ngx_devel_kit.tar.gz

9.4安裝lua-nginx-module

ngx_lua_module 是一個(gè)nginx http模塊,它把 lua 解析器內(nèi)嵌到 nginx,用來解析并執(zhí)行l(wèi)ua 語言編寫的網(wǎng)頁后臺(tái)腳本。

ngx_lua模塊的原理

1. 每個(gè)worker(工作進(jìn)程)創(chuàng)建一個(gè)Lua VM,worker內(nèi)所有協(xié)程共享VM;
2. 將Nginx I/O原語封裝后注入 Lua VM,允許Lua代碼直接訪問;
3. 每個(gè)外部請(qǐng)求都由一個(gè)Lua協(xié)程處理,協(xié)程之間數(shù)據(jù)隔離;
4. Lua代碼調(diào)用I/O操作等異步接口時(shí),會(huì)掛起當(dāng)前協(xié)程(并保護(hù)上下文數(shù)據(jù)),而不阻塞worker;
5. I/O等異步操作完成時(shí)還原相關(guān)協(xié)程上下文數(shù)據(jù),并繼續(xù)運(yùn)行

安裝

# 進(jìn)入目錄
cd /user/local/src/
 
# 下載v0.10.9rc7.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
 
# 解壓
tar -xzvf v0.10.9rc7.tar.gz

9.5安裝Nginx

# 進(jìn)入目錄
cd /user/local/src/
 
# 下載
wget http://nginx.org/download/nginx-1.21.0.tar.gz
 
# 解壓
tar xf nginx-1.21.0.tar.gz
 
# 進(jìn)入nginx目錄
cd nginx-1.21.0
 
# 編譯
./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.9rc7 --add-module=/usr/local/src/ngx_devel_kit-0.3.0 --with-stream
 
# 安裝
make && make install
 
# 添加nginx配置,在server塊里添加下面內(nèi)容
[root@localhost_test_192.168.10.132 11:04:48 ~]# vim /usr/local/nginx/conf/nginx.conf
 
location /lua {
    default_type 'text/plain';
 
    content_by_lua 'ngx.say("hello, lua")';
}
 
# 檢查語法
[root@localhost_test_192.168.10.132 09:59:33 /usr/local/src]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
# 啟動(dòng)
[root@localhost_test_192.168.10.132 11:08:35 ~]# nginx
 
# 測試
curl 127.0.0.1:80/lua

9.6安裝ngx_lua_waf

# 進(jìn)入目錄
cd /user/local/src/
 
# 把ngx_lua_waf下載到conf目錄下
wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
 
# 解壓命名為waf
unzip master.zip -d /usr/local/nginx/conf/
 
# 更改目錄名
mv /usr/local/nginx/conf/ngx_lua_waf-master /usr/local/nginx/conf/waf
 
# 在nginx.conf的http段添加
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;
 
# 在nginx.conf最外層添加用戶運(yùn)行
user www;
 
# 創(chuàng)建日志目錄
mkdir /usr/local/nginx/logs/hack
chown www /usr/local/nginx/logs/hack
 
# Lua_waf 配置
[root@localhost_test_192.168.10.132 11:33:53 /usr/local/nginx/conf/waf]# cat config.lua
# 規(guī)則存放路徑
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
# 是否開啟攻擊信息記錄,需要配置logdir
attacklog = "on"
# log存儲(chǔ)目錄,該目錄需要用戶自己新建,切需要nginx用戶的可寫權(quán)限
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白名單,多個(gè)ip用逗號(hào)分隔
ipWhitelist={"127.0.0.1"}
# ip黑名單,多個(gè)ip用逗號(hào)分隔
ipBlocklist={"192.168.10.1"}
# 是否開啟攔截cc攻擊(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCDeny="off"
# 設(shè)置cc攻擊頻率,單位為秒.
# 默認(rèn)1分鐘同一個(gè)IP只能請(qǐng)求同一個(gè)地址100次
CCrate="100/60"
# 告警內(nèi)容
html= []
 
# 規(guī)則文件
[root@localhost_test_192.168.10.132 11:42:12 /usr/local/nginx/conf/waf]# ll wafconf/
total 24
-rw-r--r-- 1 root root 749 Apr  6  2016 args
-rw-r--r-- 1 root root 652 Apr  6  2016 cookie
-rw-r--r-- 1 root root 733 Apr  6  2016 post
-rw-r--r-- 1 root root 335 Apr  6  2016 url
-rw-r--r-- 1 root root 177 Apr  6  2016 user-agent
-rw-r--r-- 1 root root   8 Apr  6  2016 whiteurl
 
args里面的規(guī)則get參數(shù)進(jìn)行過濾的
cookie是對(duì)請(qǐng)求過濾的cookie過濾
url是只在get請(qǐng)求url過濾的規(guī)則
post是只在post請(qǐng)求過濾的規(guī)則
whiteurl是白名單,里面的url匹配到不做過濾
user-agent是對(duì)user-agent的過濾規(guī)則
 
# 加載Nginx
[root@localhost_test_192.168.10.132 11:32:41]# nginx -s reload

9.7測試效果  

訪問帶有參數(shù)的URL

http://192.168.10.132/?id=<script 

總結(jié):Nginx使用Lua模塊實(shí)現(xiàn)WAF的功能很強(qiáng)大,可以對(duì)代碼進(jìn)行修改二次開發(fā),修改成為自己想要的效果,不妨試試看看 

到此這篇關(guān)于Nginx使用Lua模塊實(shí)現(xiàn)WAF的原理解析的文章就介紹到這了,更多相關(guān)Nginx實(shí)現(xiàn)WAF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx使用的php-fpm的兩種進(jìn)程管理方式及優(yōu)化

    Nginx使用的php-fpm的兩種進(jìn)程管理方式及優(yōu)化

    這篇文章主要介紹了Nginx使用的php-fpm的兩種進(jìn)程管理方式及優(yōu)化,需要的朋友可以參考下
    2016-09-09
  • Nginx轉(zhuǎn)發(fā)404問題的排查和思考

    Nginx轉(zhuǎn)發(fā)404問題的排查和思考

    本篇文章原自當(dāng)前業(yè)務(wù)遇到的一個(gè)實(shí)際問題,因?yàn)槭艿剿诰W(wǎng)絡(luò)環(huán)境的因素影響,所以整體排查下來耗費(fèi)了很大精力,記錄一下Nginx 轉(zhuǎn)發(fā) 404 問題的排查和思考,需要的朋友可以參考下
    2023-09-09
  • nginx外網(wǎng)訪問內(nèi)網(wǎng)站點(diǎn)配置操作

    nginx外網(wǎng)訪問內(nèi)網(wǎng)站點(diǎn)配置操作

    這篇文章主要介紹了nginx外網(wǎng)訪問內(nèi)網(wǎng)站點(diǎn)配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • nginx 負(fù)載均衡的簡單配置方法

    nginx 負(fù)載均衡的簡單配置方法

    Nginx 負(fù)載均衡的簡單配置例子,供初學(xué)的朋友參考下
    2013-02-02
  • Nginx隱藏index.php和Pathinfo模式配置例子

    Nginx隱藏index.php和Pathinfo模式配置例子

    這篇文章主要介紹了Nginx隱藏index.php和Pathinfo模式配置例子,需要的朋友可以參考下
    2014-04-04
  • Nginx如何獲取自定義請(qǐng)求header頭和URL參數(shù)詳解

    Nginx如何獲取自定義請(qǐng)求header頭和URL參數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Nginx如何獲取自定義請(qǐng)求header頭和URL參數(shù)的相關(guān)資料,本文適用于需要在nginx里獲取http請(qǐng)求頭信息或者傳遞的參數(shù)進(jìn)行一些計(jì)算和處理的情況,需要的朋友可以參考下
    2022-07-07
  • nginx配置文件使用環(huán)境變量的操作方法

    nginx配置文件使用環(huán)境變量的操作方法

    Nginx是一款開源代碼的高性能HTTP服務(wù)器和反向代理服務(wù)器,同時(shí)支持IMAP/POP3/SMTP代理服務(wù),相較于Apache、lighttpd具有占有內(nèi)存少,穩(wěn)定性高等優(yōu)勢,所以深受用戶喜愛,今天小編給大家分享nginx配置文件使用環(huán)境變量的操作方法,感興趣的朋友一起看看吧
    2021-06-06
  • Nginx防止直接用IP訪問Web服務(wù)器的設(shè)置方法

    Nginx防止直接用IP訪問Web服務(wù)器的設(shè)置方法

    看了很多Nginx的配置,好像都忽略了ip直接訪問Web的問題,這樣理論上不利于SEO優(yōu)化,所以我們希望可以避免直接用IP訪問網(wǎng)站,而是域名訪問,具體怎么做呢,看下面
    2012-09-09
  • Nginx中proxy_pass的斜杠的兩種方式

    Nginx中proxy_pass的斜杠的兩種方式

    Nginx的官方文檔將proxy_pass分為不帶URI和帶URI兩種類型,本文就來介紹Nginx中proxy_pass的斜杠的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 反向代理緩存的詳細(xì)介紹

    反向代理緩存的詳細(xì)介紹

    這篇文章主要介紹了反向代理緩存的詳細(xì)介紹的相關(guān)資料,希望通過本文大家能夠掌握應(yīng)用反向代理緩存的使用方法,需要的朋友可以參考下
    2017-09-09

最新評(píng)論