如何在云服务上快速拥有洛甲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)

如何在云服务上快速拥有洛甲WAF(Web防火墙)的更多相关文章

  1. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  2. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...

  3. 解决 slf4j + log4j 在云服务上打印乱码

    由于云服务器的环境是纯英文的 虽然在eclipse中可以打印日志显示中文,但是实用putty的时候查看却是乱码,下载日志也同样是乱码 那么只要设置utf-8即可

  4. 如何在Azure上创建和部署云服务

    Azure 管理门户提供两种方法可用来创建和部署一个云服务:快速创建和自定义创建. 本主题说明如何使用快速创建方法来创建新的云服务,然后使用上传来上载和部署一套在 Azure 的云服务.当您使用此方法 ...

  5. IDC预测2020云服务逆势增长!云服务器已成上云首选

    IDC预测2020云服务逆势增长!云服务器已成上云首选 据IDC最新预测指出,2020年IT基础设施支出今年将增长约4%,达到2370亿美元,驱动力主要来源于云服务. 受疫情的影响,不少企业开源节流, ...

  6. FPGA加速:面向数据中心和云服务的探索和实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由columneditor 发表于云+社区专栏 作者介绍:章恒--腾讯云FPGA专家,目前在腾讯架构平台部负责FPGA云的研发工作,探索 ...

  7. 英特尔内存革新助平安云 Redis 云服务降本增效

    英特尔内存革新助平安云 Redis 云服务降本增效 英特尔 傲腾 数据中心级持久内存的引入,为平安云的降本增效开启了一条新的道路.通过对平安云 Redis 数据库产品的支持,用户能享受到性能优异且价格 ...

  8. 联万物,+智能,为行业,华为云升级OceanConnect IoT全栈云服务

    [中国,上海,2019年9月19日] 9月18日,在HUAWEI CONNECT 2019期间,华为云CTO张宇昕在华为云峰会上升级OceanConnect IoT全栈云服务,发布包括端.边.管.云. ...

  9. 阿里云主机上安装jdk

    今天继续安装jdk到阿里云服务上,大家要看一下阿里云是32位还是64位的,如果是32位下载32位的包,如果是64位的下载64位的包 我的就是64位的,开始我还不知道是怎么区分32/64位的,原来X64 ...

  10. 利用VisualVM监测Azure云服务中的Java应用

    在做Java开发的时候,我们需要在上线之前对程序进行压力测试,对程序的性能进行全面的监控,了解JVM的CPU,内存,GC,classes,线程等等信息,或者在程序上线运行的过程当中以便于诊断问题或者对 ...

随机推荐

  1. 介绍Vue router的history模式以及如何配置history模式

    引言 Vue router给我们提供了两种路由模式,分别是hash模式和history模式.其中默认是使用hash模式,即URL中带有一个#符号,但是处于业务或个人喜爱的差别,Vue router也提 ...

  2. ASP.NET MVC4 学习笔记-4

    添加验证--Adding Validation 现在我们要为程序增加数据验证.如果不增加数据验证的话,我们的用户可能会输入错误的数据或者提交一个空白的表格. 在MVC应用程序中,数据验证通常要在域模型 ...

  3. Day14_Java_作业

    编程题: 1:获取10个1-20之间的随机数,要求不能重复 答: package StudentWork; import java.util.ArrayList; /** * * 需求: 1:获取10 ...

  4. 我是如何组织 Go 代码的(目录结构 依赖注入 wire)

    背景 对于大多数 Gopher 来说,编写 Go 程序会直接在目录建立 main.go,xxx.go,yyy.go-- 不是说不好,对于小型工程来说,简单反而简洁明了,我也提倡小工程没必要整一些花里胡 ...

  5. 巧用 bc 命令测试 Linux 主机的 CPU 性能

    今天向公司申请了一台 Linux 主机,作为平时的开发环境.由于自己并不依赖远程开发(大多数情况下项目都可以本地开发.调试),于是只申请了 4C/8G 的低配机器. 突然好奇的是,这台机器的性能怎么样 ...

  6. Centos7 安装部署 Kubernetes(k8s) 高可用集群

    目录 一.系统环境 二.前言 三.Kubernetes(k8s)高可用简介 四.配置机器基本环境 五.部署haproxy负载均衡器 六.部署etcd集群 七.部署Kubernetes(k8s) mas ...

  7. Python异常模块与包

    Python异常模块与包 一.了解异常 1.1 什么是异常 当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常", 也就是我们常说 ...

  8. 使用guestmount更改qcow2镜像内容

    参考: 使用guestmount更改qcow2镜像内容 guestmount 安装 yum install libguestfs libguestfs-tools -y 使用 guestmount - ...

  9. GitLab 无仓库 中了勒索病毒

    坑爹的记录一下,并没有解决 Gitlab 昨天(2021-11-29)打开之后看不到项目了,下面这个吊样子 最后发现中病毒了,一堆的这个吊毛文件,复制一个打开看了一下 你别说这个黑客网页写的还不错,这 ...

  10. C# DateTime 时间格式化

    今天做任务的时候,数据库日期拼写需要 从凌晨到晚上最后一秒,但是传过来的日期数据是 当前的时间,下面是我尝试的解决方案. endTime.ToString("yyyy-MM-dd 23:59 ...