JXWAF 介绍
JXWAF 是一款开源的 Web 应用防火墙,可用于防护 SQL 注入漏洞,XSS 漏洞,命令执行漏洞等 OWASP 常见攻击,CC 攻击等,避免网站数据泄露,保障网站可用性和安全性。
功能特性
Web 应用攻击防护
基于语义识别防护引擎防御 SQL 注入、XSS 攻击、Webshell 上传、目录遍历漏洞、命令注入、扫描防护等。
CC 攻击智能防护
对单一源 IP 的访问频率进行控制,同时结合单位时间内的访问数量进行综合防护。
专为 CC 攻击防护研发的人机识别算法,可根据业务负载智能切换防护模式,特别适合海量 IP 慢速请求攻击的防护。
对恶意攻击 IP 实现自动封禁,自动解封,无需人为干预,降低运营成本。
自定义规则防护
支持 IP、URL、BODY、User-Agent 等 HTTP 常见字段的条件组合,支持盗链防护、网站后台保护等防护场景。
IP 黑白名单
快速添加黑白名单,与自定义规则防护添加 IP 黑白名单的区别在于,IP 黑白名单通过 hash 匹配,可大量添加,对性能基本无影响。
地区封禁
基于 IP 所属的国家或地区进行封禁
拦截页面自定义
可自定义告警页面,提高用户体验
产品优势
高精度,低误报
自主研发的语义识别防护引擎避免了传统规则防护引擎因规则叠加而导致性能下降的问题,同时增强检测精准性(低误报、低漏报)。
CC 防护专用人机识别算法
自主研发的区块链人机识别算法适合防护海量 IP 慢速请求攻击,快速识别恶意流量,相比其他人机识别算法(滑块,点击识别等)拥有并发高,占用资源小,对抗性强等优点,目前已在实战中防护住 30 万 qps 的 cc 攻击。
商业级的性能和稳定性
经第三方生产环境部署验证,4 核 8G 的虚拟机服务器上能达到 1 万 qps,硬件配置提升后可达 5 万 qps,已在某上市互联网公司和某消费金融公司全线上线,产品稳定性达到商业 WAF 级别。
应用场景
JXWAF 基于 openresty(nginx+lua)开发,支持云原生部署,用户可以将 JXWAF 部署于阿里云,腾讯云或者自建机房的服务器上,即可以单独部署,也可以集群化部署,配合负载均衡或是 dns 搭建私有云 WAF 集群。
支持对网站的 HTTP,HTTPS,HTTP2 流量进行防护
支持集群部署,嵌入式部署,云 WAF 部署,旁路部署。
JXWAF 可以帮助您解决以下问题:
数据防泄密,避免因注入漏洞,命令执行漏洞等,导致网站核心数据泄露。
CC 攻击防护,阻断恶意请求,保障网站可用性。
业务安全防护。
快速入门
步骤 1: WAF 下载安装
安装(已包含 openresty 安装包)
将代码下载到/tmp 目录,运行 install_waf.sh 文件,jxwaf 将安装在/opt/jxwaf 目录,具体如下:
$ cd /tmp
$ git clone https://github.com/jx-sec/jxwaf.git
$ cd jxwaf
$ sh install_waf.sh
$ 运行后显示类似信息即安装成功:
nginx: the configuration file /opt/jxwaf/nginx/conf/nginx.conf syntax is ok
nginx: [alert] [lua] waf.lua:566: init(): jxwaf init success,waf node uuid is 99d977e8-401b-4ede-a427-94f7170638ce
nginx: configuration file /opt/jxwaf/nginx/conf/nginx.conf test is successful
访问 https://www.jxwaf.com 并注册账号,在全局配置页面获取"api key"和"api password"
访问 https://www.jxwaf.com, 点击 “登陆” 按钮
跳转到登陆页面后,点击 “注册” 按钮
输入邮箱和图片验证码,请注意查看邮件是否被放入垃圾邮箱,正常情况您将接收到如下类似邮件
输入密码和邮箱验证码即可注册成功
登录控制台后,点击 “全局配置” 栏目,即可获取账号的 “api key” 和 “api password”
$cd tools
$python jxwaf_init.py --api_key=a2dde899-96a7-40s2-88ba-31f1f75f1552 --api_password=653cbbde-1cac-11ea-978f-2e728ce88125
api_key 为全局配置页面中"api key"的值,api_password 为"api password"的值,运行完成后,显示类似信息即安装成功
config file: /opt/jxwaf/nginx/conf/jxwaf/jxwaf_config.jsonconfig result:init success,access_id is a20be899-96a6-40b2-88ba-32f111111111,access_secret is a42ca0ca-80b5-8e4b-f250-3dc309ccccccauth result:try to connect jxwaf server auth api_key and api_password,result is True
$ /opt/jxwaf/nginx/sbin/nginx
启动 openresty,openresty 会在启动或者 reload 的时候自动到 jxwaf 管理中心获取用户配置的最新规则,之后会定期同步配置,周期可在全局配置页面设置。
注意:JXWAF 是通过控制台或者 tools 目录下的脚本进行配置,除非您是专业人士,否则请勿擅自修改相关的配置文件
步骤 2: 添加网站
进入控制台后,点击 “网站配置” 进入网站配置页面,点击 “添加网站” 新增要防护的网站。
创建域名后,可以在“网站配置” 页面看到域名的状态
默认情况下,新建域名仅开启 Web 应用安全防护,可通过“防护配置”页面进行修改。
步骤 3: 防护效果验证
网站配置->日志配置->本地日志记录
点击按钮开启本地日志记录
开启本地日志记录功能后,可通过命令 "tail -F /opt/jxwaf/nginx/logs/error.log"实时查看防护情况
假设配置域名为 "tmp.jxwaf.com",则可通过以下命令触发 SQL 注入防护
$ curl "tmp.jxwaf.com/?a= 1' and union select * from ss" $ tail -F /opt/jxwaf/nginx/logs/error.log 2019/08/14 11:21:18 [error] 25247#0: *44956 [lua] log.lua:153: {"host":"tmp.jxwaf.com","upstream_connect_time":"-","deny_arg":"query","logstore":"0fbcea1f-04fafc2f-7454-42fe-876f-b5bf39fff1f0","xxf_addr":"192.144.135.9","status":"403","request_start_time":"2019-08-14 11:21:18","upstream_addr":"-","headers":{"host":"tmp.jxwaf.com","accept":"*\/*","user-agent":"curl\/7.29.0"},"log_type":"protection_log","protection_type":"jxcheck_protection","upstream_bytes_received":"-","request_time":"0.000","upstream_status":"-","upstream_bytes_sent":"-","method":"GET","upstream_response_time":"-","bytes_sent":"336","protection_info":"attack_request","owasp_type":"sql","uuid":"022d7fb3-04e9-4022-a062-920bd71ddb54","uri":"\/","query_string":"a= 1' and union select * from ss","remote_addr":"192.144.135.9","scheme":"http","body":"","version":"1.1"} while logging request, client: 192.144.135.9, server: localhost, request: "GET /?a= 1' and union select * from ss HTTP/1.1", host: "tmp.jxwaf.com
详情的配置文档欢迎查看: docs.jxwaf.com
微信公众号: JXWAF
后续会发布各个业务场景下的最佳实践,欢迎指教