pull/104/head
有安科技 2024-11-29 11:10:54 +08:00
parent b52b1c9698
commit 17925223ab
109 changed files with 167521 additions and 1217 deletions

View File

@ -1,3 +1,33 @@
## License
This License (hereinafter referred to as "License") applies to the software you have obtained (hereinafter referred to as "Software"). Please read the following terms carefully before using the Software. Using the Software indicates your agreement and acceptance of the terms of this License.
1. **Copyright Notice**
All codes, images, and files of this product are copyrighted by Wuhan UUSEC Technology Co.,Ltd
2. **Usage Permission**
Subject to compliance with the terms of this License, you are granted the right to install and run the Software on a single device for personal non-commercial purposes only.
3. **Prohibitions**
You shall not engage in the following activities in relation to the Software:
a) Cracking, reverse engineering, decompiling, disassembling, or other similar actions;
b) Repackaging, modifying, adapting, copying, translating, sublicensing, or creating derivative works;
c) Using for commercial purposes or any profit-making activities;
d) Unauthorized dissemination, distribution, sale, or rental of the Software;
e) Combining the Software with content or actions that infringe upon the intellectual property rights of others or violate laws and regulations.
4. **Reservation of Rights**
The copyright of the Software belongs to the original author. All other rights not expressly granted in this License are reserved by the original author. You may not exercise any other rights not expressly granted in this License without the explicit authorization of the original author.If used beyond the scope of the authorization, the original author reserves the right to pursue legal liability.
5. **Disclaimers**
The Software is provided "as is" without any warranties of any kind, including but not limited to warranties of merchantability, fitness for a particular purpose, or non-infringement. The original author shall not be liable for any loss, damage, litigation, or any other consequences resulting from the use of the Software.
6. **Termination**
This License shall be effective upon your acceptance and shall continue in effect until terminated. The original author reserves the right to terminate this License at any time if you fail to comply with any of the terms and conditions of this License. Upon termination, you must cease all use of the Software and destroy all copies in your possession or control.
7. **Applicable Law and Dispute Resolution**
This License shall be governed by and construed in accordance with the laws of the country or jurisdiction where the original author is located. Any disputes arising from or in connection with this License shall be resolved through negotiation. In case no settlement can be reached through negotiation, either party may submit the dispute to the competent court of the country or jurisdiction where the original author is located.
## 软件许可证
本许可证(以下简称“许可证”)适用于您所获取的软件(以下简称“软件”),请您在使用本软件前仔细阅读以下条款。使用本软件表示您同意并接受本许可证的条款。
@ -27,33 +57,3 @@
7. **适用法律与争议解决**
本许可证受原作者所在国家或司法管辖区法律的约束并依据其解释。任何因本许可证引起的或与其相关的争议应通过协商解决。如协商无果,任何一方均可将争议提交原作者所在国家或司法管辖区的有管辖权的法院解决。
## License
This License (hereinafter referred to as "License") applies to the software you have obtained (hereinafter referred to as "Software"). Please read the following terms carefully before using the Software. Using the Software indicates your agreement and acceptance of the terms of this License.
1. **Copyright Notice**
All codes, images, and files of this product are copyrighted by Wuhan UUSEC Technology Co.,Ltd
2. **Usage Permission**
Subject to compliance with the terms of this License, you are granted the right to install and run the Software on a single device for personal non-commercial purposes only.
3. **Prohibitions**
You shall not engage in the following activities in relation to the Software:
a) Cracking, reverse engineering, decompiling, disassembling, or other similar actions;
b) Repackaging, modifying, adapting, copying, translating, sublicensing, or creating derivative works;
c) Using for commercial purposes or any profit-making activities;
d) Unauthorized dissemination, distribution, sale, or rental of the Software;
e) Combining the Software with content or actions that infringe upon the intellectual property rights of others or violate laws and regulations.
4. **Reservation of Rights**
The copyright of the Software belongs to the original author. All other rights not expressly granted in this License are reserved by the original author. You may not exercise any other rights not expressly granted in this License without the explicit authorization of the original author.If used beyond the scope of the authorization, the original author reserves the right to pursue legal liability.
5. **Disclaimers**
The Software is provided "as is" without any warranties of any kind, including but not limited to warranties of merchantability, fitness for a particular purpose, or non-infringement. The original author shall not be liable for any loss, damage, litigation, or any other consequences resulting from the use of the Software.
6. **Termination**
This License shall be effective upon your acceptance and shall continue in effect until terminated. The original author reserves the right to terminate this License at any time if you fail to comply with any of the terms and conditions of this License. Upon termination, you must cease all use of the Software and destroy all copies in your possession or control.
7. **Applicable Law and Dispute Resolution**
This License shall be governed by and construed in accordance with the laws of the country or jurisdiction where the original author is located. Any disputes arising from or in connection with this License shall be resolved through negotiation. In case no settlement can be reached through negotiation, either party may submit the dispute to the competent court of the country or jurisdiction where the original author is located.

107
README.md
View File

@ -1,110 +1,103 @@
# 南墙简介
<p align="center">
<a target="_blank" href="https://uuwaf.uusec.com/">🏠 Website</a> &nbsp; | &nbsp;
<a target="_blank" href="/README_CN.md">中文版</a>
</p>
[![GitHub stars](https://img.shields.io/github/stars/Safe3/uuWAF.svg?label=关注&nbsp;南墙&style=for-the-badge)](https://github.com/Safe3/uuWAF)
[![Chat](https://img.shields.io/badge/Discuss-加入讨论组-7289da.svg?style=for-the-badge)](https://github.com/Safe3/uuWAF/discussions)
# Introduction
> **南墙**WEB应用防火墙简称`uuWAF`一款工业级免费、高性能、高扩展支持AI和语义引擎的Web应用和API安全防护产品。它是有安科技推出的一款全方位网站防护产品率先实现了流量层、系统层、运行时层3层纵深防御功能。
[![GitHub stars](https://img.shields.io/github/stars/Safe3/uuWAF.svg?label=Follow&nbsp;uuWAF&style=for-the-badge)](https://github.com/Safe3/uuWAF)
[![Chat](https://img.shields.io/badge/Discuss-Join-7289da.svg?style=for-the-badge)](https://github.com/Safe3/uuWAF/discussions)
![](http://waf.uusec.com/_media/waf.png)
> **UUSEC WAF** Web Application Firewall is an industrial grade free, high-performance, and highly scalable web application and API security protection product that supports AI and semantic engines. It is a comprehensive website protection product launched by UUSEC Technology, which first realizes the three-layer defense function of traffic layer, system layer, and runtime layer.
🏠安装及使用请访问官网: https://waf.uusec.com/
![](http://uuwaf.uusec.com/_media/waf.png)
## :dart: 技术优势
:ophiuchus: 智能的0day防御
## :dart: Technical advantages
:ophiuchus: Intelligent 0-day defense
南墙创新性的运用机器学习技术,使用`异常检测算法`对http正常与攻击流量进行区分识别并对正常流量进行白名单威胁建模。通过`机器学习算法`自动学习正常流量中的参数特征并转化成对应的参数白名单规则库可以在面对各种突发0day漏洞时无需添加规则即可拦截攻击免除网站管理者一出现漏洞就需挑灯夜战升级的痛苦。
UUSEC WAF innovatively applies machine learning technology, using anomaly detection algorithms to distinguish and identify HTTP normal and attack traffic, and models whitelist threats to normal traffic. By using machine learning algorithms to automatically learn the parameter characteristics of normal traffic and convert them into corresponding parameter whitelist rule libraries, it is possible to intercept attacks without adding rules when facing various sudden 0-day vulnerabilities, eliminating the pain of website managers having to work late to upgrade as soon as vulnerabilities appear.
:taurus: 极致的CDN加速
:taurus: Ultimate CDN acceleration
南墙自研超越nginx商业版`proxy_cache_purge`才具备的任意缓存清理功能nginx商业版只支持*模式匹配的方式清理缓存南墙进一步支持正则表达式匹配url路径的缓存清理方式相比nginx商业版具备更高的灵活性和实用性。用户可以在享受极致CDN加速的同时更方便的解决缓存过期问题。
UUSEC self-developed cache cleaning feature surpasses the arbitrary cache cleaning function only available in the commercial version of nginx, proxy_cache_purge. The commercial version of nginx only supports * pattern matching to clean the cache, while UUSEC WAF further supports regular expression matching URL path cache cleaning, which has higher flexibility and practicality compared to the commercial version of nginx. Users can enjoy ultimate CDN acceleration while more conveniently solving cache expiration issues.
:virgo: 强大的主动防御
:virgo: Powerful proactive defense
南墙自研的主机`主动防御`和`RASP`功能可以系统层和应用运行时层实现更加强大双层防御可以有效防止0day漏洞攻击主机层主动防御可以在系统内核层拦截底层攻击如限制进程的网络通信、进程创建、文件读写、系统提权、系统溢出攻击等。运行时应用自防御RASP则插入java JVM、php Zend等运行时引擎中有效跟踪运行时上下文并拦截各种web 0day漏洞攻击。
The self-developed host 'active defense' and 'RASP' functions of UUSEC WAF can achieve more powerful dual layer defense at the system layer and application runtime layer, effectively preventing zero day vulnerability attacks. Host layer active defense can intercept low-level attacks at the system kernel layer, such as restricting process network communication, process creation, file read and write, system privilege escalation, system overflow attacks, etc. Runtime application self-defense RASP is inserted into runtime engines such as Java JVM and PHP Zend to effectively track runtime context and intercept various web 0-day vulnerability attacks.
:libra: 先进的语义引擎
:libra: Advanced semantic engine
南墙采用业界领先的`SQL、XSS、RCE、LFI` 4种基于语义分析的检测引擎结合多种深度解码引擎可对`base64、json、form-data`等HTTP内容真实还原从而有效抵御各种绕过WAF的攻击方式并且相比传统正则匹配具备准确率高、误报率低、效率高等特点管理员无需维护庞杂的规则库即可拦截多种攻击类型。
UUSEC WAF adopts four industry-leading semantic analysis based detection engines, namely SQL, XSS, RCE, and LFI. Combined with multiple deep decoding engines, it can truly restore HTTP content such as base64, JSON, and form data, effectively resisting various attack methods that bypass WAF. Compared with traditional regular matching, it has the characteristics of high accuracy, low false alarm rate, and high efficiency. Administrators do not need to maintain a complex rule library to intercept multiple types of attacks.
:gemini: 高级的规则引擎
:gemini: Advanced rule engine
南墙积极运用`nginx`和`luajit`的高性能、高灵活性特点除了提供对普通用户友好性较好的传统规则创建模式还提供了高扩展性、高灵活性的lua脚本规则编写功能使得有一定编程功底的高级安全管理员可以创造出一系列传统WAF所不能实现的高级漏洞防护规则用户可以编写一系列插件来扩展WAF现有功能。从而使得在拦截一些复杂漏洞时可以更加得心应手。
UUSEC WAF actively utilizes the high-performance and highly flexible features of nginx and luajit. In addition to providing a traditional rule creation mode that is user-friendly for ordinary users, it also offers a highly scalable and flexible Lua script rule writing function, allowing advanced security administrators with certain programming skills to create a series of advanced vulnerability protection rules that traditional WAF cannot achieve. Users can write a series of plugins to extend the existing functions of WAF. This makes it easier to intercept complex vulnerabilities.
## :rocket: 一键安装
## :rocket: Installation
南墙为你提供了强大灵活的扩展和安全规则的编写API在管理后台发布后所有规则无需重启立即生效远超市面上大部分免费WAF产品如`ModSecurity`,规则展示如下:
UUSEC WAF provides you with a powerful and flexible API for extending and writing security rules. After being published in the management backend, all rules take effect immediately without restarting, far exceeding most free WAF products on the market such as ModSecurity. The rules are shown below:
![](http://waf.uusec.com/_media/rule.png)
![](http://uuwaf.uusec.com/_media/rule.png)
🏠请访问官网: https://waf.uusec.com/ 下载 南墙WAF使用说明书 了解规则API详情
🏠Please visit the official website to see more details: https://uuwaf.uusec.com/
南墙安装及其简便,通常在几分钟内即可安装完毕,具体耗时视网络下载情况而定。
The installation of the UUSEC WAF is very simple, usually completed within a few minutes, and the specific time depends on the network download situation.
注意请尽量选择一台纯净Linux x86_64环境的服务器安装因为安装过程会卸载旧的MySQL数据库并重新安装如果没有备份可造成旧的MySQL数据丢失并且南墙采用云WAF反向代理模式默认需要使用80、443端口。
Attention: Please try to choose a pure Linux x86_64 environment server for installation, as the installation process will uninstall the old MySQL database and reinstall it. If there is no backup, it may cause the loss of old MySQL data. In addition, the UUSEC WAF adopts cloud WAF reverse proxy mode, which requires the use of ports 80 and 443 by default.
> 主机版安装方式如下:
> The host version installation:
- System requirements: RHEL 7 and above are compatible with x86_64 systems, such as CentOS, Rocky Linux, AlmaLinux, etc.
系统要求RHEL 7及以上兼容x86_64系统如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。
```bash
sudo yum install -y ca-certificates
curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
curl https://uuwaf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
```
安装成功后会显示 “ 恭喜您,安装成功!”
After successful installation, it will display "Congratulations, successful installation".
> Docker版安装方式如下
> The docker version installation
- 软件依赖Docker 20.10.14 版本以上Docker Compose 2.0.0 版本以上低版本会导致sql数据无法导入以致南墙后台无法登录。
- Software dependencies: Docker version 20.10.14 or above, Docker Compose version 2.0.0 or above, lower versions may cause SQL data to be unable to be imported, resulting in login issues in the UUSEC WAF management.
若遇到无法自动安装Docker Engine请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装。
If you encounter the inability to automatically install Docker Engine, please install it manually.
```bash
curl https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
curl https://uuwaf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
```
后续可直接执行 `bash ./waf/uuwaf.sh` 来管理南墙容器,包括启动、停止、更新、卸载等。
Subsequently, `bash ./waf/uuwaf.sh` is used to manage the South Wall container, including starting, stopping, updating, uninstalling, etc.
> 快速入门:
> Quick Start:
1. 登录后台访问https://ip:4443 ip为安装南墙的服务器ip地址用户名admin密码Passw0rd!。
1. Login to the management: Access https://ip:4443 ,the IP address is the server IP address for installing the UUSEC WAF, the default username is "admin", and the default password is "Passw0rd!".
2. Add a site: Go to the "Site" menu, click the "Add Site" button, and follow the prompts to add the site domain name and website server IP.
3. Add SSL certificate: Go to the certificate management menu, click the "Add Certificate" button, and upload the HTTPS certificate and private key file of the domain name. If you do not add an SSL certificate, the UUSEC WAF will automatically attempt to apply for a Let's Encrypt free SSL certificate and renew it automatically before the certificate expires.
4. Change the DNS address of the domain: Go to the domain name service provider's management backend and change the IP address recorded in the DNS A of the domain name to the IP address of the UUSEC WAF server.
5. Test connectivity: Visit the site domain to see if the website can be opened, and check if the returned HTTP header server field is uuWAF.
2. 添加站点进入站点管理菜单点击添加站点按钮按提示添加站点域名与网站服务器ip。
3. 添加TLS证书进入证书管理菜单点击添加证书按钮上传第二步中域名的https证书和私钥文件。若不添加SSL证书则南墙会自动尝试申请Let's Encrypt免费SSL证书并在证书到期前自动续期。
4. 修改域名DNS指向到域名服务商管理后台把域名DNS A记录的ip地址改为南墙服务器ip地址。
5. 测试连通性访问站点域名查看网站是否能够打开查看返回的http header头server字段是否为uuWAF。
更多使用过程中碰到问题的解决办法请参考[常见问题](https://waf.uusec.com/#/guide/problems)。
For more solutions to problems encountered during use, please refer to [FAQ](https://uuwaf.uusec.com/#/guide/problems).
## :gift_heart: 贡献名单
## :gift_heart: Contribution List
如何贡献?参照: https://waf.uusec.com/#/guide/contribute
How to contribute? reference: https://uuwaf.uusec.com/#/guide/contribute
这里感谢puhui222、Kingdom、[k4n5ha0](https://github.com/k4n5ha0)为南墙所做的贡献!
<img src="https://waf.uusec.com/_media/sponsor.jpg" alt="捐赠" height="300px" />
Thank you to puhui222, Kingdom, and k4n5ha0 for the contribution made to the UUSEC WAF!
## :kissing_heart: 加入讨论
## :kissing_heart: Join the discussion
欢迎各位就 南墙 的各种bug或功能需求及使用问题在如下渠道参与讨论
- 问题提交https://github.com/Safe3/uuWAF/issues
- 讨论社区https://github.com/Safe3/uuWAF/discussions
- 官方 QQ 群11500614
- 官方微信群:微信扫描以下二维码加入
<img src="https://waf.uusec.com/_media/weixin.jpg" alt="微信群" height="200px" />
Welcome to participate in discussions on various bugs, functional requirements, and usage issues related to the UUSEC WAF through the following channels:
- Problem submission: https://github.com/Safe3/uuWAF/issues
- Discussion Community: https://github.com/Safe3/uuWAF/discussions

110
README_CN.md Normal file
View File

@ -0,0 +1,110 @@
# 南墙简介
[![GitHub stars](https://img.shields.io/github/stars/Safe3/uuWAF.svg?label=关注&nbsp;南墙&style=for-the-badge)](https://github.com/Safe3/uuWAF)
[![Chat](https://img.shields.io/badge/Discuss-加入讨论组-7289da.svg?style=for-the-badge)](https://github.com/Safe3/uuWAF/discussions)
> **南墙**WEB应用防火墙简称`uuWAF`一款工业级免费、高性能、高扩展支持AI和语义引擎的Web应用和API安全防护产品。它是有安科技推出的一款全方位网站防护产品率先实现了流量层、系统层、运行时层3层纵深防御功能。
![](http://waf.uusec.com/_media/waf.png)
🏠安装及使用请访问官网: https://waf.uusec.com/
## :dart: 技术优势
:ophiuchus: 智能的0day防御
南墙创新性的运用机器学习技术,使用`异常检测算法`对http正常与攻击流量进行区分识别并对正常流量进行白名单威胁建模。通过`机器学习算法`自动学习正常流量中的参数特征并转化成对应的参数白名单规则库可以在面对各种突发0day漏洞时无需添加规则即可拦截攻击免除网站管理者一出现漏洞就需挑灯夜战升级的痛苦。
:taurus: 极致的CDN加速
南墙自研超越nginx商业版`proxy_cache_purge`才具备的任意缓存清理功能nginx商业版只支持*模式匹配的方式清理缓存南墙进一步支持正则表达式匹配url路径的缓存清理方式相比nginx商业版具备更高的灵活性和实用性。用户可以在享受极致CDN加速的同时更方便的解决缓存过期问题。
:virgo: 强大的主动防御
南墙自研的主机`主动防御`和`RASP`功能可以系统层和应用运行时层实现更加强大双层防御可以有效防止0day漏洞攻击主机层主动防御可以在系统内核层拦截底层攻击如限制进程的网络通信、进程创建、文件读写、系统提权、系统溢出攻击等。运行时应用自防御RASP则插入java JVM、php Zend等运行时引擎中有效跟踪运行时上下文并拦截各种web 0day漏洞攻击。
:libra: 先进的语义引擎
南墙采用业界领先的`SQL、XSS、RCE、LFI` 4种基于语义分析的检测引擎结合多种深度解码引擎可对`base64、json、form-data`等HTTP内容真实还原从而有效抵御各种绕过WAF的攻击方式并且相比传统正则匹配具备准确率高、误报率低、效率高等特点管理员无需维护庞杂的规则库即可拦截多种攻击类型。
:gemini: 高级的规则引擎
南墙积极运用`nginx`和`luajit`的高性能、高灵活性特点除了提供对普通用户友好性较好的传统规则创建模式还提供了高扩展性、高灵活性的lua脚本规则编写功能使得有一定编程功底的高级安全管理员可以创造出一系列传统WAF所不能实现的高级漏洞防护规则用户可以编写一系列插件来扩展WAF现有功能。从而使得在拦截一些复杂漏洞时可以更加得心应手。
## :rocket: 一键安装
南墙为你提供了强大灵活的扩展和安全规则的编写API在管理后台发布后所有规则无需重启立即生效远超市面上大部分免费WAF产品如`ModSecurity`,规则展示如下:
![](http://waf.uusec.com/_media/rule.png)
🏠请访问官网: https://waf.uusec.com/ 下载 南墙WAF使用说明书 了解规则API详情
南墙安装及其简便,通常在几分钟内即可安装完毕,具体耗时视网络下载情况而定。
注意请尽量选择一台纯净Linux x86_64环境的服务器安装因为安装过程会卸载旧的MySQL数据库并重新安装如果没有备份可造成旧的MySQL数据丢失并且南墙采用云WAF反向代理模式默认需要使用80、443端口。
> 主机版安装方式如下:
系统要求RHEL 7及以上兼容x86_64系统如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。
```bash
sudo yum install -y ca-certificates
curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
```
安装成功后会显示 “ 恭喜您,安装成功!”
> Docker版安装方式如下
- 软件依赖Docker 20.10.14 版本以上Docker Compose 2.0.0 版本以上低版本会导致sql数据无法导入以致南墙后台无法登录。
若遇到无法自动安装Docker Engine请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装。
```bash
curl https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
```
后续可直接执行 `bash ./waf/uuwaf.sh` 来管理南墙容器,包括启动、停止、更新、卸载等。
> 快速入门:
1. 登录后台访问https://ip:4443 ip为安装南墙的服务器ip地址用户名admin密码Passw0rd!。
2. 添加站点进入站点管理菜单点击添加站点按钮按提示添加站点域名与网站服务器ip。
3. 添加TLS证书进入证书管理菜单点击添加证书按钮上传第二步中域名的https证书和私钥文件。若不添加SSL证书则南墙会自动尝试申请Let's Encrypt免费SSL证书并在证书到期前自动续期。
4. 修改域名DNS指向到域名服务商管理后台把域名DNS A记录的ip地址改为南墙服务器ip地址。
5. 测试连通性访问站点域名查看网站是否能够打开查看返回的http header头server字段是否为uuWAF。
更多使用过程中碰到问题的解决办法请参考[常见问题](https://waf.uusec.com/#/guide/problems)。
## :gift_heart: 贡献名单
如何贡献?参照: https://waf.uusec.com/#/guide/contribute
这里感谢puhui222、Kingdom、[k4n5ha0](https://github.com/k4n5ha0)为南墙所做的贡献!
<img src="https://waf.uusec.com/_media/sponsor.jpg" alt="捐赠" height="300px" />
## :kissing_heart: 加入讨论
欢迎各位就 南墙 的各种bug或功能需求及使用问题在如下渠道参与讨论
- 问题提交https://github.com/Safe3/uuWAF/issues
- 讨论社区https://github.com/Safe3/uuWAF/discussions
- 官方 QQ 群11500614
- 官方微信群:微信扫描以下二维码加入
<img src="https://waf.uusec.com/_media/weixin.jpg" alt="微信群" height="200px" />

View File

@ -12,7 +12,7 @@
services:
uuwaf:
image: swr.ap-southeast-1.myhuaweicloud.com/uusec/nanqiang:latest
image: swr.ap-southeast-1.myhuaweicloud.com/uusec/uuwaf:latest
ulimits:
nproc: 65535
nofile:
@ -28,9 +28,9 @@ services:
- "4443:4443"
volumes:
- wafshared:/uuwaf
- /etc/localtime:/etc/localtime:ro
command: ["/run.sh"]
environment:
- TZ=Asia/Shanghai
- UUWAF_MYSQL_PASSWORD=Safe3.WAF
links:
@ -48,9 +48,9 @@ services:
volumes:
- wafshared:/docker-entrypoint-initdb.d
- wafdata:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
#- ./low-memory-my.cnf:/etc/mysql/my.cnf
environment:
- TZ=Asia/Shanghai
- INIT_ROCKSDB
- MYSQL_MAX_CONNECTIONS=512
- MYSQL_ROOT_PASSWORD=Safe3.WAF

View File

@ -1,18 +1,21 @@
环境要求:
Docker 20.10.14 版本以上Docker Compose 2.0.0 版本以上
Environmental requirements:
Docker 20.10.14 or above, Docker Compose 2.0.0 or above
解压南墙安装包:
Decompression UUSEC WAF Installation Package:
tar -zxf waf.tgz && cd waf
若服务器内存有限可以取消docker-compose.yml中如下注释中的#号降低mysql内存占用
If the server memory is limited, you can remove the # sign in the following comments in docker-compose.yml to reduce MySQL memory usage:
#- ./low-memory-my.cnf:/etc/mysql/my.cnf
南墙Docker管理执行如下面命令根据提示启动南墙docker服务
UUSEC WAF docker management: Execute the following command and start the UUSEC WAF Docker service according to the prompts
bash uuwaf.sh
快速入门:
1、登录后台访问https://wafip:4443wafip为安装南墙的服务器ip用户名admin密码Passw0rd!
2、添加站点进入站点管理菜单点击添加站点按钮按提示添加站点域名与网站服务器ip
3、添加SSL证书进入证书管理菜单点击添加证书按钮上传第二步中域名的https证书和私钥文件。若不添加SSL证书则南墙会自动尝试申请Let's Encrypt免费SSL证书并在证书到期前自动续期
4、将域名DNS的ip指向改为南墙服务器ip地址
5、访问站点域名查看网站是否能够访问
Quick Start:
1. Login to the management: Access https://ip:4443 ,the IP address is the server IP address for installing the UUSEC WAF, the default username is "admin", and the default password is "Passw0rd!".
2. Add a site: Go to the "Site" menu, click the "Add Site" button, and follow the prompts to add the site domain name and website server IP.
3. Add SSL certificate: Go to the certificate management menu, click the "Add Certificate" button, and upload the HTTPS certificate and private key file of the domain name. If you do not add an SSL certificate, the UUSEC WAF will automatically attempt to apply for a Let's Encrypt free SSL certificate and renew it automatically before the certificate expires.
4. Change the DNS address of the domain: Go to the domain name service provider's management backend and change the IP address recorded in the DNS A of the domain name to the IP address of the UUSEC WAF server.
5. Test connectivity: Visit the site domain to see if the website can be opened, and check if the returned HTTP header server field is uuWAF.

18
docker/readme_CN.txt Normal file
View File

@ -0,0 +1,18 @@
环境要求:
Docker 20.10.14 版本以上Docker Compose 2.0.0 版本以上
解压南墙安装包:
tar -zxf waf.tgz && cd waf
若服务器内存有限可以取消docker-compose.yml中如下注释中的#号降低mysql内存占用
#- ./low-memory-my.cnf:/etc/mysql/my.cnf
南墙Docker管理执行如下面命令根据提示启动南墙docker服务
bash uuwaf.sh
快速入门:
1、登录后台访问https://wafip:4443wafip为安装南墙的服务器ip用户名admin密码Passw0rd!
2、添加站点进入站点管理菜单点击添加站点按钮按提示添加站点域名与网站服务器ip
3、添加SSL证书进入证书管理菜单点击添加证书按钮上传第二步中域名的https证书和私钥文件。若不添加SSL证书则南墙会自动尝试申请Let's Encrypt免费SSL证书并在证书到期前自动续期
4、将域名DNS的ip指向改为南墙服务器ip地址
5、访问站点域名查看网站是否能够访问

0
docs-cn/.nojekyll Normal file
View File

440
docs-cn/CHANGELOG.md Normal file
View File

@ -0,0 +1,440 @@
## [6.2.0](https://github.com/Safe3/uuWAF/compare/v6.2.0...v6.1.0) (2024-11-26)
### 功能更新
- 全面支持ipv6网络地址放开上游和ip白名单的ipv6地址限制
- 升级南墙滑动旋转图片人机验证功能支持无cookie模式和次数限制
- 新增Cloudflare Turnstile人机验证功能提供waf.checkTurnstile函数
## [6.1.0](https://github.com/Safe3/uuWAF/compare/v6.1.0...v6.0.0) (2024-11-17)
### 功能更新
- 新增日志写数据库开关使用kafka日志功能时可关闭写数据库
- 升级ip地理位置数据库支持多语言和ipv6地址查询
- 优化升级规则库,降低误报并提升拦截率
- 机器学习功能去掉对js、css图片等静态资源的AI规则学习
- 优化配置,合并/uuwaf/conf/uuwaf.conf中部分配置到config.json中
- CDN新增支持断点续传文件如视频等文件的缓存加速
## [6.0.0](https://github.com/Safe3/uuWAF/compare/v6.0.0...v5.5.0) (2024-11-01)
### 功能更新
- 新增多用户权限隔离功能,操作员只能管理自己创建的站点和规则
- CDN加速功能支持自动匹配站点管理中的通配符站点
- 南墙管理后台TLSv1.2不再支持3DES提升传输安全性
- 支持在管理后台系统信息中查看收费版授权到期时间
## [5.5.0](https://github.com/Safe3/uuWAF/compare/v5.5.0...v5.4.0) (2024-10-22)
### 功能更新
- 优化数据脱敏代码逻辑,提升处理效率
- 用户管理禁止删除自己,防止误删后无法登录
- 禁止修改规则时修改处理阶段,防止规则不生效
- 优化安装脚本进一步提升Linux系统兼容性
## [5.4.0](https://github.com/Safe3/uuWAF/compare/v5.4.0...v5.3.0) (2024-09-29)
### 功能更新
- 升级配置同步机制,提升性能并降低数据库资源消耗
- 升级XSS语义检测引擎进一步降低误报
- 升级ip地理位置数据库提升位置准确性
- 调整日志默认查询数量,大幅提升日志高级查询速度
- 上传文件名过滤增强新增htmlentity解码
- 新增log.utf8、log.getReq等多个api函数
- 优化安装脚本提升Linux系统兼容性
## [5.3.0](https://github.com/Safe3/uuWAF/compare/v5.3.0...v5.2.0) (2024-08-29)
### 功能更新
* 新增http返回内容替换功能[waf.replaceFilter](https://waf.uusec.com/#/api/README?id=wafreplacefilter),可以用于数据脱敏或敏感词替换等场景
* 新增waf.rgxGmatch、waf.rgxSub、waf.rgxGsub、waf.errLog正则匹配替换和错误日志记录函数
* 优化部分代码,进一步提升南墙过滤处理性能
## [5.2.0](https://github.com/Safe3/uuWAF/compare/v5.2.0...v5.1.1) (2024-08-08)
### 功能更新
* 新增负载均衡有多台上游服务器时,一台上游出现故障时会自动请求下一上游服务器
* 南墙自动申请并托管的免费证书,加入中间证书链,避免某些证书监控软件提示
* 去掉旧TLSv1 TLSv1.1的兼容现在默认只支持TLSv1.2 TLSv1.3提升SSL传输安全性
### 问题修复
* 修复部分规则在特殊情况下的报错问题
* 升级docker管理脚本和compose文件解决卸载不干净和南墙服务先于数据库启动的问题
## [5.1.1](https://github.com/Safe3/uuWAF/compare/v5.1.1...v5.1.0) (2024-07-30)
### 问题修复
* 修复密码错误5次锁定时间到期后不能解锁的问题
## [5.1.0](https://github.com/Safe3/uuWAF/compare/v5.1.0...v5.0.0) (2024-07-26)
### 功能更新
* 新增ip威胁情报功能并开源威胁情报插件
* 管理员修改普通用户不再需要旧密码和otp
* 新增删除默认admin账号安全提示
* 系统信息页界面优化调整
## [5.0.0](https://github.com/Safe3/uuWAF/compare/v5.0.0...v4.5.0) (2024-07-24)
### 功能更新
* 新增密码复杂度和过期安全策略,过等保三级
* 新增负载均衡平滑加权轮询SWRR模式
* 升级机器学习引擎不再依赖python
* 升级语义检测引擎,检测更多攻击
## [4.5.0](https://github.com/Safe3/uuWAF/compare/v4.5.0...v4.4.1) (2024-06-16)
### 功能更新
* 优化精简规则BlazeHTTP防护效果测试对比登顶No.1
* 升级语义检测引擎
* 优化UI界面展示
* 支持对返回类型为Transfer-Encoding: chunked的body内容过滤
## [4.4.1](https://github.com/Safe3/uuWAF/compare/v4.4.1...v4.3.0) (2024-06-04)
### 功能更新
* 优化UI界面展示
* 调整waf.block函数和持续攻击封禁功能观察模式时不再拦截
* 优化waf_stats更新语句
* 新增按国家、地区进行ip拦截的高级规则
### 问题修复
* 修复获取ipv6地理位置时产生系统报错日志问题
* 解决某些负载均衡设备X-Forwarded-For不规范导致的不能正确获取ip的问题
## [4.3.0](https://github.com/Safe3/uuWAF/compare/v4.3.0...v4.2.0) (2024-04-28)
### 功能更新
* 新增系统备份的备份恢复功能
* 优化sql、xss、rce、lfi规则
* 优化南墙过滤引擎和性能
### 问题修复
* 升级cjson依赖库解决CVE-2022-24834漏洞
* 修复若干内存泄露问题
## [4.2.0](https://github.com/Safe3/uuWAF/compare/v4.2.0...v4.1.0) (2024-04-22)
### 功能更新
* 日志显示页面UI美化
* 对未在南墙站点管理中配置的域名访问返回拦截页面
* 对无值参数值为true调整为空字符串
* 进一步优化南墙处理性能
### 问题修复
* 修复gzip页面解压失败导致返回页面过滤失败的问题
* ACME免费证书申请不再处理ip类证书申请
## [4.1.0](https://github.com/Safe3/uuWAF/compare/v4.1.0...v4.0.1) (2024-04-16)
### 功能更新
* 插件功能新增SSL处理阶段并将原各阶段函数细分为pre、post前后两个小阶段
* 新增日志刷新按钮
* 优化固件升级判断逻辑
## [4.0.1](https://github.com/Safe3/uuWAF/compare/v4.0.1...v3.3.3) (2024-04-10)
### 功能更新
* 新增免费SSL证书自动申请和续期功能
* 优化登录过期提示
* 优化并发数据库查询
### 问题修复
* 修复开启缓存后Range头不能传到后端引起的视频播放不能快进的问题
* 修复规则管理中返回HTTP头、返回页面阶段自定义普通规则不生效的问题
## [3.3.3](https://github.com/Safe3/uuWAF/compare/v3.3.3...v3.0.1) (2024-03-27)
### 功能更新
* 新增一键升级功能,便于固件版本升级
* 新增检测循环代理避免127.0.0.1等死循环
* 新增默认开启gzip压缩功能
* 升级ip地理位置库位置更加精准
* 新增waf.ip2loc函数用于将ip转换为地理位置便于按地理位置封锁ip
* 自定义拦截页面限定为html类型
### 问题修复
* 修复机器人检测规则默认频率过小的问题
* 修复管理后台打开侧边栏固定后,页面不能显示的问题
## [3.0.1](https://github.com/Safe3/uuWAF/compare/v3.0.1...v2.8.0) (2024-01-27)
### 功能更新
* 语义引擎升级至2.0增强检测能力并支持相关api设置检测严格等级
* 升级过滤引擎支持对不常见或异常的content-type自定义是否拦截
* 新增从自定义请求头中获取访客真实ip方便多层代理时获取客户端ip
* 大幅优化多项南墙安全过滤规则,减少误报和提升检出率
### 问题修复
* 修复南墙管理后台在数据渲染失败时图表弹出的getContext错误提示
## [2.8.0](https://github.com/Safe3/uuWAF/compare/v2.8.0...v2.7.0) (2024-01-11)
### 新增功能
* 升级南墙滑动旋转验证码功能解决被CDN缓存或IP变动引起的不能显示或验证失败问题
* 主机版支持openEuler华为欧拉系统和国内几大云操作系统安装
* 优化默认数据库连接数,避免日志写入频繁时导致的数据库连接数不够用问题
### Bug 修复
* 解决南墙主机版某些系统数据库安装失败的问题
## [2.7.0](https://github.com/Safe3/uuWAF/compare/v2.7.0...v2.6.1) (2024-01-05)
### 新增功能
* 高级规则采用沙箱保护,阻止执行恶意规则
* 新增多个api变量和函数
* 升级多条高级规则
* 升级多个组件版本nginx版本v1.24、OpenSSL版本v1.1.1w
### Bug 修复
* 修复南墙api函数waf.pmMatch匹配失效的问题
* 修复不同时区日期显示问题
## [2.6.1](https://github.com/Safe3/uuWAF/compare/v2.6.1...v2.6.0) (2023-09-04)
### 新增功能
* 支持*域名代表所有域名,简化所有网站位于相同服务器的配置
* 优化南墙语义检测引擎检测逻辑
* 优化南墙安装和Docker管理脚本对异常进行处理
## [2.6.0](https://github.com/Safe3/uuWAF/compare/v2.6.0...v2.5.1) (2023-08-26)
### 新增功能
* 南墙安全验证X-Waf-Token 支持js读取
* 增强南墙语义检测引擎
* Docker版支持一键更新升级
### Bug 修复
* 修复南墙语义检测引擎在某些情况下core dump的问题
## [2.5.1](https://github.com/Safe3/uuWAF/compare/v2.5.1...v2.4.1) (2023-07-04)
### 新增功能
* 新增查看攻击日志请求报文功能
* 优化tls传输兼容性支持TLS v1
* 优化sql注入和命令执行语义引擎
* 优化系统备份功能
## [2.4.1](https://github.com/Safe3/uuWAF/compare/v2.4.1...v2.3.0) (2023-05-30)
### 新增功能
* 新增系统配置备份功能
* 新增一键解封被封禁的ip功能
* 新增南墙安全验证X-Waf-Token head头验证功能
### Bug 修复
* 修复使用waf.block函数后产生系统报错日志的问题
* 解决部分XSS检测误报的问题
* 解决Docker版南墙在某些系统出现Unix syslog delivery error错误不能运行的问题
## [2.3.0](https://github.com/Safe3/uuWAF/compare/v2.3.0...v2.2.0) (2023-04-28)
### 新增功能
* 新增CDN缓存加速功能支持业内首创的高灵活度正则匹配任意条件实时缓存清理功能。
## [2.2.0](https://github.com/Safe3/uuWAF/compare/v2.2.0...v2.1.5) (2023-03-22)
### 新增功能
* 新增滑动旋转验证码功能可用于各种拦截机器人攻击如网络爬虫、业务风控、cc拒绝服务攻击等
* 新增安全日志、审计日志报表功能可将日志导出为Excel报表
* 新增并优化多个安全规则包括机器人攻击防御、http重定向https等
* 优化WAF配置减少内存占用
* 优化WAF管理后台界面功能展示
### Bug 修复
* 修复某些网站返回http头过大导致的502、504问题
* 修复某些网站非utf-8编码且未设置Content-Type头导致网页乱码的问题
## [2.1.5](https://github.com/Safe3/uuWAF/compare/v2.1.5...v2.1.2) (2022-12-31)
### Bug 修复
* 修复某些情况下弱口令匹配不生效的问题
* 使用安装包进行安装时对不支持的操作系统进行提示如ubuntu或debian
### 新增变更
* 支持text/plain类型的POST请求和返回内容的安全过滤处理
* 支持UTF-8编码正则匹配
* 提升WAF性能默认不再过滤base64内容可以单独定义规则来支持
## [2.1.2](https://github.com/Safe3/uuWAF/compare/v2.1.2...v1.9.3) (2022-11-11)
### Bug 修复
* 修复日志管理功能Url过长时日志显示不全的问题
* 修复在selinux开启时WAF服务进程不能正常启动的问题
### 新增变更
* 增强默认安装初始化数据库密码、JWT密钥安全性随机化生成
* 升级OpenSSL组件到最新1.1.1s版
## [1.9.3](https://github.com/Safe3/uuWAF/compare/v1.9.3...v1.9.0) (2022-10-10)
### Bug 修复
* 修复删除日志时,时间格式识别错误的问题
* 修复没有安全日志时,首页显示提示错误的问题
### 新增功能
* 支持更多RedHat系操作系统如CentOS、AlmaLinux、Anolis、Rocky Linux等
* 增强安装稳定性和性能数据库升级到8.x版本
## [1.9.0](https://github.com/Safe3/uuWAF/compare/v1.9.0...v1.8.1) (2022-09-22)
### Bug 修复
* 无
### 新增功能
* 支持WAF扩展插件

1
docs-cn/CNAME Normal file
View File

@ -0,0 +1 @@
waf.uusec.com

11
docs-cn/_coverpage.md Normal file
View File

@ -0,0 +1,11 @@
# 南墙Web应用防火墙
***不撞南墙不回头***
一款工业级免费、高性能、高扩展支持AI和语义引擎的Web应用和API安全防护产品
[<i class="iconfont icon-github"></i> 进入社区](https://github.com/Safe3/uuWAF)
[马上开始 <i class="iconfont icon-down"></i>](#main)
<!-- background image -->
![](_media/2.png)

BIN
docs-cn/_media/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

39
docs-cn/_media/custom.css Normal file
View File

@ -0,0 +1,39 @@
article img.sd {
display: block;
box-shadow: 0 3px 15px 3px rgba(40, 40, 40, 0.5);
margin-top: 20px;
border-radius: 5px;
}
article h2 img.emoji {
height: 1.75rem;
}
section.cover.has-mask .mask {
opacity: 0;
height: 100vh;
width: 100vw;
}
section.cover p {
color: var(--theme-color);
}
section.cover h1 .anchor span {
font-family: 'Lobster', cursive;
color: var(--theme-color);
}
section.cover .cover-main>p:last-child a .iconfont {
font-size: 1em;
}
.sidebar>h1 a {
font-family: 'Lobster', cursive;
}
p img.pic {
display: block;
margin: 0 auto;
width: 500px;
}

File diff suppressed because one or more lines are too long

1
docs-cn/_media/docsify.min.js vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

111
docs-cn/_media/font.css Normal file

File diff suppressed because one or more lines are too long

216
docs-cn/_media/g-font.css Normal file
View File

@ -0,0 +1,216 @@
/* cyrillic-ext */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
src: url(/_media/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_SeW4Ep0.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
src: url(/_media/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_QOW4Ep0.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
src: url(/_media/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_R-W4Ep0.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
src: url(/_media/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_S-W4Ep0.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
src: url(/_media/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_SuW4Ep0.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
src: url(/_media/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW4.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhduz8A.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxduz8A.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxduz8A.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBduz8A.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBduz8A.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRduz8A.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 300;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lqDY.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lqDY.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lqDY.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lqDY.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lqDY.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: url(/_media/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhduz8A.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxduz8A.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxduz8A.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBduz8A.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBduz8A.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRduz8A.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 600;
src: url(/_media/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 226 KiB

1
docs-cn/_media/prism-bash.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
docs-cn/_media/prism-lua.min.js vendored Normal file
View File

@ -0,0 +1 @@
Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/};

1
docs-cn/_media/prism-markdown.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
docs-cn/_media/rule.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
docs-cn/_media/rule0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

1
docs-cn/_media/search.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
docs-cn/_media/sponsor.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

1
docs-cn/_media/vue.css Normal file

File diff suppressed because one or more lines are too long

BIN
docs-cn/_media/waf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

View File

Before

Width:  |  Height:  |  Size: 259 KiB

After

Width:  |  Height:  |  Size: 259 KiB

4
docs-cn/_navbar.md Normal file
View File

@ -0,0 +1,4 @@
- [主站](https://www.uusec.com/)
- [指南](/#main)
- [API](/api/README.md)
- [博客](https://blog.uusec.com/)

647
docs-cn/api/README.md Normal file
View File

@ -0,0 +1,647 @@
## :grapes: 规则
?>这里对规则所用到的一些变量和相关函数进行说明更多规则编写方法请大家参照WAF管理后台中的规则管理当中的众多实际例子。规则模板见https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua 一条防cc攻击的安全规则。欢迎各位贡献安全规则详情见https://waf.uusec.com/#/guide/contribute 。
### 规则示例
```lua
--[[
规则名称: anti cc
过滤阶段: 请求阶段
危险等级: 中危
规则描述: 当一分钟访问/api/路径频率超过360次则在5分钟内拦截该ip访问
--]]
if not waf.startWith(waf.toLower(waf.uri), "/api/") then
return false
end
local sh = waf.ipCache
local ccIp = 'cc-' .. waf.ip
local c, f = sh:get(ccIp)
if not c then
sh:set(ccIp, 1, 60, 1) -- 设置1分钟也就是60秒访问计数时间
else
if f == 2 then
return waf.block(true) -- 重置TCP连接不记录日志
end
sh:incr(ccIp, 1)
if c + 1 >= 360 then -- 频率超过360次
sh:set(ccIp, c + 1, 300, 2) -- 设置5分钟也就是300秒拦截时间
return true, ccIp, true -- 返回参数第一个true为是否检测到第二个参数ccIp为日志记录内容第三个参数true表示拦截false表示只记录不拦截
end
end
return false
```
### 规则变量
#### 请求阶段变量
##### waf.ip
- 类型: ``string``
- 默认值: ``客户端访问ip``
- 用法: 只读用于获取客户端访问ip可以在WAF后台站点管理中配置客户端ip来源获取方式为Socket或X-Forwarded-For中的倒序第n个ip。
##### waf.scheme
- 类型: ``string``
- 默认值: ``客户端访问http协议值为字符串http或https``
- 用法: 只读。
##### waf.httpVersion
- 类型: ``number``
- 默认值: ``http协议版本值为1.0、1.1、2.0、3.0``
- 用法: 只读。
##### waf.host
- 类型: ``string``
- 默认值: ``客户端访问host头``
- 用法: 只读。
##### waf.ipBlock
- 类型: ``table``
- 默认值: ``键值存储库用于存放已拦截的客户端ip``
- 用法: 见ngx.shared.DICT。
##### waf.ipCache
- 类型: ``table``
- 默认值: ``键值存储库用于存放访问的客户端ip``
- 用法: 见ngx.shared.DICT。
##### waf.requestLine
- 类型: ``string``
- 默认值: ``原始的request line数据``
- 用法: 只读。
##### waf.uri
- 类型: ``string``
- 默认值: ``解码处理过的URI不带参数``
- 用法: 只读。
##### waf.method
- 类型: ``string``
- 默认值: ``请求方法``
- 用法: 只读。
##### waf.reqUri
- 类型: ``string``
- 默认值: ``原始URI带参数``
- 用法: 只读。
##### waf.userAgent
- 类型: ``string``
- 默认值: ``客户端请求的User-Agent头数据``
- 用法: 只读。
##### waf.referer
- 类型: ``string``
- 默认值: ``客户端请求的Referer头数据``
- 用法: 只读。
##### waf.reqContentType
- 类型: ``string``
- 默认值: ``客户端请求的Content-Type头数据``
- 用法: 只读。
##### waf.XFF
- 类型: ``string``
- 默认值: ``客户端请求的X-Forwarded-For头数据``
- 用法: 只读。
##### waf.origin
- 类型: ``string``
- 默认值: ``客户端请求的Origin头数据``
- 用法: 只读。
##### waf.reqHeaders
- 类型: ``table``
- 默认值: ``请求的所有header对象``
- 用法: 只读。
##### waf.hErr
- 类型: ``string``
- 默认值: ``请求header解析出错信息``
- 用法: 只读。
##### waf.isQueryString
- 类型: ``bool``
- 默认值: ``true或false``
- 用法: 只读,是否存在请求参数。
##### waf.reqContentLength
- 类型: ``number``
- 默认值: ``0``
- 用法: 只读请求body内容长度整数值。
##### waf.queryString
- 类型: ``table``
- 默认值: ``请求url参数key、value``
- 用法: 只读。
##### waf.qErr
- 类型: ``string``
- 默认值: ``请求参数解析出错信息``
- 用法: 只读。
##### waf.form
- 类型: ``table``
- 默认值: ``请求body对象``
- 用法: 只读。
##### waf.form["RAW"]
- 类型: ``string``
- 默认值: ``请求body的原始数据``
- 用法: 只读。
##### waf.form["FORM"]
- 类型: ``table``
- 默认值: ``请求body参数key、value``
- 用法: 只读,表单如: {uid="12",vid={[1]="select",[2]="a from b"}}。
##### waf.form["FILES"]
- 类型: ``table``
- 默认值: ``解析出的请求body中上传文件信息``
- 用法: 只读,文件信息如: {name={[1]="filename",[2]="file content"}}。
##### waf.fErr
- 类型: ``string``
- 默认值: ``解析请求body出错信息``
- 用法: 只读,一般是恶意畸形请求包。
##### waf.cookies
- 类型: ``table``
- 默认值: ``请求cookie参数key、value``
- 用法: 只读。
##### waf.cErr
- 类型: ``string``
- 默认值: ``解析请求cookie出错信息``
- 用法: 只读。
#### 返回http头阶段新增变量
##### waf.status
- 类型: ``number``
- 默认值: ``返回http状态整数值``
- 用法: 只读。
##### waf.respHeaders
- 类型: ``table``
- 默认值: ``返回的所有header对象key、value``
- 用法: 只读。
##### waf.respContentLength
- 类型: ``number``
- 默认值: ``返回body内容长度整数值``
- 用法: 只读。
##### waf.respContentType
- 类型: ``string``
- 默认值: ``服务端返回的Content-Type头数据``
- 用法: 只读。
#### 返回页面阶段新增变量
##### waf.respBody
- 类型: ``string``
- 默认值: ``返回body页面内容``
- 用法: 只读。
##### waf.replaceFilter
- 类型: ``bool``
- 默认值: ``false``
- 用法: 当返回内容类型为text/html、text/plain、json、xml时通知南墙替换返回页面内容则设置waf.replaceFilter = true可用于数据脱敏、敏感词替换等场景。
##### 规则示例
```lua
--[[
规则名称: 数据脱敏
过滤阶段: 返回页面阶段
危险等级: 中危
规则描述: 对返回页面中的身份证和手机号进行*替换脱敏
--]]
if waf.respContentLength == 0 or waf.respContentLength >= 2097152 then
return
end
-- 只保留身份证号前2位和后2位
local newstr, n, err = waf.rgxGsub(waf.respBody, [[\b((1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|[7-9]1)\d{4}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])\b]], function(m)
return m[0]:sub(1, 2) .. "**************" .. m[0]:sub(-2)
end, "jos")
if not newstr then
waf.errLog("error: ", err)
return
end
if n > 0 then
waf.respBody = newstr
-- 通知南墙进行数据替换
waf.replaceFilter = true
end
-- 只保留手机号前3位和后4位
newstr, n, err = waf.rgxGsub(waf.respBody, [[\b1(?:(((3[0-9])|(4[5-9])|(5[0-35-9])|(6[2,5-7])|(7[0135-8])|(8[0-9])|(9[0-35-9]))[ -]?\d{4}[ -]?\d{4})|((74)[ -]?[0-5]\d{3}[ -]?\d{4}))\b]], function(m)
return m[0]:sub(1, 3) .. "****" .. m[0]:sub(-4)
end, "jos")
if not newstr then
waf.errLog("error: ", err)
return
end
if n > 0 then
waf.respBody = newstr
-- 通知南墙进行数据替换
waf.replaceFilter = true
end
```
### 规则 API
#### 规则通用 API
##### waf.startWith(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 判断字符串 sstr 是否以 dstr 开头
- 返回值: ``true 或 false``
##### waf.endWith(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 判断字符串 sstr 是否以 dstr 结尾
- 返回值: ``true 或 false``
##### waf.toLower(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将字符串 sstr 转化为小写
- 返回值: ``sstr 小写``
##### waf.contains(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 判断字符串 sstr 是否在字符串 dstr
- 返回值: ``true 或 false``
##### waf.regex(sstr,pat,ext)
- 参数: ``sstr 为原字符串pat 为正则表达式ext 为正则属性``
- 功能: 在字符串 sstr 中匹配正则表达式 pat用法同ngx.re.match
- 返回值: ``所有匹配项、错误``
##### waf.rgxMatch(sstr,pat,ext)
- 参数: ``sstr 为原字符串pat 为正则表达式ext 为正则属性``
- 功能: 在字符串 sstr 中匹配正则表达式 pat
- 返回值: ``true 或 false``
##### waf.rgxGmatch(sstr,pat,ext)
- 参数: ``sstr 为原字符串pat 为正则表达式ext 为正则属性``
- 功能: 在字符串 sstr 中匹配正则表达式 pat用法同ngx.re.gmatch
- 返回值: ``迭代器iterator,错误err``
##### waf.rgxSub(subject, regex, replace, options?)
- 参数: ``subject 为原字符串regex 为正则表达式replace 为要替换的字符串options为正则选项``
- 功能: 替换字符串 subject 中正则表达式 regex 匹配到的内容为 replace用法同ngx.re.sub
- 返回值: ``newstr, n, err分别为新字符串、替换个数、错误信息``
##### waf.rgxGsub(subject, regex, replace, options?)
- 参数: ``subject 为原字符串regex 为正则表达式replace 为要替换的字符串options为正则选项``
- 功能: 替换字符串 subject 中所有正则表达式 regex 匹配到的内容为 replace用法同ngx.re.gsub
- 返回值: ``newstr, n, err分别为新字符串、替换个数、错误信息``
##### waf.kvFilter(v,match,valOnly)
- 参数: ``v 为要匹配对象match 为匹配函数,valOnly 为 true 则只匹配 value``
- 功能: 用于匹配 cookie、queryString 等 keyvalue 键值对数据,在对象 v 中用 match 函 数匹配内容
- 返回值: ``true,匹配内容或 false,nil``
##### waf.knFilter(v,match,p)
- 参数: ``v 为要匹配对象match 为匹配函数p 为 1 时匹配上传文件名,为 0 时文件内容``
- 功能: 用于过滤上传文件信息,在对象 v 中用 match 函数匹配内容
- 返回值: ``true,匹配内容或 false,nil``
##### waf.jsonFilter(v, match,parsed,valOnly)
- 参数: ``v 为要匹配对象match 为匹配函数parsed 为 false 时解析类型为字符串 v 值,为 true 时解析类型为 table 的 v 值, valOnly 为 true 则只匹配 value``
- 功能: 用于遍历过滤请求中的 json 数据,在对象 v 中用 match 函数匹配内容
- 返回值: ``true,匹配内容或 false,nil``
##### waf.base64Decode(str)
- 参数: ``str 为要解码的 base64 字符串``
- 功能: 用于解码 base64 数据为明文数据
- 返回值: ``明文字符串或 nil``
##### waf.checkSQLI(str, level?)
- 参数: ``str 为要检测的字符串level可省略为严格等级数值越大越严格范围0至3``
- 功能: 基于语义引擎检测 sql 注入攻击
- 返回值: ``true 或 false``
##### waf.checkRCE(str, level?)
- 参数: ``str 为要检测的字符串level可省略为严格等级数值越大越严格范围0至3``
- 功能: 基于语义引擎检测命令注入攻击
- 返回值: ``true 或 false``
##### waf.checkPT(str)
- 参数: ``str 为要检测的字符串``
- 功能: 基于语义引擎检测路径遍历攻击
- 返回值: ``true 或 false``
##### waf.checkXSS(str)
- 参数: ``str 为要检测的字符串``
- 功能: 基于语义引擎检测xss攻击
- 返回值: ``true 或 false``
##### waf.strCounter(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 计算字符串 dstr 在 sstr 中出现的次数
- 返回值: ``整数``
##### waf.trim(str)
- 参数: ``str 为原字符串``
- 功能: 去掉字符串 str 两边的空格
- 返回值: ``去掉两边空格后的字符串``
##### waf.inArray(str,arr)
- 参数: ``str 为原字符串arr为字符串数组``
- 功能: 判断字符串 str 是否存在于arr字符串数组中
- 返回值: ``true 或 false``
##### waf.pmMatch(sstr,dict)
- 参数: ``sstr 为原字符串dict 为查找字典,以 lua 表的形式,如:{“aaa”, “bbb”, “ccc”}``
- 功能: 高效多模匹配多个字符串,发现其中一个字符串立即返回
- 返回值: ``true字典中的字符串或 falsenil``
##### waf.urlDecode(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将 sstr 进行 url 解码还原成字符串
- 返回值: ``解码后的字符串``
##### waf.htmlEntityDecode(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将字符串 sstr 进行 html 实体解码
- 返回值: ``解码后的字符串``
##### waf.hexDecode(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将字符串 sstr 进行 hex 解码
- 返回值: ``解码后的字符串``
##### waf.block(reset)
- 参数: ``reset 为true时直接重置tcp不返回任何内容否则返回403页面``
- 功能: 拦截客户端请求直接重置客户端连接或返回403页面与return搭配使用
##### waf.checkRobot(waf, expireTime?, max?)
- 参数: ``waf 为固定waf对象认证成功后当前ip时间达到 expireTime(单位秒默认值600值为0时不过期)或请求数达到 max(默认值18000值为0时不限次数)后重新显示验证页面``
- 功能: 检测机器人攻击如数据爬虫、扫描攻击、CC拒绝服务攻击等并生成滑动旋转图片验证码与return搭配使用
##### waf.checkTurnstile(waf, siteKey, secret, expireTime?, max?)
- 参数: ``waf 为固定waf对象siteKey 和 secret 为Cloudflare Turnstile的组件配置参数认证成功后当前ip时间达到 expireTime(单位秒默认值600值为0时不过期)或请求数达到 max(默认值18000值为0时不限次数)后重新显示验证页面``
- 功能: 使用Cloudflare Turnstile来进行自动人机验证检测机器人攻击如数据爬虫、扫描攻击、CC拒绝服务攻击等与return搭配使用
##### waf.redirect(uri, status?)
- 参数: ``uri为重定向的链接status为返回http状态可选默认为302``
- 功能: 重定向客户端请求到新的链接与return搭配使用
##### waf.ip2loc(ip, lang?)
- 参数: ``ip为要查询的ip地址lang为显示语言如en、zh-CN等默认值"zh-CN"``
- 功能: 将ip地址转化为国家、省份、城市中文地理位置信息
- 返回值: ``country、 province、 city中国、湖北省、武汉市``
##### waf.errLog(...)
- 参数: ``1个或多个字符串``
- 功能: 记录错误日志到/uuwaf/logs/error.log中
- 返回值: ``无``
## :melon: 插件
?>南墙支持强大的插件扩展功能方便用户自行实现一些特有功能。插件模板见https://github.com/Safe3/uuWAF/blob/main/src/plugins/kafka-logger.lua 一个kafka日志记录插件。欢迎各位贡献安全插件详情见https://waf.uusec.com/#/guide/contribute 。
### 插件编写
一个标准的插件包含以下几个部分每个部分若无功能实现可省略每个大阶段分为pre和post前后两个小阶段分别代表南墙逻辑处理执行前和南墙逻辑处理执行后。南墙v4.1.0之前的版本没有小阶段请使用req_filter、resp_header_filter、resp_body_filter、log。
```lua
local _M = {
version = 0.1, -- 插件版本
name = "kafka-logger" -- 插件名称
}
-- ssl阶段前过滤
function _M.ssl_pre_filter(waf)
end
-- ssl阶段后过滤
function _M.ssl_post_filter(waf)
end
-- 请求阶段前过滤
function _M.req_pre_filter(waf)
end
-- 请求阶段后过滤
function _M.req_post_filter(waf)
end
-- 返回header阶段前过滤
function _M.resp_header_pre_filter(waf)
end
-- 返回header阶段后过滤
function _M.resp_header_post_filter(waf)
end
-- 返回body阶段前过滤
function _M.resp_body_pre_filter(waf)
end
-- 返回body阶段后过滤
function _M.resp_body_post_filter(waf)
end
-- 日志记录阶段前过滤
function _M.log_pre_filter(waf)
end
-- 日志记录阶段后过滤
function _M.log_post_filter(waf)
end
return _M
```
- #### SSL阶段过滤函数
- 该阶段用于获取客户端请求的域名和设置SSL证书waf变量的值为nil。
- #### 请求阶段过滤函数
- 该阶段用于过滤客户端发送的请求数据waf变量同规则变量一致可自行实现该函数功能。
- #### 返回header阶段过滤函数
- 该阶段用于过滤服务器返回的header头数据waf变量同规则变量一致可自行实现该函数功能。
- #### 返回body阶段过滤函数
- 该阶段用于过滤服务器返回的body内容数据waf变量同规则变量一致可自行实现该函数功能。
- #### 日志记录阶段执行函数
- 该阶段用于日志记录阶段做一些日志处理与推送waf变量同规则变量一致可自行实现该函数功能。
### 插件使用
1. 将插件文件如kafka-logger.lua 放于/uuwaf/waf/plugins/目录并修改文件扩展名为kafka-logger.w。
2. 修改/uuwaf/conf/uuwaf.conf文件在init_by_lua_block段中waf = require("waf")下新增一行waf:use("插件名称")如启用kafka-logger.w插件的示例如下
```lua
waf = require("waf")
waf:use("kafka-logger")
```
3. 执行/uuwaf/waf-service -s restart使插件生效如果插件代码运行有问题可以在/uuwaf/logs/error.log中查看详细错误信息。
### 常用功能函数
#### 各阶段数据共享
##### waf.ctx
有时为了在各个执行函数间共享同一个数据可以通过给waf.ctx赋值来实现
```lua
function _M.resp_body_pre_filter(waf)
waf.ctx = "share"
end
function _M.log_pre_filter(waf)
log.errLog(waf.ctx)
end
```
#### 记录错误日志
```lua
local log = require("waf.log")
```
##### log.errLog(...)
- 参数: ``可变参数,类型为字符串``
- 功能: 将信息写入错误日志/uuwaf/logs/error.log
- 返回值: ``无``
##### log.utf8(str)
- 参数: ``字符串``
- 功能: 将str字符编码转换为utf-8编码防止数据写入数据库或json编码时出错
- 返回值: ``字符串``
##### log.getReq()
- 参数: ``无``
- 功能: 获取客户端http请求信息
- 返回值: ``字符串``
##### log.encodeJson(obj)
- 参数: ``lua table对象``
- 功能: 将lua table对象转化json字符串
- 返回值: ``json字符串``
##### log.broker(func...)
- 参数: ``func为函数可变参数为传给函数func的参数``
- 功能: 代理执行函数func并传参。
- 返回值: ``无``
:smile: 其它隐藏功能彩蛋,由用户自行去发掘。

1
docs-cn/api/_sidebar.md Normal file
View File

@ -0,0 +1 @@
- [API](api/README.md)

165051
docs-cn/cidr.txt Normal file

File diff suppressed because it is too large Load Diff

BIN
docs-cn/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
docs-cn/freeotp.apk Normal file

Binary file not shown.

BIN
docs-cn/gif-amd64 Normal file

Binary file not shown.

BIN
docs-cn/gif-arm64 Normal file

Binary file not shown.

81
docs-cn/guide/README.md Normal file
View File

@ -0,0 +1,81 @@
# 产品介绍
!> **南墙**WEB应用防火墙简称`uuWAF`)是有安科技推出的一款全方位网站防护产品,率先实现了**流量层**、**系统层**、**运行时层**3层纵深防御功能。通过有安科技专有的WEB入侵异常检测等技术结合有安科技团队多年应用安全的攻防理论和应急响应实践经验积累的基础上自主研发而成。协助各级政府、企/事业单位全面保护WEB应用安全实现WEB服务器的全方位防护解决方案。
## :dart: 技术优势 <!-- {docsify-ignore} -->
:ophiuchus: 智能的0day防御
南墙创新性的运用机器学习技术,使用`异常检测算法`对http正常与攻击流量进行区分识别并对正常流量进行白名单威胁建模。通过`机器学习算法`自动学习正常流量中的参数特征并转化成对应的参数白名单规则库可以在面对各种突发0day漏洞时无需添加规则即可拦截攻击免除网站管理者一出现漏洞就需挑灯夜战升级的痛苦。
:taurus: 极致的CDN加速
南墙自研超越nginx商业版`proxy_cache_purge`才具备的任意缓存清理功能nginx商业版只支持*模式匹配的方式清理缓存南墙进一步支持正则表达式匹配url路径的缓存清理方式相比nginx商业版具备更高的灵活性和实用性。用户可以在享受极致CDN加速的同时更方便的解决缓存过期问题。
:virgo: 强大的主动防御
南墙自研的主机`主动防御`和`RASP`功能可以在系统层和应用运行时层实现更加强大双层防御可以有效防止0day漏洞攻击主机层主动防御可以在系统内核层拦截底层攻击如限制进程的网络通信、进程创建、文件读写、系统提权、系统溢出攻击等。运行时应用自防御RASP则插入java JVM、php Zend等运行时引擎中有效跟踪运行时上下文并拦截各种web 0day漏洞攻击。
:libra: 先进的语义引擎
南墙采用业界领先的`SQL、XSS、RCE、LFI` 4种基于语义分析的检测引擎结合多种深度解码引擎可对`base64、json、form-data`等HTTP内容真实还原从而有效抵御各种绕过WAF的攻击方式并且相比传统正则匹配具备准确率高、误报率低、效率高等特点管理员无需维护庞杂的规则库即可拦截多种攻击类型。
:gemini: 高级的规则引擎
南墙积极运用`nginx`和`luajit`的高性能、高灵活性特点除了提供对普通用户友好性较好的传统规则创建模式还提供了高扩展性、高灵活性的lua脚本规则编写功能使得有一定编程功底的高级安全管理员可以创造出一系列传统WAF所不能实现的高级漏洞防护规则用户可以编写一系列插件来扩展WAF现有功能。从而使得在拦截一些复杂漏洞时可以更加得心应手。
## :fire: 功能对比 <!-- {docsify-ignore} -->
南墙为您提供了丰富而强大的各种web安全和api防护功能社区版可能是你见过的最强免费WAAP产品。同时南墙也为商业用户提供了功能更强的商业版产品功能对比如下
| <img width=20/>功能项<img width=20/> |<img width=50/>社区版<img width=50/>|<img width=50/>专业版<img width=50/>|<img width=50/>商业版<img width=50/>|
| :----------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------: |
| 价格 |免费|2999/年|按需定制|
| 站点配置 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 漏洞防护 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| CC防护 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 后门检测 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 业务安全 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| CDN加速 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 高级规则 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 插件扩展 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 合规审计 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 日志报表 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 地区限制 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 负载均衡 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 拦截页面 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 等级保护 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 免费证书 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 多用户权限 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 机器学习 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 增强规则 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 数据脱敏 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 技术支持 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 主机防御 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| RASP |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 集群管理 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 定制开发 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
## :art: 界面预览 <!-- {docsify-ignore} -->
南墙为你提供了简单易用的WAF后台管理界面安装完成后所有操作都可以在浏览器中完成所有配置无需重启立即生效远超市面上大部分免费WAF产品如`ModSecurity`,如下:
:oden: 管理后台
<img src="https://waf.uusec.com/_media/waf.png" style="width: 98%;" class="sd"/>
:package: 规则展示
![](https://waf.uusec.com/_media/rule.png)

17
docs-cn/guide/_sidebar.md Normal file
View File

@ -0,0 +1,17 @@
- <span class="iconfont icon-atom"></span> 指南
- [<span class="iconfont icon-fly"></span> 产品介绍](guide/)
- [<span class="iconfont icon-page"></span> 技术优势](guide/#dart-技术优势)
- [<span class="iconfont icon-star"></span> 功能对比](guide/#fire-功能对比)
- [<span class="iconfont icon-mix"></span> 界面预览](guide/#art-界面预览)
- [<span class="iconfont icon-wxapp"></span> 快速入门](guide/install.md)
- [<span class="iconfont icon-component"></span> 配置要求](guide/install?id=%e2%99%a8%ef%b8%8f%e9%85%8d%e7%bd%ae%e8%a6%81%e6%b1%82)
- [<span class="iconfont icon-install"></span> 一键安装](guide/install?id=%f0%9f%9a%80%e4%b8%80%e9%94%ae%e5%ae%89%e8%a3%85)
- [<span class="iconfont icon-router"></span> 开始使用](guide/begin.md)
- [<span class="iconfont icon-crown"></span> 事前准备](guide/begin#beginner-事前准备)
- [<span class="iconfont icon-matrix"></span> 登录后台](guide/begin#computer-登录后台)
- [<span class="iconfont icon-intro1"></span> API接口](/api/README)
- [<span class="iconfont icon-satellite"></span> 常见问题](guide/problems)
- [<span class="iconfont icon-alert"></span> 贡献捐赠](guide/contribute.md)
- [<span class="iconfont icon-discord"></span> 加入讨论](guide/discuss.md)
- [<span class="iconfont icon-nut"></span> 更新日志](CHANGELOG.md)

17
docs-cn/guide/begin.md Normal file
View File

@ -0,0 +1,17 @@
# 开始使用
经过前面的安装和配置,接下来可以开始使用了
## :beginner: 事前准备 <!-- {docsify-ignore} -->
?> 如果你还不熟悉南墙,建议先阅读 [南墙WAF使用手册](https://waf.uusec.com/南墙WAF使用手册.pdf)。
## :computer: 登录后台 <!-- {docsify-ignore} -->
?> 浏览器打开 https://127.0.0.1:4443/ 默认用户名admin密码Passw0rd!
!> 注意登录后请及时新建不易猜解用户名的新管理员用户删除默认admin用户并开启动态口令以保证WAF管理后台账户安全。由于后台动态口令采用的是安全性更高的HMAC-SHA256算法与一般动态口令客户端不兼容这里建议iOS用户使用 [Google Authenticator](https://apps.apple.com/cn/app/google-authenticator/id388497605),安卓用户使用 [FreeOTP](https://waf.uusec.com/freeotp.apk)。

View File

@ -1,9 +1,10 @@
# 贡献分享
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 贡献功能插件和安全规则。规则模板见https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua ,规则API见https://waf.uusec.com/#/api/README
# 贡献捐赠
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 打赏或贡献功能插件和安全规则 。
## :gift_heart: 参与方法
> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
## :gift_heart: 参与方法 <!-- {docsify-ignore} -->
?> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/src/rules
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/src/plugins
- PR 中根据 Pull Request 的模板填写规则或插件信息
@ -12,9 +13,11 @@
## :gem: 奖励措施
> 参与贡献即可获得与 uuWAF 社区版内部大佬技术切磋交流的机会。提交 PR 过程中会有内部大佬审核,帮助改进规则和插件,共同进步。
## :gem: 奖励措施 <!-- {docsify-ignore} -->
?> 参与贡献即可获得与 uuWAF 社区版内部大佬技术切磋交流的机会。提交 PR 过程中会有内部大佬审核,帮助改进规则和插件,共同进步。
- 提交一个规则或插件即可进入 uuWAF 核心贡献者群,参与讨论热点安全技术,且有机会与大佬们面对面交流。
- 对于 uuWAF 商业版年费用户在当年的商业版授权有效期内只需在提交5个插件或规则即可再免费续一年商业升级。
- 参与贡献的人员可永久将你的大名留在规则贡献者名单当中,供所有人瞻仰。
<img src="https://waf.uusec.com/_media/sponsor.jpg" alt="捐赠" height="300px" />

12
docs-cn/guide/discuss.md Normal file
View File

@ -0,0 +1,12 @@
# 加入讨论
?> 欢迎各位就 南墙 的各种bug或功能需求及使用问题在如下渠道参与讨论:
- 问题提交https://github.com/Safe3/uuWAF/issues
- 讨论社区https://github.com/Safe3/uuWAF/discussions
- 官方 QQ 群11500614
- 官方微信群:微信扫描以下二维码加入
<img src="https://waf.uusec.com/_media/weixin.jpg" alt="微信群" height="200px" class="sd"/>

59
docs-cn/guide/install.md Normal file
View File

@ -0,0 +1,59 @@
# 快速入门
南墙支持一键全自动安装(**Ubuntu或Debian系统请使用Docker版**),全程无需人工干预,给你带来极致体验 。
## ♨️配置要求 <!-- {docsify-ignore} -->
?> 南墙对配置要求极低,详细如下:
```
- 处理器64位 1千兆赫(GHz)或更快。
- 内存不小于2G
- 磁盘空间不小于8G
```
## 🚀一键安装 <!-- {docsify-ignore} -->
?> 南墙安装及其简便,通常在几分钟内即可安装完毕,具体耗时视网络下载情况而定。
!> 注意请尽量选择一台纯净Linux x86_64环境的服务器安装因为安装过程会卸载旧的MySQL数据库并重新安装如果没有备份可造成旧的MySQL数据丢失并且南墙采用云WAF反向代理模式默认需要使用80、443端口。
**主机版安装方式如下:**
系统要求RHEL 7及以上兼容x86_64系统如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。
```bash
sudo yum install -y ca-certificates
curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
```
?> 安装成功后会显示 “ 恭喜您,安装成功”
主机版卸载方式如下:
```bash
sudo systemctl stop uuwaf && sudo /uuwaf/waf-service -s uninstall && sudo rm -rf /uuwaf
sudo rpm -qa | grep -ie ^percona | xargs yum -y erase
```
**容器版安装方式如下:**
- 软件依赖Docker 20.10.14 版本以上Docker Compose 2.0.0 版本以上低版本会导致sql数据无法导入以致南墙后台无法登录。
若遇到无法自动安装Docker Engine请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装。
```bash
curl -fsSL https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
```
后续可直接执行 `bash ./waf/uuwaf.sh` 来管理南墙容器,包括启动、停止、更新、卸载等。
**安装后快速使用入门:**
1. 登录后台访问https://ip:4443 ip为安装南墙的服务器ip地址用户名admin密码Passw0rd!。
2. 添加站点进入站点管理菜单点击添加站点按钮按提示添加站点域名与网站服务器ip。
3. 添加SSL证书进入证书管理菜单点击添加证书按钮上传第二步中域名的https证书和私钥文件。若不添加SSL证书则南墙会自动尝试申请Let's Encrypt免费SSL证书并在证书到期前自动续期。
4. 修改域名DNS指向到域名服务商管理后台把域名DNS A记录的ip地址改为南墙服务器ip地址。
5. 测试连通性访问站点域名查看网站是否能够打开查看返回的http header头server字段是否为uuWAF。
!> 更多使用过程中碰到问题的解决办法请参考[常见问题](https://waf.uusec.com/#/guide/problems)。

46
docs-cn/guide/problems.md Normal file
View File

@ -0,0 +1,46 @@
# 常见问题
> 南墙 的发展离不开社区的每一位用户的支持,欢迎在[github](https://github.com/Safe3/uuWAF)上点个小星星,这里收集常见的使用问题 。
### 🍎 为什么访问网站会出现规则ID为-1的拦截页面 <!-- {docsify-ignore} -->
?> 如果域名没有在南墙站点管理中配置,访问南墙默认会拦截该域名的访问,以防止黑域名指向引起的法律风险。
### 🍐 经过南墙代理的网站如何获取客户端真实ip <!-- {docsify-ignore} -->
?> 南墙转发给网站的HTTP请求头中会加入X-Waf-Ip字段它的值即为客户端ip也可以通过X-Forwarded-For来获取。
### 🍑 集群模式下上游网站如何区分不同的南墙来源? <!-- {docsify-ignore} -->
?> 南墙转发给网站的HTTP请求头中会加入X-Waf-Id字段它的值即为用户在/uuwaf/web/conf/config.json中配置的id值用户可以通过该值来区分网站请求来自那台南墙服务器。
### 🍋 如何解决南墙Docker版获取的客户端ip为172的问题 <!-- {docsify-ignore} -->
?> 这是部分主机docker网络和firewalld冲突引起的导致南墙获取的客户端访问ip为172开头的容器网关ip。可以把docker网桥加入到防火墙的internal区域手工执行如下命令解决其中wafnet为南墙docker容器的网桥名称。
```bash
firewall-cmd --permanent --zone=internal --change-interface=wafnet
```
### 🍊 如何查看南墙CDN是否缓存了我们的网页 <!-- {docsify-ignore} -->
?> 南墙提供了一个X-Waf-Cache返回头用以查看缓存情况如X-Waf-Cache: HIT表示已缓存X-Waf-Cache: MISS表示未缓存。
### 🍍 如何修改南墙管理后台的端口和SSL证书 <!-- {docsify-ignore} -->
?> 南墙管理后台的配置位于/uuwaf/web/conf/config.json中addr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件之后执行systemctl restart uuwaf重启服务使配置生效。
### 🍈 如何修改南墙反向代理默认监听端口? <!-- {docsify-ignore} -->
?> 南墙默认只监听http 80、https 443端口用户可自行在/uuwaf/conf/uuwaf.conf中自定义任意监听端口配置方式请参考nginx 的 [listen](https://nginx.org/en/docs/http/ngx_http_core_module.html#listen) 设置之后执行systemctl restart uuwaf重启服务使配置生效。Docker版用户可以修改docker-compose.yml中的port端口映射。

49
docs-cn/index.html Normal file
View File

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>南墙Web应用防火墙 | 一款社区驱动的免费、高性能、高扩展顶级Web应用和API安全防护产品</title>
<link rel="icon" href="/favicon.ico" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="一款社区驱动的免费、高性能、顶级Web应用和API安全防护产品">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="/_media/vue.css">
<link rel="stylesheet" href="/_media/custom.css">
<link rel="stylesheet" href="/_media/font.css">
</head>
<body>
<div id="app"></div>
<script>
window.$docsify = {
name: '南墙Web应用防火墙',
repo: 'https://github.com/Safe3/uuWAF',
loadSidebar: true,
loadNavbar: true,
subMaxLevel: 5,
auto2top: true,
markdown: {
gfm: true,
tables: true,
},
themeColor: '#3599BA',
coverpage: true,
nameLink: '#/',
alias: {
'/.*/_navbar.md': '/_navbar.md',
'/_sidebar.md': '/guide/_sidebar.md',
'/': '/guide/README.md',
},
pagination: {
previousText: '上一章节',
nextText: '下一章节',
},
}
</script>
<script src="/_media/docsify.min.js"></script>
<script src="/_media/search.min.js"></script>
<script src="/_media/prism-bash.min.js"></script>
<script src="/_media/prism-markdown.min.js"></script>
<script src="/_media/prism-lua.min.js"></script>
<script src="/_media/docsify-pagination.min.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

BIN
docs-cn/update.tgz Normal file

Binary file not shown.

BIN
docs-cn/waf-install Normal file

Binary file not shown.

BIN
docs-cn/waf.tgz Normal file

Binary file not shown.

1
docs-cn/wafversion Normal file
View File

@ -0,0 +1 @@
6.1.0

View File

@ -1,429 +1,8 @@
## [6.1.0](https://github.com/Safe3/uuWAF/compare/v6.1.0...v6.0.0) (2024-11-17)
## [6.2.0](https://github.com/Safe3/uuWAF/compare/v6.2.0...v6.1.0) (2024-11-26)
### Improvements
### 功能更新
- Fully support IPv6 network addresses and lift restrictions on upstream and IP whitelists for IPv6 addresses
- Upgrade the UUSEC WAF sliding and rotating image human-machine verification function, supporting cookie free mode and frequency limit
- Added Cloudflare Turnstile human-machine verification function, providing waf.checkTurnstile function
- 新增日志写数据库开关使用kafka日志功能时可关闭写数据库
- 升级ip地理位置数据库支持多语言和ipv6地址查询
- 优化升级规则库,降低误报并提升拦截率
- 机器学习功能去掉对js、css图片等静态资源的AI规则学习
- 优化配置,合并/uuwaf/conf/uuwaf.conf中部分配置到config.json中
- CDN新增支持断点续传文件如视频等文件的缓存加速
## [6.0.0](https://github.com/Safe3/uuWAF/compare/v6.0.0...v5.5.0) (2024-11-01)
### 功能更新
- 新增多用户权限隔离功能,操作员只能管理自己创建的站点和规则
- CDN加速功能支持自动匹配站点管理中的通配符站点
- 南墙管理后台TLSv1.2不再支持3DES提升传输安全性
- 支持在管理后台系统信息中查看收费版授权到期时间
## [5.5.0](https://github.com/Safe3/uuWAF/compare/v5.5.0...v5.4.0) (2024-10-22)
### 功能更新
- 优化数据脱敏代码逻辑,提升处理效率
- 用户管理禁止删除自己,防止误删后无法登录
- 禁止修改规则时修改处理阶段,防止规则不生效
- 优化安装脚本进一步提升Linux系统兼容性
## [5.4.0](https://github.com/Safe3/uuWAF/compare/v5.4.0...v5.3.0) (2024-09-29)
### 功能更新
- 升级配置同步机制,提升性能并降低数据库资源消耗
- 升级XSS语义检测引擎进一步降低误报
- 升级ip地理位置数据库提升位置准确性
- 调整日志默认查询数量,大幅提升日志高级查询速度
- 上传文件名过滤增强新增htmlentity解码
- 新增log.utf8、log.getReq等多个api函数
- 优化安装脚本提升Linux系统兼容性
## [5.3.0](https://github.com/Safe3/uuWAF/compare/v5.3.0...v5.2.0) (2024-08-29)
### 功能更新
* 新增http返回内容替换功能[waf.replaceFilter](https://waf.uusec.com/#/api/README?id=wafreplacefilter),可以用于数据脱敏或敏感词替换等场景
* 新增waf.rgxGmatch、waf.rgxSub、waf.rgxGsub、waf.errLog正则匹配替换和错误日志记录函数
* 优化部分代码,进一步提升南墙过滤处理性能
## [5.2.0](https://github.com/Safe3/uuWAF/compare/v5.2.0...v5.1.1) (2024-08-08)
### 功能更新
* 新增负载均衡有多台上游服务器时,一台上游出现故障时会自动请求下一上游服务器
* 南墙自动申请并托管的免费证书,加入中间证书链,避免某些证书监控软件提示
* 去掉旧TLSv1 TLSv1.1的兼容现在默认只支持TLSv1.2 TLSv1.3提升SSL传输安全性
### 问题修复
* 修复部分规则在特殊情况下的报错问题
* 升级docker管理脚本和compose文件解决卸载不干净和南墙服务先于数据库启动的问题
## [5.1.1](https://github.com/Safe3/uuWAF/compare/v5.1.1...v5.1.0) (2024-07-30)
### 问题修复
* 修复密码错误5次锁定时间到期后不能解锁的问题
## [5.1.0](https://github.com/Safe3/uuWAF/compare/v5.1.0...v5.0.0) (2024-07-26)
### 功能更新
* 新增ip威胁情报功能并开源威胁情报插件
* 管理员修改普通用户不再需要旧密码和otp
* 新增删除默认admin账号安全提示
* 系统信息页界面优化调整
## [5.0.0](https://github.com/Safe3/uuWAF/compare/v5.0.0...v4.5.0) (2024-07-24)
### 功能更新
* 新增密码复杂度和过期安全策略,过等保三级
* 新增负载均衡平滑加权轮询SWRR模式
* 升级机器学习引擎不再依赖python
* 升级语义检测引擎,检测更多攻击
## [4.5.0](https://github.com/Safe3/uuWAF/compare/v4.5.0...v4.4.1) (2024-06-16)
### 功能更新
* 优化精简规则BlazeHTTP防护效果测试对比登顶No.1
* 升级语义检测引擎
* 优化UI界面展示
* 支持对返回类型为Transfer-Encoding: chunked的body内容过滤
## [4.4.1](https://github.com/Safe3/uuWAF/compare/v4.4.1...v4.3.0) (2024-06-04)
### 功能更新
* 优化UI界面展示
* 调整waf.block函数和持续攻击封禁功能观察模式时不再拦截
* 优化waf_stats更新语句
* 新增按国家、地区进行ip拦截的高级规则
### 问题修复
* 修复获取ipv6地理位置时产生系统报错日志问题
* 解决某些负载均衡设备X-Forwarded-For不规范导致的不能正确获取ip的问题
## [4.3.0](https://github.com/Safe3/uuWAF/compare/v4.3.0...v4.2.0) (2024-04-28)
### 功能更新
* 新增系统备份的备份恢复功能
* 优化sql、xss、rce、lfi规则
* 优化南墙过滤引擎和性能
### 问题修复
* 升级cjson依赖库解决CVE-2022-24834漏洞
* 修复若干内存泄露问题
## [4.2.0](https://github.com/Safe3/uuWAF/compare/v4.2.0...v4.1.0) (2024-04-22)
### 功能更新
* 日志显示页面UI美化
* 对未在南墙站点管理中配置的域名访问返回拦截页面
* 对无值参数值为true调整为空字符串
* 进一步优化南墙处理性能
### 问题修复
* 修复gzip页面解压失败导致返回页面过滤失败的问题
* ACME免费证书申请不再处理ip类证书申请
## [4.1.0](https://github.com/Safe3/uuWAF/compare/v4.1.0...v4.0.1) (2024-04-16)
### 功能更新
* 插件功能新增SSL处理阶段并将原各阶段函数细分为pre、post前后两个小阶段
* 新增日志刷新按钮
* 优化固件升级判断逻辑
## [4.0.1](https://github.com/Safe3/uuWAF/compare/v4.0.1...v3.3.3) (2024-04-10)
### 功能更新
* 新增免费SSL证书自动申请和续期功能
* 优化登录过期提示
* 优化并发数据库查询
### 问题修复
* 修复开启缓存后Range头不能传到后端引起的视频播放不能快进的问题
* 修复规则管理中返回HTTP头、返回页面阶段自定义普通规则不生效的问题
## [3.3.3](https://github.com/Safe3/uuWAF/compare/v3.3.3...v3.0.1) (2024-03-27)
### 功能更新
* 新增一键升级功能,便于固件版本升级
* 新增检测循环代理避免127.0.0.1等死循环
* 新增默认开启gzip压缩功能
* 升级ip地理位置库位置更加精准
* 新增waf.ip2loc函数用于将ip转换为地理位置便于按地理位置封锁ip
* 自定义拦截页面限定为html类型
### 问题修复
* 修复机器人检测规则默认频率过小的问题
* 修复管理后台打开侧边栏固定后,页面不能显示的问题
## [3.0.1](https://github.com/Safe3/uuWAF/compare/v3.0.1...v2.8.0) (2024-01-27)
### 功能更新
* 语义引擎升级至2.0增强检测能力并支持相关api设置检测严格等级
* 升级过滤引擎支持对不常见或异常的content-type自定义是否拦截
* 新增从自定义请求头中获取访客真实ip方便多层代理时获取客户端ip
* 大幅优化多项南墙安全过滤规则,减少误报和提升检出率
### 问题修复
* 修复南墙管理后台在数据渲染失败时图表弹出的getContext错误提示
## [2.8.0](https://github.com/Safe3/uuWAF/compare/v2.8.0...v2.7.0) (2024-01-11)
### 新增功能
* 升级南墙滑动旋转验证码功能解决被CDN缓存或IP变动引起的不能显示或验证失败问题
* 主机版支持openEuler华为欧拉系统和国内几大云操作系统安装
* 优化默认数据库连接数,避免日志写入频繁时导致的数据库连接数不够用问题
### Bug 修复
* 解决南墙主机版某些系统数据库安装失败的问题
## [2.7.0](https://github.com/Safe3/uuWAF/compare/v2.7.0...v2.6.1) (2024-01-05)
### 新增功能
* 高级规则采用沙箱保护,阻止执行恶意规则
* 新增多个api变量和函数
* 升级多条高级规则
* 升级多个组件版本nginx版本v1.24、OpenSSL版本v1.1.1w
### Bug 修复
* 修复南墙api函数waf.pmMatch匹配失效的问题
* 修复不同时区日期显示问题
## [2.6.1](https://github.com/Safe3/uuWAF/compare/v2.6.1...v2.6.0) (2023-09-04)
### 新增功能
* 支持*域名代表所有域名,简化所有网站位于相同服务器的配置
* 优化南墙语义检测引擎检测逻辑
* 优化南墙安装和Docker管理脚本对异常进行处理
## [2.6.0](https://github.com/Safe3/uuWAF/compare/v2.6.0...v2.5.1) (2023-08-26)
### 新增功能
* 南墙安全验证X-Waf-Token 支持js读取
* 增强南墙语义检测引擎
* Docker版支持一键更新升级
### Bug 修复
* 修复南墙语义检测引擎在某些情况下core dump的问题
## [2.5.1](https://github.com/Safe3/uuWAF/compare/v2.5.1...v2.4.1) (2023-07-04)
### 新增功能
* 新增查看攻击日志请求报文功能
* 优化tls传输兼容性支持TLS v1
* 优化sql注入和命令执行语义引擎
* 优化系统备份功能
## [2.4.1](https://github.com/Safe3/uuWAF/compare/v2.4.1...v2.3.0) (2023-05-30)
### 新增功能
* 新增系统配置备份功能
* 新增一键解封被封禁的ip功能
* 新增南墙安全验证X-Waf-Token head头验证功能
### Bug 修复
* 修复使用waf.block函数后产生系统报错日志的问题
* 解决部分XSS检测误报的问题
* 解决Docker版南墙在某些系统出现Unix syslog delivery error错误不能运行的问题
## [2.3.0](https://github.com/Safe3/uuWAF/compare/v2.3.0...v2.2.0) (2023-04-28)
### 新增功能
* 新增CDN缓存加速功能支持业内首创的高灵活度正则匹配任意条件实时缓存清理功能。
## [2.2.0](https://github.com/Safe3/uuWAF/compare/v2.2.0...v2.1.5) (2023-03-22)
### 新增功能
* 新增滑动旋转验证码功能可用于各种拦截机器人攻击如网络爬虫、业务风控、cc拒绝服务攻击等
* 新增安全日志、审计日志报表功能可将日志导出为Excel报表
* 新增并优化多个安全规则包括机器人攻击防御、http重定向https等
* 优化WAF配置减少内存占用
* 优化WAF管理后台界面功能展示
### Bug 修复
* 修复某些网站返回http头过大导致的502、504问题
* 修复某些网站非utf-8编码且未设置Content-Type头导致网页乱码的问题
## [2.1.5](https://github.com/Safe3/uuWAF/compare/v2.1.5...v2.1.2) (2022-12-31)
### Bug 修复
* 修复某些情况下弱口令匹配不生效的问题
* 使用安装包进行安装时对不支持的操作系统进行提示如ubuntu或debian
### 新增变更
* 支持text/plain类型的POST请求和返回内容的安全过滤处理
* 支持UTF-8编码正则匹配
* 提升WAF性能默认不再过滤base64内容可以单独定义规则来支持
## [2.1.2](https://github.com/Safe3/uuWAF/compare/v2.1.2...v1.9.3) (2022-11-11)
### Bug 修复
* 修复日志管理功能Url过长时日志显示不全的问题
* 修复在selinux开启时WAF服务进程不能正常启动的问题
### 新增变更
* 增强默认安装初始化数据库密码、JWT密钥安全性随机化生成
* 升级OpenSSL组件到最新1.1.1s版
## [1.9.3](https://github.com/Safe3/uuWAF/compare/v1.9.3...v1.9.0) (2022-10-10)
### Bug 修复
* 修复删除日志时,时间格式识别错误的问题
* 修复没有安全日志时,首页显示提示错误的问题
### 新增功能
* 支持更多RedHat系操作系统如CentOS、AlmaLinux、Anolis、Rocky Linux等
* 增强安装稳定性和性能数据库升级到8.x版本
## [1.9.0](https://github.com/Safe3/uuWAF/compare/v1.9.0...v1.8.1) (2022-09-22)
### Bug 修复
* 无
### 新增功能
* 支持WAF扩展插件

View File

@ -1,11 +1,11 @@
# 南墙Web应用防火墙
# UUSEC WAF
***不撞南墙不回头***
***Don't hit the south wall, don't turn back***
一款工业级免费、高性能、高扩展支持AI和语义引擎的Web应用和API安全防护产品
A industry-leading free, high-performance, AI and semantic technology web application and API security protection product
[<i class="iconfont icon-github"></i> 进入社区](https://github.com/Safe3/uuWAF)
[马上开始 <i class="iconfont icon-down"></i>](#main)
[<i class="iconfont icon-github"></i> Join community](https://github.com/Safe3/uuWAF)
[Start now <i class="iconfont icon-down"></i>](#main)
<!-- background image -->
![](_media/2.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

After

Width:  |  Height:  |  Size: 290 KiB

View File

@ -1,4 +1,4 @@
- [主站](https://www.uusec.com/)
- [指南](/#main)
- [Site](https://www.uusec.com/)
- [Guide](/#main)
- [API](/api/README.md)
- [博客](https://blog.uusec.com/)

View File

@ -1,16 +1,16 @@
## :grapes: 规则
## :grapes: Rule
?>这里对规则所用到的一些变量和相关函数进行说明更多规则编写方法请大家参照WAF管理后台中的规则管理当中的众多实际例子。规则模板见https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua 一条防cc攻击的安全规则。欢迎各位贡献安全规则详情见https://waf.uusec.com/#/guide/contribute 。
?> Here are some explanations of the variables and related functions used in the rules. For more rule writing methods, please refer to the numerous practical examples in rule management in the WAF management. The rule template can be found at: https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua A security rule against CC attacks. Welcome everyone to contribute rules. For details, please refer to: https://uuwaf.uusec.com/#/guide/contribute .
### 规则示例
### Example of Rules
```lua
--[[
规则名称: anti cc
过滤阶段: 请求阶段
危险等级: 中危
规则描述: 当一分钟访问/api/路径频率超过360次则在5分钟内拦截该ip访问
Rule name: Anti CC
Filtering stage: Request phase
Threat level: Medium
Rule description: When the frequency of accessing /api/ path exceeds 360 times per minute, intercept the IP access within 5 minutes
--]]
@ -22,15 +22,15 @@ local sh = waf.ipCache
local ccIp = 'cc-' .. waf.ip
local c, f = sh:get(ccIp)
if not c then
sh:set(ccIp, 1, 60, 1) -- 设置1分钟也就是60秒访问计数时间
sh:set(ccIp, 1, 60, 1) -- Set a 60 seconds access count time
else
if f == 2 then
return waf.block(true) -- 重置TCP连接不记录日志
return waf.block(true) -- Reset TCP connection without logging
end
sh:incr(ccIp, 1)
if c + 1 >= 360 then -- 频率超过360次
sh:set(ccIp, c + 1, 300, 2) -- 设置5分钟也就是300秒拦截时间
return true, ccIp, true -- 返回参数第一个true为是否检测到第二个参数ccIp为日志记录内容第三个参数true表示拦截false表示只记录不拦截
if c + 1 >= 360 then -- Frequency exceeding 360 times
sh:set(ccIp, c + 1, 300, 2) -- Set a 300 second interception time
return true, ccIp, true -- Return parameter, the first 'true' is whether it has been detected; The second parameter 'ccIp' is the content of the log record; The third parameter 'true' indicates interception, while 'false' indicates only recording without interception
end
end
@ -40,224 +40,224 @@ return false
### 规则变量
### Rule variables
#### 请求阶段变量
#### Request phase variables
##### waf.ip
- 类型: ``string``
- 默认值: ``客户端访问ip``
- 用法: 只读用于获取客户端访问ip可以在WAF后台站点管理中配置客户端ip来源获取方式为Socket或X-Forwarded-For中的倒序第n个ip。
- Type: ``string``
- Value: ``Client IP``
- Usage: Read only, used to obtain client IP. The client IP source can be configured in WAF site management, and the retrieval method is the nth IP in reverse order in Socket, Header or X-Forwarded-For.
##### waf.scheme
- 类型: ``string``
- 默认值: ``客户端访问http协议值为字符串http或https``
- 用法: 只读。
- Type: ``string``
- Value: ``Request HTTP protocol, with values of string HTTP or HTTPS``
- Usage: Read only
##### waf.httpVersion
- 类型: ``number``
- 默认值: ``http协议版本值为1.0、1.1、2.0、3.0``
- 用法: 只读。
- Type: ``number``
- Value: ``HTTP protocol version, with values of 1.0, 1.1, 2.0, 3.0``
- Usage: Read only
##### waf.host
- 类型: ``string``
- 默认值: ``客户端访问host头``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP host ``
- Usage: Read only
##### waf.ipBlock
- 类型: ``table``
- 默认值: ``键值存储库用于存放已拦截的客户端ip``
- 用法: 见ngx.shared.DICT。
- Type: ``table``
- Value: ``Key value store, used to store intercepted client IP addresses``
- Usage: See [ngx.shared.DICT](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#ngxshareddict)
##### waf.ipCache
- 类型: ``table``
- 默认值: ``键值存储库用于存放访问的客户端ip``
- 用法: 见ngx.shared.DICT。
- Type: ``table``
- Value: ``Key value store, used to store client IP addresses``
- Usage: See [ngx.shared.DICT](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#ngxshareddict)
##### waf.requestLine
- 类型: ``string``
- 默认值: ``原始的request line数据``
- 用法: 只读。
- Type: ``string``
- Value: ``Full original request line ``
- Usage: Read only
##### waf.uri
- 类型: ``string``
- 默认值: ``解码处理过的URI不带参数``
- 用法: 只读。
- Type: ``string``
- Value: ``Current URI in request, normalized``
- Usage: Read only
##### waf.method
- 类型: ``string``
- 默认值: ``请求方法``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP request method, usually “GET” or “POST”``
- Usage: Read only
##### waf.reqUri
- 类型: ``string``
- 默认值: ``原始URI带参数``
- 用法: 只读。
- Type: ``string``
- Value: ``Full original request URI (with arguments)``
- Usage: Read only
##### waf.userAgent
- 类型: ``string``
- 默认值: ``客户端请求的User-Agent头数据``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP request User-Agent``
- Usage: Read only
##### waf.referer
- 类型: ``string``
- 默认值: ``客户端请求的Referer头数据``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP request Referer``
- Usage: Read only
##### waf.reqContentType
- 类型: ``string``
- 默认值: ``客户端请求的Content-Type头数据``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP request Content-Type``
- Usage: Read only
##### waf.XFF
- 类型: ``string``
- 默认值: ``客户端请求的X-Forwarded-For头数据``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP request X-Forwarded-For``
- Usage: Read only
##### waf.origin
- 类型: ``string``
- 默认值: ``客户端请求的Origin头数据``
- 用法: 只读。
- Type: ``string``
- Value: ``HTTP request Origin``
- Usage: Read only
##### waf.reqHeaders
- 类型: ``table``
- 默认值: ``请求的所有header对象``
- 用法: 只读。
- Type: ``table``
- Value: ``A Lua table holding all the current request headers``
- Usage: Read only
##### waf.hErr
- 类型: ``string``
- 默认值: ``请求header解析出错信息``
- 用法: 只读。
- Type: ``string``
- Value: ``Request headers parsing error message``
- Usage: Read only
##### waf.isQueryString
- 类型: ``bool``
- 默认值: ``true或false``
- 用法: 只读,是否存在请求参数。
- Type: ``bool``
- Value: ``true or false``
- Usage: Read only, is there a request parameter
##### waf.reqContentLength
- 类型: ``number``
- 默认值: ``0``
- 用法: 只读请求body内容长度整数值。
- Type: ``number``
- Value: ``0``
- Usage: Read only, request body content length
##### waf.queryString
- 类型: ``table``
- 默认值: ``请求url参数key、value``
- 用法: 只读。
- Type: ``table``
- Value: ``Request URL parameters, key and value``
- Usage: Read only
##### waf.qErr
- 类型: ``string``
- 默认值: ``请求参数解析出错信息``
- 用法: 只读。
- Type: ``string``
- Value: ``Request query string parsing error message``
- Usage: Read only
##### waf.form
- 类型: ``table``
- 默认值: ``请求body对象``
- 用法: 只读。
- Type: ``table``
- Value: ``Request body object``
- Usage: Read only
##### waf.form["RAW"]
- 类型: ``string``
- 默认值: ``请求body的原始数据``
- 用法: 只读。
- Type: ``string``
- Value: ``Request raw body data``
- Usage: Read only
##### waf.form["FORM"]
- 类型: ``table``
- 默认值: ``请求body参数key、value``
- 用法: 只读,表单如: {uid="12",vid={[1]="select",[2]="a from b"}}
- Type: ``table``
- Value: ``Request post form parameters, key and value``
- Usage: Read only, value example: {uid="12",vid={[1]="select",[2]="a from b"}}
##### waf.form["FILES"]
- 类型: ``table``
- 默认值: ``解析出的请求body中上传文件信息``
- 用法: 只读,文件信息如: {name={[1]="filename",[2]="file content"}}
- Type: ``table``
- Value: ``Upload files information in the parsed request body``
- Usage: Read only, value example: {name={[1]="filename",[2]="file content"}}
##### waf.fErr
- 类型: ``string``
- 默认值: ``解析请求body出错信息``
- 用法: 只读,一般是恶意畸形请求包。
- Type: ``string``
- Value: ``Error message parsing request body``
- Usage: Read only, usually a malicious malformed request packet
##### waf.cookies
- 类型: ``table``
- 默认值: ``请求cookie参数key、value``
- 用法: 只读。
- Type: ``table``
- Value: ``Request cookie parameters, key and value``
- Usage: Read only
##### waf.cErr
- 类型: ``string``
- 默认值: ``解析请求cookie出错信息``
- 用法: 只读。
- Type: ``string``
- Value: ``Error message parsing request cookie``
- Usage: Read only
#### 返回http头阶段新增变量
#### Response header phase newly added variables
##### waf.status
- 类型: ``number``
- 默认值: ``返回http状态整数值``
- 用法: 只读。
- Type: ``number``
- Value: ``Presponse HTTP status, integer value``
- Usage: Read only
##### waf.respHeaders
- 类型: ``table``
- 默认值: ``返回的所有header对象key、value``
- 用法: 只读。
- Type: ``table``
- Value: ``All headers responsed, including key and value``
- Usage: Read only
##### waf.respContentLength
- 类型: ``number``
- 默认值: ``返回body内容长度整数值``
- 用法: 只读。
- Type: ``number``
- Value: ``Response body content length``
- Usage: Read only
##### waf.respContentType
- 类型: ``string``
- 默认值: ``服务端返回的Content-Type头数据``
- 用法: 只读。
- Type: ``string``
- Value: ``Response body content type``
- Usage: Read only
#### 返回页面阶段新增变量
#### Response body phase newly added variables
##### waf.respBody
- 类型: ``string``
- 默认值: ``返回body页面内容``
- 用法: 只读。
- Type: ``string``
- Value: ``Response body``
- Usage: Read only
##### waf.replaceFilter
- 类型: ``bool``
- 默认值: ``false``
- 用法: 当返回内容类型为text/html、text/plain、json、xml时通知南墙替换返回页面内容则设置waf.replaceFilter = true可用于数据脱敏、敏感词替换等场景。
- Type: ``bool``
- Value: ``false``
- Usage: When the response content type is text/html, text/plain, json, or xml, notify the UUSEC WAF to replace the returned page content. Set waf.replaceFilter to true, which can be used in scenarios such as data anonymization and sensitive word replacement.
##### 规则示例
##### Rule example:
```lua
--[[
规则名称: 数据脱敏
过滤阶段: 返回页面阶段
危险等级: 中危
规则描述: 对返回页面中的身份证和手机号进行*替换脱敏
Rule Name: Data Mask
Filtering stage: Response body phase
Threat level: Medium
Rule description: Replace and desensitize the ID card and phone number with * on the response page
--]]
@ -265,7 +265,7 @@ if waf.respContentLength == 0 or waf.respContentLength >= 2097152 then
return
end
-- 只保留身份证号前2位和后2位
-- Only the first two digits and the last two digits of the ID number number are reserved
local newstr, n, err = waf.rgxGsub(waf.respBody, [[\b((1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|[7-9]1)\d{4}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])\b]], function(m)
return m[0]:sub(1, 2) .. "**************" .. m[0]:sub(-2)
end, "jos")
@ -275,11 +275,11 @@ if not newstr then
end
if n > 0 then
waf.respBody = newstr
-- 通知南墙进行数据替换
-- Notify the UUSEC WAF to replace the data
waf.replaceFilter = true
end
-- 只保留手机号前3位和后4位
-- Only retain the first 3 and last 4 digits of the phone number
newstr, n, err = waf.rgxGsub(waf.respBody, [[\b1(?:(((3[0-9])|(4[5-9])|(5[0-35-9])|(6[2,5-7])|(7[0135-8])|(8[0-9])|(9[0-35-9]))[ -]?\d{4}[ -]?\d{4})|((74)[ -]?[0-5]\d{3}[ -]?\d{4}))\b]], function(m)
return m[0]:sub(1, 3) .. "****" .. m[0]:sub(-4)
end, "jos")
@ -289,257 +289,256 @@ if not newstr then
end
if n > 0 then
waf.respBody = newstr
-- 通知南墙进行数据替换
waf.replaceFilter = true
end
```
### 规则 API
### Rule functions
#### 规则通用 API
#### Rule API
##### waf.startWith(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 判断字符串 sstr 是否以 dstr 开头
- 返回值: ``true 或 false``
- Parameters: ``sstr is the original string, dstr is the search string``
- Function: Determine whether the string sstr starts with dstr?
- Return values: ``true or false``
##### waf.endWith(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 判断字符串 sstr 是否以 dstr 结尾
- 返回值: ``true 或 false``
- Parameters: ``sstr is the original string, dstr is the search string``
- Function: Determine whether the string sstr ends with dstr?
- Return values: ``true or false``
##### waf.toLower(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将字符串 sstr 转化为小写
- 返回值: ``sstr 小写``
- Parameters: ``sstr is the original string``
- Function: Convert string sstr to lowercase
- Return values: ``lowercase sstr``
##### waf.contains(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 判断字符串 sstr 是否在字符串 dstr
- 返回值: ``true 或 false``
- Parameters: ``sstr is the original string, dstr is the search string``
- Function: Determine whether the string sstr is in the string dstr?
- Return values: ``true or false``
##### waf.regex(sstr,pat,ext)
- 参数: ``sstr 为原字符串pat 为正则表达式ext 为正则属性``
- 功能: 在字符串 sstr 中匹配正则表达式 pat用法同ngx.re.match
- 返回值: ``所有匹配项、错误``
- Parameters: ``sstr is the original string, pat is the regular expression, and ext is the regular attribute``
- Function: Match regular expression pat in string sstr, with the same usage as [ngx.re.match](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#ngxrematch)
- Return values: ``All matches, error``
##### waf.rgxMatch(sstr,pat,ext)
- 参数: ``sstr 为原字符串pat 为正则表达式ext 为正则属性``
- 功能: 在字符串 sstr 中匹配正则表达式 pat
- 返回值: ``true 或 false``
- Parameters: ``sstr is the original string, pat is the regular expression, and ext is the regular attribute``
- Function: Match regular expression pat in string sstr
- Return values: ``true or false``
##### waf.rgxGmatch(sstr,pat,ext)
- 参数: ``sstr 为原字符串pat 为正则表达式ext 为正则属性``
- 功能: 在字符串 sstr 中匹配正则表达式 pat用法同ngx.re.gmatch
- 返回值: ``迭代器iterator,错误err``
- Parameters: ``sstr is the original string, pat is the regular expression, and ext is the regular attribute``
- Function: Match regular expression pat in string sstr, with the same usage as [ngx.re.gmatch](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#ngxregmatch)
- Return values: ``Iterator, error``
##### waf.rgxSub(subject, regex, replace, options?)
- 参数: ``subject 为原字符串regex 为正则表达式replace 为要替换的字符串options为正则选项``
- 功能: 替换字符串 subject 中正则表达式 regex 匹配到的内容为 replace用法同ngx.re.sub
- 返回值: ``newstr, n, err分别为新字符串、替换个数、错误信息``
- Parameters: ``subject is the original string, regex is the regular expression, replace is the string to be replaced, options is the regular option``
- Function: Replace the content matched by the regular expression 'regex' in the string subject with 'replace', with the same usage as [ngx.re.sub](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#ngxresub)
- Return values: ``newstr, n, and err represent the new string, number of replacements, and error message, respectively``
##### waf.rgxGsub(subject, regex, replace, options?)
- 参数: ``subject 为原字符串regex 为正则表达式replace 为要替换的字符串options为正则选项``
- 功能: 替换字符串 subject 中所有正则表达式 regex 匹配到的内容为 replace用法同ngx.re.gsub
- 返回值: ``newstr, n, err分别为新字符串、替换个数、错误信息``
- Parameters: ``subject is the original string, regex is the regular expression, replace is the string to be replaced, options is the regular option``
- Function: Replace all contents matched by the regular expression 'regex' in the string 'subject' with 'replace', with the same usage as [ngx.re.gsub](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#ngxregsub)
- Return values: ``newstr, n, and err represent the new string, number of replacements, and error message, respectively``
##### waf.kvFilter(v,match,valOnly)
- 参数: ``v 为要匹配对象match 为匹配函数,valOnly 为 true 则只匹配 value``
- 功能: 用于匹配 cookie、queryString 等 keyvalue 键值对数据,在对象 v 中用 match 函 数匹配内容
- 返回值: ``true,匹配内容或 false,nil``
- Parameters: ``v is the object to be matched, match is the matching function, and valOnly is true to match only value``
- Function: Used to match cookie, query string, and other key value pairs of data, using the match function to match content in object v
- Return values: ``true, matches content or false, nil``
##### waf.knFilter(v,match,p)
- 参数: ``v 为要匹配对象match 为匹配函数p 为 1 时匹配上传文件名,为 0 时文件内容``
- 功能: 用于过滤上传文件信息,在对象 v 中用 match 函数匹配内容
- 返回值: ``true,匹配内容或 false,nil``
- Parameters: ``v is the object to be matched, match is the matching function, when p is 1, match the uploaded file name, and when p is 0, match the file content``
- Function: Used to filter uploaded file information and match content in object v using the match function
- Return values: ``true, matches content or false, nil``
##### waf.jsonFilter(v, match,parsed,valOnly)
- 参数: ``v 为要匹配对象match 为匹配函数parsed 为 false 时解析类型为字符串 v 值,为 true 时解析类型为 table 的 v 值, valOnly 为 true 则只匹配 value``
- 功能: 用于遍历过滤请求中的 json 数据,在对象 v 中用 match 函数匹配内容
- 返回值: ``true,匹配内容或 false,nil``
- Parameters: ``v is the object to be matched, match is the matching function, when parsed as false, the parsing type is string v value, when parsed as true, the parsing type is table v value, and when valOnly is true, only value is matched``
- Function: Used to traverse and filter JSON data in requests, and use the match function to match content in object v
- Return values: ``true, matches content or false, nil``
##### waf.base64Decode(str)
- 参数: ``str 为要解码的 base64 字符串``
- 功能: 用于解码 base64 数据为明文数据
- 返回值: ``明文字符串或 nil``
- Parameters: ``str is the base64 string to be decoded``
- Function: Used to decode base64 data into plaintext data
- Return values: ``plaintext or nil``
##### waf.checkSQLI(str, level?)
- 参数: ``str 为要检测的字符串level可省略为严格等级数值越大越严格范围0至3``
- 功能: 基于语义引擎检测 sql 注入攻击
- 返回值: ``true 或 false``
- Parameters: ``str is the string to be detected; level can be omitted, it is a strict level, the larger the value, the stricter it is, ranging from 0 to 3``
- Function: Detecting SQL injection attacks based on semantic engine
- Return values: ``true or false``
##### waf.checkRCE(str, level?)
- 参数: ``str 为要检测的字符串level可省略为严格等级数值越大越严格范围0至3``
- 功能: 基于语义引擎检测命令注入攻击
- 返回值: ``true 或 false``
- Parameters: ``str is the string to be detected; level can be omitted, it is a strict level, the larger the value, the stricter it is, ranging from 0 to 3``
- Function: Detecting command injection attacks based on semantic engine
- Return values: ``true or false``
##### waf.checkPT(str)
- 参数: ``str 为要检测的字符串``
- 功能: 基于语义引擎检测路径遍历攻击
- 返回值: ``true 或 false``
- Parameters: ``str is the string to be detected``
- Function: Detecting path traversal attacks based on semantic engine
- Return values: ``true or false``
##### waf.checkXSS(str)
- 参数: ``str 为要检测的字符串``
- 功能: 基于语义引擎检测xss攻击
- 返回值: ``true 或 false``
- Parameters: ``str is the string to be detected``
- Function: Detecting XSS attacks based on semantic engine
- Return values: ``true or false``
##### waf.strCounter(sstr,dstr)
- 参数: ``sstr 为原字符串dstr 为查找字符串``
- 功能: 计算字符串 dstr 在 sstr 中出现的次数
- 返回值: ``整数``
- Parameters: ``sstr is the original string, dstr is the search string``
- Function: Calculate the number of times the string dstr appears in sstr
- Return values: ``integer``
##### waf.trim(str)
- 参数: ``str 为原字符串``
- 功能: 去掉字符串 str 两边的空格
- 返回值: ``去掉两边空格后的字符串``
- Parameters: ``sstr is the original string``
- Function: Remove spaces on both sides of the string str
- Return values: ``The string after removing the spaces on both sides``
##### waf.inArray(str,arr)
- 参数: ``str 为原字符串arr为字符串数组``
- 功能: 判断字符串 str 是否存在于arr字符串数组中
- 返回值: ``true 或 false``
- Parameters: ``str is the original string, arr is the string array``
- Function: Determine whether the string str exists in the arr string array
- Return values: ``true or false``
##### waf.pmMatch(sstr,dict)
- 参数: ``sstr 为原字符串dict 为查找字典,以 lua 表的形式,如:{“aaa”, “bbb”, “ccc”}``
- Parameters: ``sstr is the original string, dict is the lookup dictionary, in the form of a Lua table, such as {"aaa", "bbb", "ccc"}``
- 功能: 高效多模匹配多个字符串,发现其中一个字符串立即返回
- Function: Efficient multi-mode matching of multiple strings, returns immediately upon discovering one of the strings
- 返回值: ``true字典中的字符串或 falsenil``
- Return values: ``true, string in dictionary or false, nil``
##### waf.urlDecode(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将 sstr 进行 url 解码还原成字符串
- 返回值: ``解码后的字符串``
- Parameters: ``sstr is the original string``
- Function: Decode the URL of sstr
- Return values: ``Decoded string``
##### waf.htmlEntityDecode(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将字符串 sstr 进行 html 实体解码
- 返回值: ``解码后的字符串``
- Parameters: ``sstr is the original string``
- Function: Decoding HTML entities from string sstr
- Return values: ``Decoded string``
##### waf.hexDecode(sstr)
- 参数: ``sstr 为原字符串``
- 功能: 将字符串 sstr 进行 hex 解码
- 返回值: ``解码后的字符串``
- Parameters: ``sstr is the original string``
- Function: Decode the string sstr using hex decoding
- Return values: ``Decoded string``
##### waf.block(reset)
- 参数: ``reset 为true时直接重置tcp不返回任何内容否则返回403页面``
- 功能: 拦截客户端请求直接重置客户端连接或返回403页面与return搭配使用
- Parameters: ``When reset to true, directly reset TCP without returning any content, otherwise return page 403``
- Function: Intercept client requests, directly reset client connection or return 403 page, used in conjunction with return
##### waf.checkRobot(waf, expireTime?, max?)
- 参数: ``waf 为固定waf对象expireTime 为通过验证后不再进行验证的时长单位秒默认值600max 为通过验证后可访问最大请求次数超过该值后重新显示验证页面默认值18000``
- 功能: 检测机器人攻击如数据爬虫、扫描攻击、CC拒绝服务攻击等并生成滑动旋转图片验证码与return搭配使用
- Parameters: ``waf is a fixed lua object; After successful authentication, if the current IP time reaches expireTime (in seconds, default value of 600, does not expire when value is 0) or the number of requests reaches max (default value of 18000, unlimited when value is 0), the verification page will be displayed again``
- Function: Detect robot attacks such as data crawlers, scanning attacks, CC denial of service attacks, etc., and generate sliding and rotating image verification, which can be used in conjunction with returns
##### waf.checkTurnstile(waf, siteKey, secret, expireTime?, max?)
- 参数: ``waf 为固定waf对象siteKey 和 secret 为Cloudflare Turnstile的组件参数expireTime为通过验证后不再进行验证的时长单位秒默认值600max为通过验证后可访问最大请求次数超过该值后重新显示验证页面默认值18000``
- 功能: 使用Cloudflare Turnstile来进行自动人机验证检测机器人攻击如数据爬虫、扫描攻击、CC拒绝服务攻击等与return搭配使用
- Parameters: ``waf is a fixed lua object; siteKey and secret are configuration parameters for Cloudflare Turnstile; After successful authentication, if the current IP time reaches expireTime (in seconds, default value of 600, does not expire when value is 0) or the number of requests reaches max (default value of 18000, unlimited when value is 0), the verification page will be displayed again``
- Function: Use Cloudflare Turnstile for automatic human-machine verification, detect robot attacks such as data crawlers, scanning attacks, CC denial of service attacks, etc., and use it in conjunction with return
##### waf.redirect(uri, status?)
- 参数: ``uri为重定向的链接status为返回http状态可选默认为302``
- 功能: 重定向客户端请求到新的链接与return搭配使用
- Parameters: ``URI is the redirected link, status is the return HTTP status (optional), default is 302``
- Function: redirects client requests to a new link, used in conjunction with a return
##### waf.ip2loc(ip, lang?)
- 参数: ``ip为要查询的ip地址lang为显示语言如en、zh-CN等默认值"zh-CN"``
- 功能: 将ip地址转化为国家、省份、城市中文地理位置信息
- 返回值: ``country、 province、 city中国、湖北省、武汉市``
- Parameters: ``ip is the IP address to be queried, lang is the display language, such as en, zh-CN, etc. The default value is "en"``
- Function: Convert IP addresses into geographic location information for country, province, and city
- Return values: ``country、 province、 city``
##### waf.errLog(...)
- 参数: ``1个或多个字符串``
- 功能: 记录错误日志到/uuwaf/logs/error.log中
- 返回值: ``无``
- Parameters: ``One or more strings``
- Function: Record error logs to /uuwaf/logs/error. log
- Return values: ``None``
## :melon: 插件
## :melon: Plugin
?>南墙支持强大的插件扩展功能方便用户自行实现一些特有功能。插件模板见https://github.com/Safe3/uuWAF/blob/main/src/plugins/kafka-logger.lua 一个kafka日志记录插件。欢迎各位贡献安全插件详情见https://waf.uusec.com/#/guide/contribute 。
?>The UUSEC WAF supports powerful plugin extension functions, making it convenient for users to implement some unique features on their own. The plugin template can be found at: https://github.com/Safe3/uuWAF/blob/main/src/plugins/kafka-logger.lua , a Kafka logging plugin. Welcome everyone to contribute security plugins. For details, please refer to: https://uuwaf.uusec.com/#/guide/contribute .
### 插件编写
### Plugin development
一个标准的插件包含以下几个部分每个部分若无功能实现可省略每个大阶段分为pre和post前后两个小阶段分别代表南墙逻辑处理执行前和南墙逻辑处理执行后。南墙v4.1.0之前的版本没有小阶段请使用req_filter、resp_header_filter、resp_body_filter、log。
A standard plugin consists of the following parts, each of which can be omitted if there is no functional implementation. Each major stage is divided into two sub stages, pre and post, representing the pre execution and post execution of the UUSEC WAF logic processing, respectively.
```lua
local _M = {
version = 0.1, -- 插件版本
name = "kafka-logger" -- 插件名称
version = 0.1, -- Plugin version
name = "kafka-logger" -- Plugin name
}
-- ssl阶段前过滤
-- SSL pre phase filtering
function _M.ssl_pre_filter(waf)
end
-- ssl阶段后过滤
-- SSL phase post filtering
function _M.ssl_post_filter(waf)
end
-- 请求阶段前过滤
-- Pre request filtering phase
function _M.req_pre_filter(waf)
end
-- 请求阶段后过滤
-- Post request filtering phase
function _M.req_post_filter(waf)
end
-- 返回header阶段前过滤
-- Filter before response header phase
function _M.resp_header_pre_filter(waf)
end
-- 返回header阶段后过滤
-- Filter after response header phase
function _M.resp_header_post_filter(waf)
end
-- 返回body阶段前过滤
-- Filter before response body phase
function _M.resp_body_pre_filter(waf)
end
-- 返回body阶段后过滤
-- Filter after response body phase
function _M.resp_body_post_filter(waf)
end
-- 日志记录阶段前过滤
-- Filtering before the logging phase
function _M.log_pre_filter(waf)
end
-- 日志记录阶段后过滤
-- Filtering after the logging phase
function _M.log_post_filter(waf)
end
@ -549,50 +548,50 @@ return _M
- #### SSL阶段过滤函数
- #### SSL phase filtering function
- 该阶段用于获取客户端请求的域名和设置SSL证书waf变量的值为nil。
- This stage is used to obtain the domain name requested by the client and set the SSL certificate. The value of the "waf" variable is nil.
- #### 请求阶段过滤函数
- #### Request phase filtering function
- 该阶段用于过滤客户端发送的请求数据waf变量同规则变量一致可自行实现该函数功能。
- This stage is used to filter the request data sent by the client. The "waf" variable is consistent with the rule variable and can be implemented independently.
- #### 返回header阶段过滤函数
- #### Response header phase filtering function
- 该阶段用于过滤服务器返回的header头数据waf变量同规则变量一致可自行实现该函数功能。
- This stage is used to filter the header data returned by the server. The "waf" variable is consistent with the rule variable and can be implemented independently.
- #### 返回body阶段过滤函数
- #### Response body phase filtering function
- 该阶段用于过滤服务器返回的body内容数据waf变量同规则变量一致可自行实现该函数功能。
- This stage is used to filter the body content data returned by the server. The "waf" variable is consistent with the rule variable and can be implemented independently.
- #### 日志记录阶段执行函数
- #### Logging phase filtering function
- 该阶段用于日志记录阶段做一些日志处理与推送waf变量同规则变量一致可自行实现该函数功能。
- This stage is used for log processing and push during the logging phase. The "waf" variable is consistent with the rule variable and can be implemented independently.
### 插件使用
### Plugin usage
1. 将插件文件如kafka-logger.lua 放于/uuwaf/waf/plugins/目录并修改文件扩展名为kafka-logger.w。
1. Place the plugin file, such as kafka-logger.lua, in the /uuwaf/waf/plugins/ directory and modify the file extension to kafka-logger.w
2. 修改/uuwaf/conf/uuwaf.conf文件在init_by_lua_block段中waf = require("waf")下新增一行waf:use("插件名称")如启用kafka-logger.w插件的示例如下
2. Modify the /uuwaf/conf/uuwaf.conf file and add a new line of `waf:use("plugin name")` under `waf = require("waf")` in the init_by_lua_block section. For example, an example of enabling the kafka-logger.w plugin is as follows:
```lua
waf = require("waf")
waf:use("kafka-logger")
```
3. 执行/uuwaf/waf-service -s restart使插件生效如果插件代码运行有问题可以在/uuwaf/logs/error.log中查看详细错误信息。
3. Execute /uuwaf/waf-service -s restart to make the plugin effective. If there are any issues with the plugin code running, you can view detailed error information in /uuwaf/logs/error.log.
### 常用功能函数
### Common functions
#### 各阶段数据共享
#### Data sharing at each phase
##### waf.ctx
有时为了在各个执行函数间共享同一个数据可以通过给waf.ctx赋值来实现
Sometimes, in order to share the same data among executing functions, it is possible to assign values to waf.ctx, such as:
```lua
function _M.resp_body_pre_filter(waf)
@ -606,7 +605,7 @@ end
#### 记录错误日志
#### Record error logs
```lua
local log = require("waf.log")
@ -616,32 +615,32 @@ local log = require("waf.log")
##### log.errLog(...)
- 参数: ``可变参数,类型为字符串``
- 功能: 将信息写入错误日志/uuwaf/logs/error.log
- 返回值: ``无``
- Parameters: ``Variable parameter, of type string``
- Function: Write error log to /uuwaf/logs/error. log
- Return values: ``None``
##### log.utf8(str)
- 参数: ``字符串``
- 功能: 将str字符编码转换为utf-8编码防止数据写入数据库或json编码时出错
- 返回值: ``字符串``
- Parameters: ``string``
- Function: Convert str character encoding to UTF-8 encoding to prevent errors when writing data to the database or JSON encoding
- Return values: ``string``
##### log.getReq()
- 参数: ``无``
- 功能: 获取客户端http请求信息
- 返回值: ``字符串``
- Parameters: ``None``
- Function: Retrieve client HTTP request information
- Return values: ``string``
##### log.encodeJson(obj)
- 参数: ``lua table对象``
- 功能: 将lua table对象转化json字符串
- 返回值: ``json字符串``
- Parameters: ``lua table``
- Function: Convert Lua table objects into JSON strings
- Return values: ``json string``
##### log.broker(func...)
- 参数: ``func为函数可变参数为传给函数func的参数``
- 功能: 代理执行函数func并传参。
- 返回值: ``无``
- Parameters: ``"func" is a function, and the mutable parameter is the parameter passed to the function "func"``
- Function: Proxy executes function "func" and passes parameters.
- Return values: ``None``
:smile: 其它隐藏功能彩蛋,由用户自行去发掘。
:smile:Other hidden function Easter eggs can be discovered by users themselves.

View File

@ -1,81 +1,81 @@
# 产品介绍
# Introduction
!> **南墙**WEB应用防火墙简称`uuWAF`)是有安科技推出的一款全方位网站防护产品,率先实现了**流量层**、**系统层**、**运行时层**3层纵深防御功能。通过有安科技专有的WEB入侵异常检测等技术结合有安科技团队多年应用安全的攻防理论和应急响应实践经验积累的基础上自主研发而成。协助各级政府、企/事业单位全面保护WEB应用安全实现WEB服务器的全方位防护解决方案。
!> **UUSEC WAF** Web Application Firewall is an industrial grade free, high-performance, and highly scalable web application and API security protection product that supports AI and semantic engines. It is a comprehensive website protection product launched by UUSEC Technology, which first realizes the three-layer defense function of traffic layer, system layer, and runtime layer.
## :dart: 技术优势 <!-- {docsify-ignore} -->
:ophiuchus: 智能的0day防御
## :dart: Advantages <!-- {docsify-ignore} -->
:ophiuchus: Intelligent 0-day defense
南墙创新性的运用机器学习技术,使用`异常检测算法`对http正常与攻击流量进行区分识别并对正常流量进行白名单威胁建模。通过`机器学习算法`自动学习正常流量中的参数特征并转化成对应的参数白名单规则库可以在面对各种突发0day漏洞时无需添加规则即可拦截攻击免除网站管理者一出现漏洞就需挑灯夜战升级的痛苦。
UUSEC WAF innovatively applies machine learning technology, using anomaly detection algorithms to distinguish and identify HTTP normal and attack traffic, and models whitelist threats to normal traffic. By using machine learning algorithms to automatically learn the parameter characteristics of normal traffic and convert them into corresponding parameter whitelist rule libraries, it is possible to intercept attacks without adding rules when facing various sudden 0-day vulnerabilities, eliminating the pain of website managers having to work late to upgrade as soon as vulnerabilities appear.
:taurus: 极致的CDN加速
:taurus: Ultimate CDN acceleration
南墙自研超越nginx商业版`proxy_cache_purge`才具备的任意缓存清理功能nginx商业版只支持*模式匹配的方式清理缓存南墙进一步支持正则表达式匹配url路径的缓存清理方式相比nginx商业版具备更高的灵活性和实用性。用户可以在享受极致CDN加速的同时更方便的解决缓存过期问题。
UUSEC self-developed cache cleaning feature surpasses the arbitrary cache cleaning function only available in the commercial version of nginx, proxy_cache_purge. The commercial version of nginx only supports * pattern matching to clean the cache, while UUSEC WAF further supports regular expression matching URL path cache cleaning, which has higher flexibility and practicality compared to the commercial version of nginx. Users can enjoy ultimate CDN acceleration while more conveniently solving cache expiration issues.
:virgo: 强大的主动防御
:virgo: Powerful proactive defense
南墙自研的主机`主动防御`和`RASP`功能可以在系统层和应用运行时层实现更加强大双层防御可以有效防止0day漏洞攻击主机层主动防御可以在系统内核层拦截底层攻击如限制进程的网络通信、进程创建、文件读写、系统提权、系统溢出攻击等。运行时应用自防御RASP则插入java JVM、php Zend等运行时引擎中有效跟踪运行时上下文并拦截各种web 0day漏洞攻击。
The self-developed host 'active defense' and 'RASP' functions of UUSEC WAF can achieve more powerful dual layer defense at the system layer and application runtime layer, effectively preventing zero day vulnerability attacks. Host layer active defense can intercept low-level attacks at the system kernel layer, such as restricting process network communication, process creation, file read and write, system privilege escalation, system overflow attacks, etc. Runtime application self-defense RASP is inserted into runtime engines such as Java JVM and PHP Zend to effectively track runtime context and intercept various web 0-day vulnerability attacks.
:libra: 先进的语义引擎
:libra: Advanced semantic engine
南墙采用业界领先的`SQL、XSS、RCE、LFI` 4种基于语义分析的检测引擎结合多种深度解码引擎可对`base64、json、form-data`等HTTP内容真实还原从而有效抵御各种绕过WAF的攻击方式并且相比传统正则匹配具备准确率高、误报率低、效率高等特点管理员无需维护庞杂的规则库即可拦截多种攻击类型。
UUSEC WAF adopts four industry-leading semantic analysis based detection engines, namely SQL, XSS, RCE, and LFI. Combined with multiple deep decoding engines, it can truly restore HTTP content such as base64, JSON, and form data, effectively resisting various attack methods that bypass WAF. Compared with traditional regular matching, it has the characteristics of high accuracy, low false alarm rate, and high efficiency. Administrators do not need to maintain a complex rule library to intercept multiple types of attacks.
:gemini: 高级的规则引擎
:gemini: Advanced rule engine
南墙积极运用`nginx`和`luajit`的高性能、高灵活性特点除了提供对普通用户友好性较好的传统规则创建模式还提供了高扩展性、高灵活性的lua脚本规则编写功能使得有一定编程功底的高级安全管理员可以创造出一系列传统WAF所不能实现的高级漏洞防护规则用户可以编写一系列插件来扩展WAF现有功能。从而使得在拦截一些复杂漏洞时可以更加得心应手。
UUSEC WAF actively utilizes the high-performance and highly flexible features of nginx and luajit. In addition to providing a traditional rule creation mode that is user-friendly for ordinary users, it also offers a highly scalable and flexible Lua script rule writing function, allowing advanced security administrators with certain programming skills to create a series of advanced vulnerability protection rules that traditional WAF cannot achieve. Users can write a series of plugins to extend the existing functions of WAF. This makes it easier to intercept complex vulnerabilities.
## :fire: 功能对比 <!-- {docsify-ignore} -->
## :fire: Pricing <!-- {docsify-ignore} -->
南墙为您提供了丰富而强大的各种web安全和api防护功能社区版可能是你见过的最强免费WAAP产品。同时南墙也为商业用户提供了功能更强的商业版产品功能对比如下
UUSEC WAF provides you with rich and powerful web security and API protection features, and the Community Edition may be the strongest free WAAP product you have ever seen. At the same time, UUSEC WAF also provides a more powerful commercial version for commercial users. The product features are compared as follows:
| <img width=20/>功能项<img width=20/> |<img width=50/>社区版<img width=50/>|<img width=50/>专业版<img width=50/>|<img width=50/>商业版<img width=50/>|
| <img width=20/>Feature<img width=20/> |<img width=50/>Community Edition<img width=50/>|<img width=50/>Professional Edition<img width=50/>|<img width=50/>Business Edition<img width=50/>|
| :----------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------: |
| 价格 |免费|2999/年|按需定制|
| 站点配置 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 漏洞防护 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| CC防护 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 后门检测 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 业务安全 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| CDN加速 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 高级规则 | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 插件扩展 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 合规审计 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 日志报表 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 地区限制 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 负载均衡 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 拦截页面 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 等级保护 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 免费证书 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 多用户权限 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 机器学习 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 增强规则 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 数据脱敏 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 技术支持 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 主机防御 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Price |Free|$499/year|Custom|
| Site management | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Vulnerability protection | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| CC protection | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Backdoor detection | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Business Security | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| CDN acceleration |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Advanced rules | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>| <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Plugin extension |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Compliance audit |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Log report |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Regional restrictions |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Load balancing |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Intercept page |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Grade protection |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Free certificates |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Multi user permissions |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Machine learning |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Enhance rules |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Data mask |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| Technical support |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Host defense |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| RASP |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |
| 集群管理 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| 定制开发 |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Cluster management |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
| Customized development |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> |<svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#c33" stroke="#c33" stroke-width="4" stroke-linejoin="round"/><path d="M29.6567 18.3432L18.343 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.3433 18.3432L29.657 29.6569" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> | <svg width="24" height="24" viewBox="0 0 48 48" fill="none"><path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#3c3" stroke="#3c3" stroke-width="4" stroke-linejoin="round"/><path d="M16 24L22 30L34 18" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>|
## :art: 界面预览 <!-- {docsify-ignore} -->
## :art: Screenshots <!-- {docsify-ignore} -->
南墙为你提供了简单易用的WAF后台管理界面安装完成后所有操作都可以在浏览器中完成所有配置无需重启立即生效远超市面上大部分免费WAF产品如`ModSecurity`,如下:
UUSEC WAF provides you with a simple and easy-to-use WAF backend management interface. After installation, all operations can be completed in the browser, and all configurations take effect immediately without restarting, far exceeding most free WAF products on the market such as ModSecurity, as follows:
:oden: 管理后台
:oden: Management
<img src="https://waf.uusec.com/_media/waf.png" style="width: 98%;" class="sd"/>
<img src="https://uuwaf.uusec.com/_media/waf.png" style="width: 98%;" class="sd"/>
:package: 规则展示
:package: Rules
![](https://waf.uusec.com/_media/rule.png)
![](https://uuwaf.uusec.com/_media/rule.png)

View File

@ -1,17 +1,17 @@
- <span class="iconfont icon-atom"></span> 指南
- [<span class="iconfont icon-fly"></span> 产品介绍](guide/)
- [<span class="iconfont icon-page"></span> 技术优势](guide/#dart-技术优势)
- [<span class="iconfont icon-star"></span> 功能对比](guide/#fire-功能对比)
- [<span class="iconfont icon-mix"></span> 界面预览](guide/#art-界面预览)
- [<span class="iconfont icon-wxapp"></span> 快速入门](guide/install.md)
- [<span class="iconfont icon-component"></span> 配置要求](guide/install?id=%e2%99%a8%ef%b8%8f%e9%85%8d%e7%bd%ae%e8%a6%81%e6%b1%82)
- [<span class="iconfont icon-install"></span> 一键安装](guide/install?id=%f0%9f%9a%80%e4%b8%80%e9%94%ae%e5%ae%89%e8%a3%85)
- [<span class="iconfont icon-router"></span> 开始使用](guide/begin.md)
- [<span class="iconfont icon-crown"></span> 事前准备](guide/begin#beginner-事前准备)
- [<span class="iconfont icon-matrix"></span> 登录后台](guide/begin#computer-登录后台)
- [<span class="iconfont icon-intro1"></span> API接口](/api/README)
- [<span class="iconfont icon-satellite"></span> 常见问题](guide/problems)
- [<span class="iconfont icon-alert"></span> 贡献捐赠](guide/contribute.md)
- [<span class="iconfont icon-discord"></span> 加入讨论](guide/discuss.md)
- [<span class="iconfont icon-nut"></span> 更新日志](CHANGELOG.md)
- <span class="iconfont icon-atom"></span> Guide
- [<span class="iconfont icon-fly"></span> Introduction](guide/)
- [<span class="iconfont icon-page"></span> Advantages](guide/#dart-Advantages)
- [<span class="iconfont icon-star"></span> Pricing](guide/#fire-Pricing)
- [<span class="iconfont icon-mix"></span> Screenshots](guide/#art-Screenshots)
- [<span class="iconfont icon-wxapp"></span> Quick start](guide/install.md)
- [<span class="iconfont icon-component"></span> Requirements](guide/install?id=%e2%99%a8%ef%b8%8f%e9%85%8d%e7%bd%ae%e8%a6%81%e6%b1%82)
- [<span class="iconfont icon-install"></span> Installation](guide/install?id=%f0%9f%9a%80%e4%b8%80%e9%94%ae%e5%ae%89%e8%a3%85)
- [<span class="iconfont icon-router"></span> Usage](guide/begin.md)
- [<span class="iconfont icon-crown"></span> Prepare](guide/begin#beginner-Prepare)
- [<span class="iconfont icon-matrix"></span> Management](guide/begin#computer-Management)
- [<span class="iconfont icon-intro1"></span> API](/api/README)
- [<span class="iconfont icon-satellite"></span> FAQ](guide/problems)
- [<span class="iconfont icon-alert"></span> Contribute](guide/contribute.md)
- [<span class="iconfont icon-discord"></span> Discuss](guide/discuss.md)
- [<span class="iconfont icon-nut"></span> Changelog](CHANGELOG.md)

View File

@ -1,17 +1,17 @@
# 开始使用
# Usage
经过前面的安装和配置,接下来可以开始使用了
After the previous installation and configuration, you can now start using it
## :beginner: 事前准备 <!-- {docsify-ignore} -->
?> 如果你还不熟悉南墙,建议先阅读 [南墙WAF使用手册](https://waf.uusec.com/南墙WAF使用手册.pdf)。
## :beginner: Prepare <!-- {docsify-ignore} -->
?> If you are not familiar with the UUSEC WAF yet, it is recommended to read [it](/api/README) first.
## :computer: 登录后台 <!-- {docsify-ignore} -->
## :computer: Management <!-- {docsify-ignore} -->
?> 浏览器打开 https://127.0.0.1:4443/ 默认用户名admin密码Passw0rd!
?> Open browser https://127.0.0.1:4443/ , Default username: admin, password: Passw0rd!
!> 注意登录后请及时新建不易猜解用户名的新管理员用户删除默认admin用户并开启动态口令以保证WAF管理后台账户安全。由于后台动态口令采用的是安全性更高的HMAC-SHA256算法与一般动态口令客户端不兼容这里建议iOS用户使用 [Google Authenticator](https://apps.apple.com/cn/app/google-authenticator/id388497605),安卓用户使用 [FreeOTP](https://waf.uusec.com/freeotp.apk)。
!> Attention: After logging in, please promptly create a new administrator user whose username is difficult to guess, delete the default admin user, and enable dynamic passwords to ensure the security of WAF management backend accounts. Due to the use of the more secure HMAC-SHA256 algorithm for OTP, which is not compatible with general OTP clients, it is recommended that iOS users use [Google Authenticator](https://apps.apple.com/us/app/google-authenticator/id388497605), android users using [FreeOTP](https://waf.uusec.com/freeotp.apk).

View File

@ -1,23 +1,22 @@
# 贡献捐赠
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 打赏或贡献功能插件和安全规则 。
# Contribute
The development of UUSEC WAF cannot be separated from every contributor in the community. We hope that everyone will actively give rewards or contribute functional plugins and safety rules to Nanqiang.
## :gift_heart: 参与方法 <!-- {docsify-ignore} -->
?> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/src/rules
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/src/plugins
- PR 中根据 Pull Request 的模板填写规则或插件信息
- 内部审核 PR确定是否合并入仓库
- 每次发布新版时CI 拉取 Github 仓库,并将社区的规则和插件打包进社区版共享给大家
## :gift_heart: Participation <!-- {docsify-ignore} -->
?> Contributors submit to the GitHub community repository via PR.
- Rules submission location: https://github.com/Safe3/uuWAF/tree/master/src/rules
- Plugins submission location: https://github.com/Safe3/uuWAF/tree/master/src/plugins
- Fill in rules or plugin information according to the template of Pull Request in PR
- Internal review PR to determine whether to merge into the warehouse
- Every time a new version is released, CI pulls the Github repository and packages the community rules and plugins into the community version to share with everyone
## :gem: 奖励措施 <!-- {docsify-ignore} -->
?> 参与贡献即可获得与 uuWAF 社区版内部大佬技术切磋交流的机会。提交 PR 过程中会有内部大佬审核,帮助改进规则和插件,共同进步。
## :gem: Rewards <!-- {docsify-ignore} -->
?> By participating in the contribution, you will have the opportunity to exchange technical skills with the internal experts of uuWAF Community Edition. During the PR submission process, there will be internal expert review to help improve rules and plugins, and progress together.
- 提交一个规则或插件即可进入 uuWAF 核心贡献者群,参与讨论热点安全技术,且有机会与大佬们面对面交流。
- 对于 uuWAF 商业版年费用户在当年的商业版授权有效期内只需在提交5个插件或规则即可再免费续一年商业升级。
- 参与贡献的人员可永久将你的大名留在规则贡献者名单当中,供所有人瞻仰。
<img src="https://waf.uusec.com/_media/sponsor.jpg" alt="捐赠" height="300px" />
- By submitting a rule or plugin, you can enter the uuWAF core contributor group, participate in discussions on hot security technologies, and have the opportunity to communicate face-to-face with experts.
- For uuWAF Business Edition annual fee users, within the validity period of the business edition authorization in the current year, they only need to submit 5 plugins or rules to renew the business upgrade for another year for free.
- Participants can permanently leave their name on the list of rule contributors for everyone to admire.

View File

@ -1,12 +1,7 @@
# 加入讨论
?> 欢迎各位就 南墙 的各种bug或功能需求及使用问题在如下渠道参与讨论:
# Discuss
?> Welcome to participate in discussions on various bugs, functional requirements, and usage issues related to the uuWAF through the following channels:
- 问题提交:https://github.com/Safe3/uuWAF/issues
- Problem submission: https://github.com/Safe3/uuWAF/issues
- 讨论社区:https://github.com/Safe3/uuWAF/discussions
- Discussion community: https://github.com/Safe3/uuWAF/discussions
- 官方 QQ 群11500614
- 官方微信群:微信扫描以下二维码加入
<img src="https://waf.uusec.com/_media/weixin.jpg" alt="微信群" height="200px" class="sd"/>

View File

@ -1,59 +1,59 @@
# 快速入门
南墙支持一键全自动安装(**Ubuntu或Debian系统请使用Docker版**),全程无需人工干预,给你带来极致体验 。
# Installation
UUSEC WAF supports one click fully automatic installation (for Ubuntu or Debian systems, please use Docker version), without the need for manual intervention, providing you with the ultimate experience.
## ♨️配置要求 <!-- {docsify-ignore} -->
?> 南墙对配置要求极低,详细如下:
## ♨️Requirements <!-- {docsify-ignore} -->
?> The UUSEC WAF has extremely low requirements for configuration, as detailed below:
```
- 处理器64位 1千兆赫(GHz)或更快。
- 内存不小于2G
- 磁盘空间不小于8G
- CPU: 64 bit 1 gigahertz (GHz) or faster.
- Memory: not less than 2GB
- Disk space: not less than 8GB
```
## 🚀一键安装 <!-- {docsify-ignore} -->
?> 南墙安装及其简便,通常在几分钟内即可安装完毕,具体耗时视网络下载情况而定。
## 🚀One click installation <!-- {docsify-ignore} -->
?> The installation of the UUSEC WAF is very simple, usually completed within a few minutes, and the specific time depends on the network download situation.
!> 注意请尽量选择一台纯净Linux x86_64环境的服务器安装因为安装过程会卸载旧的MySQL数据库并重新安装如果没有备份可造成旧的MySQL数据丢失并且南墙采用云WAF反向代理模式默认需要使用80、443端口。
!> Attention: Please try to choose a pure Linux x86_64 environment server for installation, as the installation process will uninstall the old MySQL database and reinstall it. If there is no backup, it may cause the loss of old MySQL data. In addition, the UUSEC WAF adopts cloud WAF reverse proxy mode, which requires the use of ports 80 and 443 by default.
**主机版安装方式如下:**
**The host version installation:**
系统要求RHEL 7及以上兼容x86_64系统如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。
- System requirements: RHEL 7 and above are compatible with x86_64 systems, such as CentOS, Rocky Linux, AlmaLinux, etc.
```bash
sudo yum install -y ca-certificates
curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
curl https://uuwaf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
```
?> 安装成功后会显示 “ 恭喜您,安装成功”
?> After successful installation, it will display "Congratulations, successful installation".
主机版卸载方式如下:
The uninstallation method for the host version is as follows:
```bash
sudo systemctl stop uuwaf && sudo /uuwaf/waf-service -s uninstall && sudo rm -rf /uuwaf
sudo rpm -qa | grep -ie ^percona | xargs yum -y erase
```
**容器版安装方式如下:**
**The docker version installation:**
- 软件依赖Docker 20.10.14 版本以上Docker Compose 2.0.0 版本以上低版本会导致sql数据无法导入以致南墙后台无法登录。
- Software dependencies: Docker version 20.10.14 or above, Docker Compose version 2.0.0 or above, lower versions may cause SQL data to be unable to be imported, resulting in login issues in the UUSEC WAF management.
若遇到无法自动安装Docker Engine请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装。
If you encounter the inability to automatically install Docker Engine, please install it manually.
```bash
curl -fsSL https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
curl -fsSL https://uuwaf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
```
后续可直接执行 `bash ./waf/uuwaf.sh` 来管理南墙容器,包括启动、停止、更新、卸载等。
Subsequently, `bash ./waf/uuwaf.sh` is used to manage the South Wall container, including starting, stopping, updating, uninstalling, etc.
**安装后快速使用入门:**
**Quick Start:**
1. 登录后台访问https://ip:4443 ip为安装南墙的服务器ip地址用户名admin密码Passw0rd!。
2. 添加站点进入站点管理菜单点击添加站点按钮按提示添加站点域名与网站服务器ip。
3. 添加SSL证书进入证书管理菜单点击添加证书按钮上传第二步中域名的https证书和私钥文件。若不添加SSL证书则南墙会自动尝试申请Let's Encrypt免费SSL证书并在证书到期前自动续期。
4. 修改域名DNS指向到域名服务商管理后台把域名DNS A记录的ip地址改为南墙服务器ip地址。
5. 测试连通性访问站点域名查看网站是否能够打开查看返回的http header头server字段是否为uuWAF。
1. Login to the management: Access https://ip:4443 ,the IP address is the server IP address for installing the UUSEC WAF, the default username is "admin", and the default password is "Passw0rd!".
2. Add a site: Go to the "Site" menu, click the "Add Site" button, and follow the prompts to add the site domain name and website server IP.
3. Add SSL certificate: Go to the certificate management menu, click the "Add Certificate" button, and upload the HTTPS certificate and private key file of the domain name. If you do not add an SSL certificate, the UUSEC WAF will automatically attempt to apply for a Let's Encrypt free SSL certificate and renew it automatically before the certificate expires.
4. Change the DNS address of the domain: Go to the domain name service provider's management backend and change the IP address recorded in the DNS A of the domain name to the IP address of the UUSEC WAF server.
5. Test connectivity: Visit the site domain to see if the website can be opened, and check if the returned HTTP header server field is uuWAF.
!> 更多使用过程中碰到问题的解决办法请参考[常见问题](https://waf.uusec.com/#/guide/problems)。
!> For more solutions to problems encountered during use, please refer to [FAQ](https://uuwaf.uusec.com/#/guide/problems).

View File

@ -1,27 +1,27 @@
# 常见问题
> 南墙 的发展离不开社区的每一位用户的支持,欢迎在[github](https://github.com/Safe3/uuWAF)上点个小星星,这里收集常见的使用问题 。
# FAQ
> The development of UUSEC WAF cannot be separated from the support of every user in the community. Welcome to [Github](https://github.com/Safe3/uuWAF) to click on a little star, here to collect common usage questions.
### 🍎 为什么访问网站会出现规则ID为-1的拦截页面 <!-- {docsify-ignore} -->
?> 如果域名没有在南墙站点管理中配置,访问南墙默认会拦截该域名的访问,以防止黑域名指向引起的法律风险。
### 🍎 Why does a blocking page with rule ID -1 appear when accessing a website? <!-- {docsify-ignore} -->
?> If the domain name is not configured in the UUSEC WAF site management, access to the UUSEC WAF will be blocked by default to prevent legal risks caused by black domain name pointing.
### 🍐 经过南墙代理的网站如何获取客户端真实ip <!-- {docsify-ignore} -->
?> 南墙转发给网站的HTTP请求头中会加入X-Waf-Ip字段它的值即为客户端ip也可以通过X-Forwarded-For来获取。
### 🍐 How to obtain the real IP address of the client through the UUSEC WAF proxy website? <!-- {docsify-ignore} -->
?> The HTTP request header forwarded by the UUSEC WAF to the website will include an X-Waf-Ip field, whose value is the client IP, which can also be obtained through X-Forwarded-For.
### 🍑 集群模式下上游网站如何区分不同的南墙来源? <!-- {docsify-ignore} -->
### 🍑 How can upstream websites distinguish different sources of UUSEC WAF in cluster mode? <!-- {docsify-ignore} -->
?> 南墙转发给网站的HTTP请求头中会加入X-Waf-Id字段它的值即为用户在/uuwaf/web/conf/config.json中配置的id值用户可以通过该值来区分网站请求来自那台南墙服务器。
?> The X-Waf-Id field will be added to the HTTP request header forwarded by UUSEC WAF to the website. Its value is the ID value configured by the user in /uuwaf/web/conf/config.json, and the user can use this value to distinguish which UUSEC WAF server the website request comes from.
### 🍋 如何解决南墙Docker版获取的客户端ip为172的问题 <!-- {docsify-ignore} -->
### 🍋 How to solve the problem of obtaining a client IP address of 172 for the Docker version of the UUSEC WAF? <!-- {docsify-ignore} -->
?> 这是部分主机docker网络和firewalld冲突引起的导致南墙获取的客户端访问ip为172开头的容器网关ip。可以把docker网桥加入到防火墙的internal区域手工执行如下命令解决其中wafnet为南墙docker容器的网桥名称。
?> This is caused by a conflict between the Docker network of some hosts and Firewalld, resulting in the client access IP obtained by UUSEC WAF being the container gateway IP starting with 172. You can add the Docker bridge to the internal area of the firewall and manually execute the following command to solve the problem, where wafnet is the bridge name of the Docker container on the UUSEC WAF.
```bash
firewall-cmd --permanent --zone=internal --change-interface=wafnet
@ -29,18 +29,18 @@ firewall-cmd --permanent --zone=internal --change-interface=wafnet
### 🍊 如何查看南墙CDN是否缓存了我们的网页 <!-- {docsify-ignore} -->
### 🍊 How to check if the UUSEC WAF CDN has cached our webpage? <!-- {docsify-ignore} -->
?> 南墙提供了一个X-Waf-Cache返回头用以查看缓存情况如X-Waf-Cache: HIT表示已缓存X-Waf-Cache: MISS表示未缓存。
?> The UUSEC WAF provides an X-Waf-Cache return header to check the cache status, such as X-Waf-Cache: HIT indicating cached, and X-Waf-Cache: MISS indicating uncached.
### 🍍 如何修改南墙管理后台的端口和SSL证书 <!-- {docsify-ignore} -->
### 🍍 How to modify the port and SSL certificate of the UUSEC WAF management ? <!-- {docsify-ignore} -->
?> 南墙管理后台的配置位于/uuwaf/web/conf/config.json中addr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件之后执行systemctl restart uuwaf重启服务使配置生效。
?> The configuration of the UUSEC WAF management is located in /uuwaf/web/conf/config.json, and the value of the addr field is the IP address and port. Replacing the SSL certificate can replace the server.crt and server.key files in the /uuwaf/web/conf/ directory, and then execute `systemctl restart uuwaf` to restart the service for the configuration to take effect.
### 🍈 如何修改南墙反向代理默认监听端口? <!-- {docsify-ignore} -->
### 🍈 How to modify the default listening port of the reverse proxy on the UUSEC WAF? <!-- {docsify-ignore} -->
?> 南墙默认只监听http 80、https 443端口用户可自行在/uuwaf/conf/uuwaf.conf中自定义任意监听端口配置方式请参考nginx 的 [listen](https://nginx.org/en/docs/http/ngx_http_core_module.html#listen) 设置之后执行systemctl restart uuwaf重启服务使配置生效。Docker版用户可以修改docker-compose.yml中的port端口映射。
?> By default, the UUSEC WAF only listens to ports HTTP 80 and HTTPS 443. Users can customize any listening port in /uwaf/conf/uuwaf.conf. Please refer to nginx's [listen](https://nginx.org/en/docs/http/ngx_http_core_module.html#listen) configuration for more information to set up, then execute `systemctl restart uuwaf` to restart the service for the configuration to take effect. Docker users can modify the port mapping in docker-compose.yml.

View File

@ -2,10 +2,10 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>南墙Web应用防火墙 | 一款社区驱动的免费、高性能、高扩展顶级Web应用和API安全防护产品</title>
<title>UUSEC WAF</title>
<link rel="icon" href="/favicon.ico" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="一款社区驱动的免费、高性能、顶级Web应用和API安全防护产品">
<meta name="description" content="A industry-leading free, high-performance, AI and semantic technology web application and API security protection product">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="/_media/vue.css">
<link rel="stylesheet" href="/_media/custom.css">
@ -15,7 +15,7 @@
<div id="app"></div>
<script>
window.$docsify = {
name: '南墙Web应用防火墙',
name: 'UUSEC WAF',
repo: 'https://github.com/Safe3/uuWAF',
loadSidebar: true,
loadNavbar: true,
@ -34,8 +34,8 @@
'/': '/guide/README.md',
},
pagination: {
previousText: '上一章节',
nextText: '下一章节',
previousText: 'Previous',
nextText: 'Next',
},
}
</script>

View File

@ -1 +1 @@
6.1.0
6.2.0

View File

@ -1,9 +1,8 @@
地理位置ip防火墙 - Geo ip firewall
Geo Ip Firewall
简介:
利用系统底层按地理位置对国家或地区的ip地址进行高性能黑白名单访问控制支持x86和arm版Linux服务器。
Introduction:
Utilizing the underlying system to perform high-performance blacklist and whitelist access control on IP addresses of countries or regions based on geographic location, supporting x86 and ARM versions of Linux servers.
使用:
Usage: gif <option> [country code]
Options:
-b <country code> Blacklist mode,deny IPs from the region you specified.Ex:gif -b us,jp
@ -12,11 +11,10 @@ Options:
-u Update myself and ip database
-h, --help Show this help message and exit
快速入门:
1、将gif和cidr.txt上传到指定服务器并赋予gif可执行权限chmod +x gif
2、使用黑名单模式拦截指定地域ip访问服务器如拦截美国、日本ip可以使用命令./gif -b us,jp
3、使用白名单模式只允许指定地域ip可以访问服务器如只允许中国ip访问可以使用命令./gif -w cn,hk,mo,tw
4、可以通过修改cidr.txt来自定义区域ip段格式区域代号 IP段
5、清除所有规则执行命令./gif -c
6、软件和ip库更新执行命令./gif -u
Quick Start:
1. Upload gif and cidr.txt to the specified server and grant gif executable permissions: chmod +x gif
2. To block IP access to servers in a specified region using blacklist mode, such as intercepting IP addresses from the United States or Japan, you can use the command: ./gif -b us,jp
3. Using whitelist mode only allows specified regional IP addresses to access the server. If only Chinese IP addresses are allowed to access, the command can be used: ./gif -w cn,hk,mo,tw
4. You can customize the region IP segment by modifying cidr.txt in the format of region code IP segment
5. Clear all rules and execute the command: ./gif -c
6. Software and IP library updates, execute command: ./gif -u

Some files were not shown because too many files have changed in this diff Show More