前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >雷池防火墙安装及配置

雷池防火墙安装及配置

作者头像
小新笔记坊
发布于 2024-03-12 03:27:21
发布于 2024-03-12 03:27:21
1.7K00
代码可运行
举报
文章被收录于专栏:云端之上云端之上
运行总次数:0
代码可运行

安装理由

因考虑到网站安全需要,故记录一下安装雷池WAF的经过。

安装环境

操作系统:Linux CentOS 8.0 数据库mysql 8.0

CPU:1核

内存:2G

安装前:服务器物理内存剩余556M,虚拟内存占用0M。

安装后:服务器物理内存剩余600M,虚拟内存占用520M,雷池WAF占用约500M。

使用后:服务器物理内存剩余600M,虚拟内存占用729M,雷池WAF占用约730M。

雷池WAF介绍

雷池WAF(Web Application Firewall,即网络应用防火墙)是一款由长亭科技开发的开源、免费的网站安全防护工具。它设计用于保护Web应用程序免受常见网络安全威胁,如SQL注入、跨站脚本攻击(XSS)、命令注入、文件包含漏洞等各种应用层攻击。具备以下特点:

1. 开源免费:适用于个人和小型企业用户,降低了部署专业级WAF的成本门槛。

2. 轻量高效:底层基于Nginx等高性能Web服务器,可作为反向代理部署在Web应用前端,实现对HTTP/HTTPS流量的有效监控与过滤。

3. 语义引擎检测技术:采用业界先进的检测算法和技术,能够精准识别并阻止恶意请求,同时尽可能减少误报率。

4. 易于安装配置:提供友好的安装部署教程,帮助用户快速将WAF集成到现有架构中。

5. 持续更新升级:作为活跃的社区项目,会不断优化功能和添加新的防护规则,以应对最新的安全威胁。

安装步骤

一、下载雷池Docker镜像压缩包,上传至服务器

二、安装docker

1.CentOS 8默认使用podman代替docker,所以需要将podman卸载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum erase podman buildah -y

2.刷新配置及安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl daemon-reload
yum install -y yum-utils

3.卸载旧版本docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum remove docker docker-common docker-selinux dockesr-engine

4.安装需要的软件包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5.设置镜仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6.安装docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install docker-ce

7.启动 Docker 服务并设置为开机启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl start docker
sudo systemctl enable docker

8.验证是否安装成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker --version

三、安装Docker Compose

1.下载Docker Compose并将其上传至服务器/usr/local/bin/目录下

2.赋予执行权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chmod +x /usr/local/bin/docker-compose

3.验证安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose --version

四、安装雷池WAF

1.创建WAF安装目录并进入该目录(该指令会在当前所在目录创建safeline文件夹)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p safeline && cd safeline

2.CD进入雷池Docker镜像压缩包所在目录,执行以下指令。该指令会将雷池Docker镜像压缩包进行解压,并将解压后的 文件直接加载至Docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat image.tar.gz | gzip -d | docker load

注:image.tar.gz为雷池Docker镜像压缩包.文件名

3.compose.yaml文件上传至服务器/safeline/文件夹下

4.复制执行以下命令,生成WAF运行所需的相关环境变量(不要一行一行复制,一次性复制全部命令后回车执行)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat >> .env <<EOF
SAFELINE_DIR=$(pwd)
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)
SUBNET_PREFIX=172.22.222
IMAGE_PREFIX=chaitin
EOF

5.运行雷池WAF

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

五、配置雷池WAF

原来的部署架构:

雷池-waf-原部署架构.webp
雷池-waf-原部署架构.webp

配置雷池WAF后的部署架构:

雷池-waf-现部署架构.webp
雷池-waf-现部署架构.webp

总体配置思路:

注:除80/443端口外所有端口设置外网禁止访问,新建自定义端口,用户访问自定义端口时,waf对自定义端口进行监听,外网统一通过自定义端口进行访问,waf检测自定义端口无问题后转发(该操作全程是内网转发)至项目监听端口。

项目方案示例1(引导页):

如果你同一个端口下部署有多个项目,可自定义一个端口,然后用户访问该自定义端口的请求在WAF设置转发给nginx------>nginx再根据正则筛选分别指定要访问的项目

项目方案示例2:

用户点击前端网页中的网址入口(地址为http://你的ip:端口,此端口为WAF后台自行配置的一个自定义端口,WAF会持续监听该端口)------>雷池WAF监听到该访问请求------>雷池WAF放行后转发至内网环境下项目运行所监听的端口

注:

A.如果你将80端口设置外网拒绝访问,为了cdn省流量你想通过ip直接访问,则可以在雷池WAF后台编辑站点,填写域名为ip,勾选ssl证书随便选一个即可生效。

B.同一个域名有且仅能监听1个相同的端口,所以一个域名只能监听1个80/443端口,如果要实现多个项目各自分别监听各自的80/443端口,建议注册多个二级域名。也可以尝试自定义端口转发至项目端口的方式,但非80/443端口转发至项目端口CDN可能会出现无法访问页面的问题。例http://156.156.156.156:7001/XM/index.html如果用7001自定义端口代替80/443端口,则可能出现CDN无法访问的问题。

具体操作步骤:

1.浏览器打开后台管理页面: https://你的ip:9443

2.下载腾讯身份验证器,完成动态口令绑定。

3.将除80/443端口以外的其它端口全部设置禁止外部网络访问(如果你有ssl证书,可禁用80端口外网访问)。

禁止所有网络访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port protocol="tcp" port="要禁止的端口号" reject'

允许内网访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port port="要设置的端口号" protocol="tcp" accept'

取消禁止所有网络访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port protocol="tcp" port="要取消禁止的端口号" reject'

取消允许内网访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port port="要取消允许的端口号" protocol="tcp" accept'

4.WAF添加并配置防护站点,配置完成后如下图。

域名:你的服务器域名(直接输入域名或ip即可,不带http/https前缀)。

端口:WAF监听的端口,例如填80端口,则当用户通过域名+此端口方式访问网站时,WAF会监听该端口,端口无问题后WAF进行放行,放行后WAF会转发此请求至上游服务器。

上游服务器:WAF监听访问请求无问题后,你期望转发的访问地址(例http://192.168.2.30:81

5.测试防护功能,将以下连接copy至浏览器访问,手动模拟攻击。如下图为WAF拦截提示图。

模拟 SQL 注入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://<IP或域名>:<端口>/?id=1%20AND%201=1

模拟 XSS:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://<IP或域名>:<端口>/?html=<script>alert(1)</script>

升级雷池WAF

1.下载雷池Docker镜像压缩包,上传至服务器。

2.CD进入镜像压缩包目录,加载镜像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker load -i image.tar.gz

3.替换 Docker 容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose down --remove-orphans
docker compose up -d
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
JVM运行时的数据区,静态变量,成员变量,类变量
①声明的位置 局部变量:方法体们中,形参,代码块们中 成员变量:类中方法外 - 类变量:有static修饰 - 实例变量:没有static修饰 ②可用的修饰符 局部变量:final 成员变量:public、protected、private、final、static、volatile、transient ③值存储的位置 局部变量:栈 实例变量:堆 类变量:方法区。 ④作用域 局部变量:从声明处开始,到所属的]结束口实例变量:在当前类中“this.”(有时this.可以缺省),在其他类中“对象名.”访问 类变量:在当前类中“类名.”(有时类名.可以省略),在其他类中“类名.” 或“对象名.”访问 ⑤生命周期 局部变量:每一个线程,每一次调用执行都是新的生命周期口 实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例变量是独立的 类变量:随着类的初始化而初始化,随着类的卸载而消亡,该类的所有对象的类变量是共享的
名字是乱打的
2022/05/13
1.1K0
JVM运行时的数据区,静态变量,成员变量,类变量
Java中静态变量(类变量)、实例变量、局部变量和成员变量
学习Java的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别。
用户8639654
2021/07/19
2.6K0
Java 菜鸟入门 | Java中的静态变量、实例变量、局部变量和成员变量
学习 Java 的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别。
村雨遥
2022/11/30
1.8K0
静态变量和成员变量的区别 && 成员变量和局部变量的区别
=============================================================================
黑泽君
2018/10/11
1.8K0
Java面试题总结
自增变量 主要是对 i++ 和 ++i 的理解 public class Test01 { public static void main(String[] args) { // 变量自增 i++ ++i的理解 int i = 1; i = i++; // int j = i++; int k = i + ++i * i++; System.out.println("i=" + i);
shaoshaossm
2022/12/27
2980
Java面试题总结
java中的局部变量和全局变量哪个优先_java中成员变量是全局变量吗
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171760.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/24
1.4K0
成员变量,类变量,局部变量的区别是什么_内部变量和局部变量
大家好,又见面了,我是你们的朋友全栈君。 变量名首写字母使用小写,如果由多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。
全栈程序员站长
2022/11/17
1.9K0
成员变量,类变量,局部变量的区别是什么_内部变量和局部变量
Java Review (八、面向对象----成员变量和局部变量)
在Java语言中,根据定义变量位置的不同,可以将变量分成两大类:成员变量和局部变量。成员变量和局部变量的运行机制存在较大差异。
三分恶
2020/07/16
1K0
Java全局变量(成员变量)和局部变量的区别
2:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
全栈程序员站长
2022/09/24
1.2K0
Java全局变量(成员变量)和局部变量的区别
Java变量
定义 在程序执行的过程中,在某个范围内其值可以发生改变的量。 从本质上讲,变量其实是内存中的一小块区域 分类 按被声明的位置划分 成员变量 方法外部,类内部定义的变量 类变量(静态变量):独立于方法之外的变量,用 static 修饰。 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初
Java架构师必看
2021/07/16
9080
Java - 局部变量和成员变量
概念 成员变量 成员变量就是属于类的变量,在类中,方法体外定义的变量 成员变量又分为两种: **类变量(静态变量):**是被static所修饰的成员变量,是属于类的部分,属于类的范畴。 **实例变量(非静态变量):**是没有被static修饰的成员变量,是属于类的部分,但是属于对象的范畴。 局部变量: 局部变量就是定义在方法体,代码块内的变量,是局部的变量,属于方法的范畴。 **比如:**方法的形参,方法内定义的变量等等。 区别 1、定义的位置不一样 局部变量:在方法的内部 成员变量:在方法的外部,直接写在
kenvie
2022/01/20
1.4K0
Java的面向对象
一个人,每一个人都完成一部分,注重谁来做,重在找“参与者”,强调具备功能的对象,以类/对象为最小单位。
楠羽
2022/11/18
7170
Java的面向对象
【Java零基础入门篇】第 ④ 期 - 继承(三)
编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。
命运之光
2024/03/20
940
Java基础——成员变量、局部变量和静态变量的区别
之前在刚开始学习Java的时候,就谈了谈Java基础中的变量,虽然知道这货以后会经常用到,但没想到了基本语法这里,竟然有冒出来了成员变量、局部变量和静态变量。变来变去太容易让人搞晕了,挑拣出来梳理一下喽!
全栈程序员站长
2022/08/14
1.2K0
Java-值传递和值引用
参考:https://mp.weixin.qq.com/s/Qp6Cc0mlRLnrToNy5-3zeg java的值传递和值引用是一个普通但重要的内容,今天我们依次来了解一下。
android_薛之涛
2019/01/03
1.7K0
JAVA——类的定义及其实例化
1.Java中的类 类可以看成是创建Java对象的模板 修饰符 class 类名{     修饰符 数据类型 属性名(成员变量);//属性     //构造方法(无修饰符,无返回值,名称和类名一样)      //方法(成员函数) }        通过下面一个例子,简单理解一下Java类的定义 public class CAT{// public是类的修饰符,class是定义类的关键字,CAT是类名     String name;     int age;//name、age是类的成员变量     v
mathor
2018/06/22
1.4K0
大数据技术之_31_Java 面试题_01_JavaSE 面试题 + SSM 面试题 + Java 高级面试题 + Java 项目面试题
要点: 1、某个类只能有一个实例;   构造器私有化 2、它必须自行创建这个实例;   含有一个该类的静态变量来保存这个唯一的实例 3、它必须自行向整个系统提供这个实例;   对外提供获取该实例对象的方式:   (1)直接暴露   (2)用静态变量的get方法获取
黑泽君
2019/06/19
8791
大数据技术之_31_Java 面试题_01_JavaSE 面试题 + SSM 面试题 + Java 高级面试题 + Java 项目面试题
Java基础(七):面向对象编程-类和对象
Java微观世界
2025/01/21
1350
Java基础(七):面向对象编程-类和对象
【Java】05 面向对象
注意:   方法必须定义在类中方法外。   方法必须明确返回值类型(可以为空 void)、参数列表(可以为空 什么都不写)。   Java 里的方法不能独立存在,它必须属于一个类或一个对象
Demo_Null
2020/09/28
3960
【Java】05 面向对象
这一次,让你彻底理解Java的值传递和引用传递!
学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。
Java团长
2019/06/26
9510
这一次,让你彻底理解Java的值传递和引用传递!
推荐阅读
相关推荐
JVM运行时的数据区,静态变量,成员变量,类变量
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 安装理由
  • 安装环境
  • 雷池WAF介绍
  • 安装步骤
    • 一、下载雷池Docker镜像压缩包,上传至服务器
    • 二、安装docker
    • 三、安装Docker Compose
    • 四、安装雷池WAF
    • 五、配置雷池WAF
      • 总体配置思路:
      • 具体操作步骤:
  • 升级雷池WAF
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档