国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - Nginx使用Lua模塊實現WAF的原理解析

Nginx使用Lua模塊實現WAF的原理解析

2021-09-26 16:35在質疑中選擇向前 Nginx

waf是通過執行一系列針對HTTP/HTTPS的安全策略來專門為Web應用提供保護的一款產品,本文重點給大家介紹Nginx使用Lua模塊實現WAF的原理,需要的朋友參考下吧

前言:最近一段時間在寫加密數據功能,對安全相關知識還是缺少積累,無意間接觸到了WAF相關知識,剛好Nginx可以實現WAF功能,也簡單學習了Lua這門語言,分享下

一、WAF產生的背景

過去企業通常會采用防火墻,作為安全保障的第一道防線;當時的防火墻只是在第三層(網絡層)有效的阻斷一些數據包;而隨著web應用的功能越來越豐富的時候,Web服務器因為其強大的計算能力,處理性能,蘊含較高的價值,成為主要的被攻擊目標(第七層應用層)。而傳統防火墻在阻止利用應用程序漏洞進行的攻擊方面,卻沒有辦法;在此背景下,WAF(Web Application Firewall)應運而生。

二、什么是WAF

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

三、工作原理

Nginx使用Lua模塊實現WAF的原理解析

1.用戶通過瀏覽器向Web服務器發送網頁請求。

2.用戶的請求到達Web服務器之前,WAF對用戶的請求進行過濾

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

4.WEB服務器響應用戶請求,把頁面數據返回給用戶。

四、WAF作用

waf是通過執行一系列針對HTTP/HTTPS的安全策略來專門為Web應用提供保護的一款產品。

五、WAF和傳統防火墻的區別

1.傳統防火墻是工作在網絡層(第三層)和傳輸層(第四層)

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

3.傳統防火墻更多是對IP和端口進行過濾

4.WAF是對HTTP請求進行過濾,包括URL,IP,User-Agent等等

六、WAF和DDos

Nginx使用Lua模塊實現WAF的原理解析

DDos的全稱是Distributed Denial of service。主要依靠一組計算機來發起對一個單一的目標系統的請求,從而造成目標系統資源耗盡而拒絕正常的請求。

根據OSI網絡模型,最常見的DDos有三類,第三層(網絡層)DDos、第四層(傳輸層)DDos和第七層(應用層)DDos。

WAF主要處理第七層DDos攻擊,它在處理第七層DDos攻擊時會比其它防護手段更高效一些。WAF會對HTTP流量做詳細的分析,這樣WAF就能針對正常的訪問請求進行建模,然后使用這些模型來區分正常的請求和攻擊者使用機器人或者腳本觸發的請求

七、Nginx WAF功能

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

八、Nginx Waf防護流程

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;

九、基于Nginx實現的WAF

 

9.1安裝依賴包

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

9.2安裝LuaJIT2.0

LuaJIT是Lua的即時編譯器,簡單來說,LuaJIT是一個高效的Lua虛擬機。

  1. # 進入目錄
  2. cd /usr/local/src/
  3.  
  4. # 下載LuaJIT2.0
  5. wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
  6.  
  7. # 解壓
  8. tar xf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5
  9.  
  10. # 編譯
  11. make
  12.  
  13. # 安裝
  14. make install PREFIX=/usr/local/lj2
  15.  
  16. # 建立軟連接
  17. ln -s /usr/local/lj2/lib/libluajit-5.1.so.2 /lib64/
  18.  
  19. # 添加環境變量
  20. export LUAJIT_LIB=/usr/local/lj2/lib/
  21. export LUAJIT_INC=/usr/local/lj2/include/luajit-2.0/

9.3安裝ngx_devel_kit

kit模塊是一個拓展nginx服務器核心功能的模塊,第三方模塊開發可以基于它來快速實現。

  1. # 進入目錄
  2. cd /user/local/src/
  3.  
  4. # 下載v0.3.0.tar.gz
  5. wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz -O ngx_devel_kit.tar.gz
  6.  
  7. # 解壓
  8. tar xf ngx_devel_kit.tar.gz

9.4安裝lua-nginx-module

ngx_lua_module 是一個nginx http模塊,它把 lua 解析器內嵌到 nginx,用來解析并執行lua 語言編寫的網頁后臺腳本。

ngx_lua模塊的原理

1. 每個worker(工作進程)創建一個Lua VM,worker內所有協程共享VM;
2. 將Nginx I/O原語封裝后注入 Lua VM,允許Lua代碼直接訪問;
3. 每個外部請求都由一個Lua協程處理,協程之間數據隔離;
4. Lua代碼調用I/O操作等異步接口時,會掛起當前協程(并保護上下文數據),而不阻塞worker;
5. I/O等異步操作完成時還原相關協程上下文數據,并繼續運行

安裝

  1. # 進入目錄
  2. cd /user/local/src/
  3.  
  4. # 下載v0.10.9rc7.tar.gz
  5. wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
  6.  
  7. # 解壓
  8. tar -xzvf v0.10.9rc7.tar.gz

9.5安裝Nginx

  1. # 進入目錄
  2. cd /user/local/src/
  3.  
  4. # 下載
  5. wget http://nginx.org/download/nginx-1.21.0.tar.gz
  6.  
  7. # 解壓
  8. tar xf nginx-1.21.0.tar.gz
  9.  
  10. # 進入nginx目錄
  11. cd nginx-1.21.0
  12.  
  13. # 編譯
  14. ./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
  15.  
  16. # 安裝
  17. make && make install
  18.  
  19. # 添加nginx配置,在server塊里添加下面內容
  20. [root@localhost_test_192.168.10.132 11:04:48 ~]# vim /usr/local/nginx/conf/nginx.conf
  21.  
  22. location /lua {
  23. default_type 'text/plain';
  24.  
  25. content_by_lua 'ngx.say("hello, lua")';
  26. }
  27.  
  28. # 檢查語法
  29. [root@localhost_test_192.168.10.132 09:59:33 /usr/local/src]# nginx -t
  30. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  31. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  32.  
  33. # 啟動
  34. [root@localhost_test_192.168.10.132 11:08:35 ~]# nginx
  35.  
  36. # 測試
  37. curl 127.0.0.1:80/lua

9.6安裝ngx_lua_waf

  1. # 進入目錄
  2. cd /user/local/src/
  3.  
  4. # 把ngx_lua_waf下載到conf目錄下
  5. wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
  6.  
  7. # 解壓命名為waf
  8. unzip master.zip -d /usr/local/nginx/conf/
  9.  
  10. # 更改目錄名
  11. mv /usr/local/nginx/conf/ngx_lua_waf-master /usr/local/nginx/conf/waf
  12.  
  13. # 在nginx.conf的http段添加
  14. lua_package_path "/usr/local/nginx/conf/waf/?.lua";
  15. lua_shared_dict limit 10m;
  16. init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
  17. access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
  18.  
  19. # 在nginx.conf最外層添加用戶運行
  20. user www;
  21.  
  22. # 創建日志目錄
  23. mkdir /usr/local/nginx/logs/hack
  24. chown www /usr/local/nginx/logs/hack
  25.  
  26. # Lua_waf 配置
  27. [root@localhost_test_192.168.10.132 11:33:53 /usr/local/nginx/conf/waf]# cat config.lua
  28. # 規則存放路徑
  29. RulePath = "/usr/local/nginx/conf/waf/wafconf/"
  30. # 是否開啟攻擊信息記錄,需要配置logdir
  31. attacklog = "on"
  32. # log存儲目錄,該目錄需要用戶自己新建,切需要nginx用戶的可寫權限
  33. logdir = "/usr/local/nginx/logs/hack/"
  34. # 是否攔截url訪問
  35. UrlDeny="on"
  36. # 是否攔截后重定向
  37. Redirect="on"
  38. # 是否攔截cookie攻擊
  39. CookieMatch="on"
  40. # 是否攔截post攻擊
  41. postMatch="on"
  42. # 是否開啟URL白名單
  43. whiteModule="on"
  44. # 填寫不允許上傳文件后綴類型
  45. black_fileExt={"php","jsp"}
  46. # ip白名單,多個ip用逗號分隔
  47. ipWhitelist={"127.0.0.1"}
  48. # ip黑名單,多個ip用逗號分隔
  49. ipBlocklist={"192.168.10.1"}
  50. # 是否開啟攔截cc攻擊(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
  51. CCDeny="off"
  52. # 設置cc攻擊頻率,單位為秒.
  53. # 默認1分鐘同一個IP只能請求同一個地址100次
  54. CCrate="100/60"
  55. # 告警內容
  56. html= []
  57.  
  58. # 規則文件
  59. [root@localhost_test_192.168.10.132 11:42:12 /usr/local/nginx/conf/waf]# ll wafconf/
  60. total 24
  61. -rw-r--r-- 1 root root 749 Apr 6 2016 args
  62. -rw-r--r-- 1 root root 652 Apr 6 2016 cookie
  63. -rw-r--r-- 1 root root 733 Apr 6 2016 post
  64. -rw-r--r-- 1 root root 335 Apr 6 2016 url
  65. -rw-r--r-- 1 root root 177 Apr 6 2016 user-agent
  66. -rw-r--r-- 1 root root 8 Apr 6 2016 whiteurl
  67.  
  68. args里面的規則get參數進行過濾的
  69. cookie是對請求過濾的cookie過濾
  70. url是只在get請求url過濾的規則
  71. post是只在post請求過濾的規則
  72. whiteurl是白名單,里面的url匹配到不做過濾
  73. user-agent是對user-agent的過濾規則
  74.  
  75. # 加載Nginx
  76. [root@localhost_test_192.168.10.132 11:32:41]# nginx -s reload

9.7測試效果  

訪問帶有參數的URL

http://192.168.10.132/?id=<script 

Nginx使用Lua模塊實現WAF的原理解析

總結:Nginx使用Lua模塊實現WAF的功能很強大,可以對代碼進行修改二次開發,修改成為自己想要的效果,不妨試試看看 

到此這篇關于Nginx使用Lua模塊實現WAF的原理解析的文章就介紹到這了,更多相關Nginx實現WAF內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/lucktomato/p/15224795.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩视频网 | 久久这里只有精品8 | 日韩精品一区二区三区中文在线 | 四虎影院网 | 国产激情一区二区三区 | 26uuu成人免费毛片 | 国产一区在线视频观看 | 国产精品视频播放 | www.一区二区三区 | 精品无码久久久久国产 | 在线观看一区 | 免费观看日韩一级片 | 久久免费国产 | 女男羞羞视频网站免费 | 久久久久久久久久久免费av | 国产成人一区二区在线观看 | 午夜影院在线播放 | 黄桃av| 亚洲高清免费视频 | 日本在线观看 | 99久久视频| 亚洲一区二区在线 | 一区二区三区中文 | 午夜免费视频网站 | 仙人掌旅馆在线观看 | 亚洲97 | 国产精品久久久久久久久久东京 | 欧美成人免费在线 | 日韩综合网 | 看欧美一级片 | 亚洲综合一区二区三区 | 九色在线 | 久久精品国产清自在天天线 | 亚洲一区二区三区免费 | 亚洲视频一区二区三区在线观看 | 午夜影院| 午夜免费福利视频 | av在线大全 | 婷婷在线免费视频 | 欧美成年黄网站色视频 | 亚洲欧美另类久久久精品2019 |