如何在云服务上快速拥有洛甲WAF(Web防火墙)
如何在云服务上快速拥有洛甲WAF(Web防火墙)
洛甲WAF是基于openresty的web防火墙,通过配合后台保护您的数据安全,详情参考节点服务器 luojiawaf_lua(nginx+lua)
Web防火墙能做什么
Web防火墙可以让您更清楚的知道你的服务器运行情况,可以让您的服务器更安全
如何快速在云机上部署洛甲WAF
当下通用的部署方法通常将域名解析到云上的负载均衡,再由负载均衡将连接转发到我们的云服务器上,我们无法直观的了解到哪个请求比如/api/login
请求了多少次,平均请求耗时多少ms,是否需要立即进行数据优化、我们也不知道当下受到攻击否,哪个IP再疯狂的刷我们的接口数据,是否要对其进行封禁、还有新加的服务器必须通过负载进行添加,造成云造号必须要给权限出去等。
现在,我们在云服务器内部署洛甲WAF,将负载均衡解析到洛甲上,然后再通过洛甲将流量转发到指定的服务器上,它提供了API请求的请求数及耗时情况,我们就可以对服务有个直观的概念,哪一个地方要做好调优。它提供了服务器内的配置服务,就可以避免在云上直接操作负载均衡。它提供了有效的策略防护,在自动防SQL注入的同时,可以配置指定IP的限流,配置指定uri的限流。
开始部署
洛甲由节点服务器 luojiawaf_lua(nginx+lua) 做前台的api请求转发和中控服务器后端 luajiawaf_server(django) 做数据的收集统计及相关功能的开启关闭。
代码及环境工具准备
安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 或者 curl -sSL https://get.daocloud.io/docker | sh 或者 curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet| sh -
安装docker-compose
python3 -m pip install --upgrade pip pip config set global.index-url http://mirrors.aliyun.com/pypi/simple pip config set install.trusted-host mirrors.aliyun.com pip3 install docker-compose
安装git并clone代码
apt-get install git mkdir /source && cd /source git clone https://gitee.com/tickbh/luojiawaf_lua git clone https://gitee.com/tickbh/luojiawaf_server
部署依赖仅依赖REDIS数据库
- 云上部署,即直接在云上购买数据库Redis版,得到相应的账号密码和设置安全组略
- 自建Redis这里用的是docker版部署方式
cd /source/luojiawaf_server/compose/redis
创建docker网络,做为与后台网络互通
docker network create luojia-network
这里放着一个对本地监听的6479无密码的redis compose直接运行
docker-compose up -d
检查是否启动成功如下则表示成功
netstat -ano | grep 6479 tcp 0 0 127.0.0.1:6479 0.0.0.0:* LISTEN off (0.00/0/0)
修改配置文件
修改server的配置文件
cd /source/luojiawaf_server cp common/config.yaml config_local.yaml
若你的redis地址不是默认的,请如下修改成对应的
sed -in-place -e 's/redis_back_db/替换的redis地址如redis.xx/g' config_local.yaml sed -in-place -e 's/6479/替换默认的redis端口如6379/g' config_local.yaml sed -in-place -e 's/luojia/替换默认的redis密码/g' config_local.yaml
修改openresty的配置
cd /source/luojiawaf_lua/compose cp luojia.json luojia_local.json
若你的redis地址不是默认的,请如下修改成对应的
sed -in-place -e 's/redis_back_db/替换的redis地址如redis.xx/g' luojia_local.json sed -in-place -e 's/6479/替换默认的redis端口如6379/g' luojia_local.json sed -in-place -e 's/luojia/替换默认的redis密码/g' luojia_local.json
启动服务
启动server
解压缩后台前端
apt-get install unzip cd /source/luojiawaf_server && cp luojia_web_publish.zip ../ && cd .. && unzip luojia_web_publish.zip -x cd /source/luojiawaf_server/compose/full docker-compose up -d
判断是否成功有监听则表示成功
netstat -an | grep "6988\|6987" tcp 0 0 0.0.0.0:6988 0.0.0.0:* LISTEN tcp6 0 0 :::6988 :::* LISTEN
启动openresty
cd /source/luojiawaf_lua/compose docker-compose up -d
判断是否成功有监听则表示成功
netstat -an | grep "80\|443" tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
配置服务
用你的ip加6987端口来访问洛甲后台进行配置,默认用户是luojia/luojia
先配置高防列表,在数据配置/配置高防列表
里进行配置
再配置负载均衡,在数据配置/配置负载均衡
里进行配置
Host填*
则表示任意网址进行都进行转发,填网址则表示对应的网址才进行转发
IP则填入后台服务器的地址,端口则填入相对应的端口,默认80
这里用http://httpbin.org/
来做示范
通过ping httpbin.org
得到他的ip地址52.200.117.68
这时候我们在服务器上运行
curl http://127.0.0.1/get?show_env
如果得到以下返回则表示成功
{ "args": { "show_env": "" }, "headers": { "Accept": "*/*", "Host": "127.0.0.1", "User-Agent": "curl/7.74.0", "X-Amzn-Trace-Id": "Root=1-63ede542-1c25208e20860c337ca6c16f", "X-Forwarded-For": "172.19.0.1, ****", "X-Forwarded-Port": "80", "X-Forwarded-Proto": "http", "X-Nginx-Proxy": "true", "X-Real-Ip": "172.19.0.1" }, "origin": "172.19.0.1, ****", "url": "http://127.0.0.1/get?show_env" }
到这里基本的服务已经打通
其它功能
在请求数据管理
里面的有常用的辅助功能
获取在线IP
可以获取最近3分钟内访问的所有IP列表,访问记录
可以看到这IP请求的api请求
禁止的IP列表
表示被封禁的IP
请求耗时列表
获取所有的api的总耗时,请求总数,平均耗时
获取错误列表
可以快速的帮您定位到因为服务器内部错误的api请求
配置CC规则
在数据配置/配置参数列表
里进行配置
limit_ip:all 值 为 aaa/bbbb 均为数字, aaa表示桶数, bbbb超出桶延时请求的最大数 limit_uri:all 值 为 aaa/bbbb 均为数字, aaa表示桶数, bbbb超出桶延时请求的最大数 limit_ip:ip 对单IP进行限制 为 aaa/bbbb 均为数字, aaa表示桶数, bbbb超出桶延时请求的最大数 limit_uri:ip 对单IP进行限制 为 aaa/bbbb 均为数字, aaa表示桶数, bbbb超出桶延时请求的最大数 not_wait_forbidden_ratio 默认为0.9, 规则判断错序的比例 not_wait_forbidden_min_len 默认为20, 规则判断错序最小值 min_all_visit_times 默认为20, 规则判定总访问次数的起点值 max_visit_idx_num 默认为2, 排序最高的前两台占比 max_visit_ratio 默认为0.85, 即前2条访问量占总比值的比例 default_forbidden_time 默认为600即10分钟, 禁用ip的默认时长 white_ip_check 白名单检查 on 为开启 forbidden_ip_check IP禁止检查 on 为开启 limit_ip_check IP限制检查 on 为开启 limit_uri_check uri限制检查 on 为开启 white_url_check 白url检查 on 为开启 post_attack_check post参数攻击请求on 为开启 url_args_attack urls参数攻击请求on 为开启 default_ip_times_timeout 默认记录访问次数时长 random_record_value 随机记录的值, 100%则填10000
按实际情况进行相应的配置,至此您已经拥有一台完整的WAF了,对于普通项目只需要一台ECS做辅助就够了
项目相关
如果有帮到你的话,可以帮项目的作者加个STAR,希望项目越来越好,传送门由节点服务器 luojiawaf_lua(nginx+lua) 和中控服务器后端 luajiawaf_server(django)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!