首页 > 系统相关 >Nginx+Lua实现WAF应⽤防⽕墙

Nginx+Lua实现WAF应⽤防⽕墙

时间:2024-08-26 21:50:56浏览次数:8  
标签:Nginx waf Lua master nginx WAF root ngx lua

Nginx+Lua实现WAF应⽤防⽕墙

  • 1.常⻅的恶意⾏为
    • 爬⾍⾏为和恶意抓取,资源盗取
    • 防护⼿段
      • 1.基础防盗链功能不让恶意⽤户能够轻易的爬取⽹站对外数据
      • 2.access_moudle->对后台,部分⽤户服务的数据提供IP防护

解决⽅法

192.168.1.170

[root@180-143 conf.d]# cat /soft/openresty/nginx/conf/conf.d/luawaf.conf
server {
listen 80;
server_name luawaf.yuansredevsecops.top;

set $ip 0;
if ($http_x_forward_for = "192.168.1.129"){
set $ip 1;
}
if ($remote_addr = "192.168.1.129"){
set $ip 1;
}
if ($ip = 0){
return 403;
}
location /hello {
default_type application/json;
return 200 '{"status":"success"}';
}
}
  • 2.常⻅的攻击⼿段
    • 后台密码撞库,通过猜测密码字典不断对后台系统登陆性尝试,获取后台登陆密码
    • 防护⼿段
      • 1.后台登陆密码复杂度
      • 2.使⽤access_module-对后台提供IP防控
      • 3.预警机制
    • ⽂件上传漏洞,利⽤上传接⼝将恶意代码植⼊到服务器中,再通过url去访问执⾏代码
    • 执⾏⽅式 luawaf.yuansredevsecops.top/1.jpg/1.php

解决办法

location ^~ /upload {
root /soft/code/upload;
if ($request_filename ~* (.*)\.php){
return 403;
}
}
  • 3.常⻅的攻击⼿段
    • 利⽤未过滤/未审核的⽤户输⼊进⾏Sql注⼊的攻击⽅法, 让应⽤运⾏本不应该运⾏的SQL代码
    • 防护⼿段
      • 1.php配置开启安全相关限制
      • 2.开发⼈员对sql提交进⾏审核,屏蔽常⻅的注⼊⼿段
      • 3.Nginx+Lua构建WAF应⽤层防⽕墙, 防⽌Sql注⼊

image-20230609104023506

1.快速安装 lnmp 架构

[root@nginx ~]# yum install mariadb mariadb-server php php-fpm php-mysql -y

2.配置 Nginx + php

[root@nginx conf.d]# cat lnmp.conf
server {
server_name lnmp.yuansredevsecops.top;
root /soft/code/lnmp/;
index index.html index.php;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

3.配置 MySQL

[root@nginx ~]# systemctl start mariadb
[root@nginx ~]# mysql -uroot -p'123456'

MariaDB [(none)]> create database info;
MariaDB [(none)]> use info;
MariaDB [info]> create table user(id int(11),username varchar(64), password varchar(64), email varchar(64));
MariaDB [info]> desc user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(64) | YES | | NULL | |
| password | varchar(64) | YES | | NULL | |
| email | varchar(64) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+

#插⼊数据
MariaDB [info]> insert into user (id,username,password,email) values(1,'yuan',('123'),'[email protected]');
MariaDB [info]> select * from info.user;
+------+----------+----------------------------------+-----------------+
| id | username | password | email |
+------+----------+----------------------------------+-----------------+
| 1 | yuan | 123 | [email protected] |
+------+----------+----------------------------------+-----------------+
1 row in set (0.00 sec)

4.配置php代码

[root@nginx conf.d]# cat /soft/code/lnmp/login.html
<html>
<head>
<title> Sql注⼊演示场景 </title>
<meta http-equiv="content-type"content="text/html;charset=utf-8">
</head>
<body>
<form action="sql.php" method="post">
<table>
<tr>
<td> ⽤ 户: </td>
<td><input type="text" name="username"></td>
</tr>

<tr>
<td> 密 码: </td>
<td><input type="text" name="password"></td>
</tr>

<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>

</table>
</form>
</body>
</html>

被html调⽤的sql.php⽂件

[root@nginx conf.d]# cat /soft/code/lnmp/sql.php
<?php
$conn = mysqli_connect("localhost", 'root', '123456', "info") or die("数据库连接失败! ");
$name = $_POST['username'];
$pwd = $_POST['password'];
// # sql注⼊核⼼问题
$sql = "select * from user where username='$name' and password='$pwd'";
echo $sql . "<br />";
$query = mysqli_query($conn, $sql);
$arr = mysqli_fetch_array($query);
if ($arr) {
echo "login success!<br />";
echo $arr[1];
echo $arr[3] . "<br /><br />";
} else {
echo "login failed!";
}
mysqli_close($conn);
?>

image-20240826212443369

image-20240826212455164

部署Waf相关防护代码

[root@nginx ~]# cd /soft/src/
[root@nginx src]# git clone https://github.com/loveshell/ngx_lua_waf.git

#克隆不下了直接从github上⼿动下载上传解压
[root@nginx src]# rz ngx_lua_waf-master.zip
[root@nginx src]# unzip ngx_lua_waf-master.zip
Archive: ngx_lua_waf-master.zip
314a2f62ec350eba9b5d25b55b5b0a723e20a8d0
creatyuan: ngx_lua_waf-master/
inflatyuan: ngx_lua_waf-master/.gitattributes
inflatyuan: ngx_lua_waf-master/.gitignore
inflatyuan: ngx_lua_waf-master/README.md
inflatyuan: ngx_lua_waf-master/config.lua
inflatyuan: ngx_lua_waf-master/init.lua
inflatyuan: ngx_lua_waf-master/install.sh
inflatyuan: ngx_lua_waf-master/waf.lua
creatyuan: ngx_lua_waf-master/wafconf/
inflatyuan: ngx_lua_waf-master/wafconf/args
inflatyuan: ngx_lua_waf-master/wafconf/cookie
inflatyuan: ngx_lua_waf-master/wafconf/post
inflatyuan: ngx_lua_waf-master/wafconf/url
inflatyuan: ngx_lua_waf-master/wafconf/user-agent
extractyuan: ngx_lua_waf-master/wafconf/whiteurl

# mkdir -p /soft/openresty/nginx/logs/waf/
//把ngx_lua_waf复制到nginx的⽬录下,解压命名为waf
[root@nginx ~]# cp -r ngx_lua_waf-master /soft/openresty/nginx/lua/waf

//在nginx.conf的http段添加(注意路径)
lua_package_path "/soft/openresty/nginx/lua/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /soft/openresty/nginx/lua/waf/init.lua;
access_by_lua_file /soft/openresty/nginx/lua/waf/waf.lua;

//配置config.lua⾥的waf规则⽬录(⼀般在waf/wafconf/⽬录下)
RulePath = "/soft/openresty/nginx/lua/waf/wafconf/"
logdir = "/soft/openresty/nginx/logs/waf/"
#绝对路径如有变动,需对应修改, 然后重启nginx即可

7.Nginx + lua 防⽌ Sql注⼊

[root@nginx ~]# vim /soft/openresty/nginx/lua/waf/wafconf/post
\sor\s+

这个正则表达式有两部分:

  1. \s: 表示匹配任意空⽩字符,包括空格、制表符、换⾏符等。
  2. or: 表示匹配这三个字⺟的顺序,即 or。
  3. \s+: 表示匹配⼀个或多个任意空⽩字符,即与\s类似,但⽐\s更加宽松,可以匹配多个连续的空⽩字符。

整个正则表达式的含义是匹配字符串中的⼀个空⽩字符或多个空⽩字符,后跟or,再后跟⼀个或多个空⽩字
符。这个正则表达式通常⽤于匹配字符串中的特定分隔符。

image-20240826212543501

标签:Nginx,waf,Lua,master,nginx,WAF,root,ngx,lua
From: https://www.cnblogs.com/zgw03/p/18381633

相关文章

  • Nginx+Lua实现代码灰度发布
    Nginx+Lua实现代码灰度发布使⽤Nginx结合lua实现代码灰度发布灰度发布是⼀种将新版本的软件或功能逐步推⼴给⼀⼩部分⽤户,以进⾏测试和评估它们的反应的⽅法。实际上,它是⼀种渐进式的部署⽅法,可以逐步将新版本或功能逐步发布给不同的⽤户群体,直到所有⽤户都可以使⽤这个新......
  • 合宙LuatOS产品规格书——Air700EAQ
    LuatAir700EAQ是合宙的LTECat.1bis通信模块,采用移芯EC716E平台,支持LTE3GPPRel.13技术。该模块专为满足小型化、低成本需求而设计,具备超小封装和极致成本优势。Air700EAQ支持移动双模,内置丰富的网络协议,集成多个工业标准接口,支持USB2.0,以及远程OTA固件升级。主要特点包......
  • 如何彻底卸载nginx
    彻底卸载Nginx包括删除Nginx软件包及其相关配置文件和目录。以下是针对不同操作系统的彻底卸载步骤:###1.在Ubuntu/Debian系统上1.**停止Nginx服务**:   ```bash   sudosystemctlstopnginx   ```2.**卸载Nginx软件包**:   ```bash   sudoapt-g......
  • LogicBench: Towards Systematic Evaluation of Logical Reasoning Ability of Large
    本文是LLM系列文章,针对《LogicBench:TowardsSystematicEvaluationofLogicalReasoningAbilityofLargeLanguageModels》的翻译。LogicBench:大型语言模型逻辑推理能力的系统评价摘要1引言2相关工作3LogicBench4结果和分析5结论局限性摘要最近......
  • centos 配置nginx
    1.检查系统版本,安装nginxcat/etc/redhat-release,//这个命令会显示你的CentOS发行版名称以及大致的版本号rpm-qCentOS-release,//这将返回当前安装的CentOS版本的具体编号uname-r,//内核的完整版本字符串。2.安装nginxsudoyuminstallepel-release-y#如果还没有安......
  • 科普文:软件架构Nginx系列之【万字详解Nginx功能模块功能、应用场景、实操配置】
    Nginx模块分类Nginx是高度模块化的,他的模块分为核心模块,标准模块,和第三方模块。如上图所示。其中标准模块又分为三类:HTTPmodule(web模块)StandardHTTPModule(标准模块)OptionalHTTPModule(可选模块)MailModule(邮箱模块)StreamModule(四层代理相关的模块)......
  • 科普文:软件架构Nginx系列之【万字详解Nginx防盗链】
    概叙盗链攻击是一种常见的网络安全威胁,不仅侵犯了内容创作者的版权,还可能会给原网站带来严重的损失。了解盗链攻击的原理和类型,采取有效的防范措施,是保护网站和服务的重要手段。通过技术和法律手段的结合,可以有效地防止和减轻盗链攻击的影响。随着技术的发展,防盗链的方法也......
  • 科普文:软件架构Nginx系列之【Nginx 核心架构设计和原理】
    概叙Nginx是什么Nginx(engineX)是一个开源的轻量级的HTTP服务器,能够提供高性能的HTTP和反向代理服务。与传统的Apache服务器相比,在性能上Nginx占用系统资源更小、支持高并发,访问效率更高;在功能上,Nginx不仅作为Web服务软件,还适用于反向代理、负载均衡等场景;在安装配置上,Nginx......
  • 银河麒麟系统V10(arm版)安装nginx-1.14.1说明
    #银河麒麟系统#、#nginx#随着2024年微软全球蓝屏事件的出现,系统安全越来越重要。目前很多企业开始尝试国产化操作系统上,本文介绍如何在国产化银河麒麟系统V10(arm)版上安装nginx-1.14.1。本资源是arm版本的nginx-1.14.1的rpm离线安装包(下载地址:银河麒麟系统arm版nginx-1.14.1-......
  • Nginx rewrite
    NginxrewriteURL组成http://www.wingsredevsecops.top/download?name=docker.pdf这个URL的格式可以分为以下⼏个部分:协议部分:指定了访问资源的协议,这个URL使⽤了默认的协议HTTP、HTTPS。域名部分:指定服务器的域名和顶级域名,这个URL的域名部分是www.wingsredevsecops.top......