Docker安装OpenWAF

news2024/11/18 14:56:19

Docker安装OpenWAF

官方GitHub地址

介绍

OpenWAF(Web Application Firewall)是一个开源的Web应用防火墙,用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成,监控和过滤对Web应用程序的流量,识别和阻止潜在的攻击和恶意行为。

OpenWAF拥有一系列强大的安全功能,旨在提供全面的保护,包括以下方面:

  1. 攻击防护:OpenWAF能够检测和阻止常见的Web攻击,如跨站脚本(XSS)、SQL注入、命令注入、跨站请求伪造(CSRF)和路径遍历等。它分析输入和输出的数据,通过识别恶意的请求和特定的攻击模式来防止攻击的发生。

  2. 访问控制:OpenWAF可以根据配置的规则对流量进行筛选和控制,允许合法的请求通过,并阻止潜在的恶意请求。你可以设置IP白名单和黑名单,限制特定的访问来源或阻止已知的恶意IP地址。

  3. 会话保护:通过OpenWAF,你可以保护Web应用程序的会话机制,防止会话劫持和会话固定攻击。它可以验证会话的合法性、检测异常活动并阻止恶意的会话操作。

  4. 热点防护:OpenWAF可以对网站中的热点资源进行保护,防止因频繁请求而导致的资源滥用和服务不可用。它可以限制特定资源的访问频率,并对异常的访问行为进行监测和阻止。

  5. 日志和监控:OpenWAF提供了日志记录和监控功能,记录每个请求的详细信息,包括访问来源、请求的URL、攻击尝试和阻止的恶意行为等。通过分析日志数据,可以及时发现潜在的安全隐患和异常行为。

OpenWAF作为开源项目,具有灵活性和可定制性,你可以根据自己的需要对其进行配置和扩展。它与常见的Web服务器(如Nginx和Apache)兼容,并提供了丰富的插件和扩展库,以满足不同的安全需求。

总的来说,OpenWAF是保护Web应用程序安全的重要工具,可以帮助你减少潜在的攻击威胁,保护用户数据的安全性。如果你运营着一个Web应用程序,并且关注安全性,不妨考虑使用OpenWAF来增加你的应用程序的防护能力。

希望这个简介能给你对OpenWAF有一个初步的了解。如果你还有其他问题,我随时都能为你提供帮助!保护你的Web应用程序,让黑客无从下手!

新建文件挂载目录

# 新建配置目录
mkdir /opt/openwaf/conf
# 新建日志目录
mkdir /opt/openwaf/log

拉取OpenWAF镜像

docker pull titansec/openwaf

image-20230829094948396

创建OpenWAF配置文件

创建Nginx配置文件

vim /opt/openwaf/conf/ngx_openwaf.conf;

粘贴下面内容

user root;
worker_processes auto;
worker_cpu_affinity auto;
pid /var/run/openwaf.pid;
pcre_jit on;
error_log /var/log/openwaf_error.log;

events {
    worker_connections  10000;
    multi_accept on;
}

http {
    include            /usr/local/openresty/nginx/conf/mime.types;
    include            /opt/OpenWAF/conf/twaf_main.conf;
    include            /opt/OpenWAF/conf/twaf_api.conf;
    
    default_type       text/html;
    tcp_nopush         on;
    sendfile           on;
    keepalive_requests 100;
    keepalive_timeout  60 60;
    
    client_body_buffer_size 100m;
    lua_regex_match_limit   1500;
    
    proxy_redirect     http://$http_host/ /;
    proxy_pass_header  Server;
    
    upstream test {
       server 0.0.0.1; #just an invalid address as a place holder
       balancer_by_lua_file /opt/OpenWAF/app/twaf_balancer.lua;
       keepalive 16;
    }
    
    server {
        listen  80;
        listen [::]:80 ipv6only=on;
        
        listen 443 ssl;
        listen [::]:443 ssl ipv6only=on;
        
        server_name _;
        
        ssl_certificate /opt/OpenWAF/conf/ssl/nginx.crt;
        ssl_certificate_key /opt/OpenWAF/conf/ssl/nginx.key;
        ssl_protocols TLSv1.1 TLSv1.2;
        
        include                     /opt/OpenWAF/conf/twaf_server.conf;
        ssl_certificate_by_lua_file /opt/OpenWAF/app/twaf_ssl_cert.lua;
        
        location / {
            proxy_set_header Accept-Encoding identity;
            proxy_set_header Host $http_host;
            proxy_set_header X-Server-IP $server_addr;
            proxy_set_header X-Server-PORT $server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Real-PORT $remote_port;
            proxy_set_header X-Forwarded-For $http_x_forwarded_for;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Upgrade $http_upgrade;
            
            proxy_http_version 1.1;
            proxy_pass $twaf_upstream_server;
        }
    }
}

创建规则配置文件

vim /opt/openwaf/conf/twaf_access_rule.json;

粘贴下面内容

{
    "twaf_access_rule": {
        "state": true,
        "log_state":true,
        "rules":[
            {
                "host":"^.*$",
                "forward":"test",
                "forward_addr":"1.1.1.1",
                "uuid":"test_uuid1",
                "policy": "twaf_policy_conf"
            },
            {
                "host":"qj.com",
                "port":81,
                "path":"/admin/",
                "forward":"test",
                "forward_addr": "1.1.1.2",
                "forward_port": 82,
                "uuid":"test_uuid2",
                "policy": "twaf_policy_conf"
            },
            {
                "host":"jq.com",
                "ngx_ssl": true,
                "ngx_ssl_cert": "/opt/OpenWAF/conf/ssl/nginx.crt",
                "ngx_ssl_key": "/opt/OpenWAF/conf/ssl/nginx.key",
                "forward":"test",
                "forward_addr": "1.1.1.3",
                "uuid":"test_uuid3",
                "policy": "twaf_policy_conf"
            }
        ]
    }
}

创建日志文件

touch /opt/openwaf/log/openwaf_error.log

查看文件是否创建成功

image-20230829100241671

启动OpenWAF容器

docker run -d --name openwaf \
               -p 80:80 -p 443:443 \
               -v /opt/openwaf/conf/ngx_openwaf.conf:/etc/ngx_openwaf.conf \
               -v /opt/openwaf/conf/twaf_access_rule.json:/opt/OpenWAF/conf/twaf_access_rule.json \
               -v /opt/openwaf/log/openwaf_error.log:/var/log/openwaf_error.log \
               titansec/openwaf 
  1. 挂载配置文件和日志
    将配置文件保留在宿主机中,更新 OpenWAF只需更新Docker镜像即可
    1.1 挂载nginx配置文件
    如,事先将ngx_openwaf.conf放在宿主机 /opt/openwaf/conf/ 目录下,然后启动 docker 容器时添加参数如下:
    -v /opt/openwaf/conf/ngx_openwaf.conf:/etc/ngx_openwaf.conf
    1.2 挂载twaf_access_rule.json接入规则配置文件
    如,事先将twaf_access_rule.json放在宿主机 /opt/openwaf/conf/ 目录下,然后启动 docker 容器时添加参数如下:
    -v /opt/openwaf/conf/twaf_access_rule.json:/opt/OpenWAF/conf/twaf_access_rule.json
    1.3 挂载 nginx 错误日志
    -v /opt/openwaf/log/openwaf_error.log:/var/log/openwaf_error.log
  2. 修改宿主机中的配置文件后,执行 docker restart openwaf(容器名称) 即可

访问 ip

image-20230829102636564

image-20230829150903959

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/956296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中使用qrcode实现渲染二维码中间添加自定义logo-demo

效果 使用 import QRCode from qrcode; 具体生成过程 <template><div class"banner-login"><img :src"qrDataUrl" /></div> </template><script setup> import { ref, reactive } from vue; import QRCode from q…

Caffine和Guava的refreshAfterWrite的异同

背景: guava和caffine的refreshAfterWrite方法在用于本地缓存的场景是非常常用的&#xff0c;本文通过例子列举下caffine的refreshAfterWrite方法和guava的refreshAfterWrite的相同点和不同点 相同点/不同点&#xff1a; 以下都是使用keyXYZ作为例子 场景1&#xff1a;一开…

Linux网络编程:select函数的用法和原理

Linux网络编程&#xff1a;select函数的用法和原理 Linux上的select函数 select函数用于检测一组socket中是否有事件就绪.这里的事件为以下三类: 读事件就绪 在socket内核中,接收缓冲区中的字节数大于或者等于低水位标记SO_RCVLOWAT,此时调用rec或read函数可以无阻塞的读取该…

【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

本文大纲截图&#xff1a; UnitTest框架&#xff1a; PyTest框架&#xff1a; 框架&#xff1a; 框架英文单词 framework&#xff0c;为解决一类事情的功能的集合。需要按照框架的规定&#xff08;套路&#xff09;去书写代码。 一、UnitTest框架介绍【文末分享自动化测试学…

报错:axios发送的所有请求都是404

axios发送的所有请求都是404 一、问题二、分析三、解决一、问题 对后台发送数据请求接口,在 Swagger 上是可以请求到的 但是通过 Ajax 发送请求就会报 404 Swagger 上调用如下 项目接口请求如下

深入MaxCompute -第十一弹 -QUALIFY

简介&#xff1a; MaxCompute支持QUALIFY语法过滤Window函数的结果&#xff0c;使得查询语句更简洁易理解。Window函数和QUALIFY语法之间的关系可以类比聚合函数GROUP BY语法和HAVING语法。 MaxCompute&#xff08;原ODPS&#xff09;是阿里云自主研发的具有业界领先水平的分…

【附安装包】3ds Max2023安装教程

软件下载 软件&#xff1a;3ds Max版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;6.85G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU3GHz 内存16G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.c…

【科普】干货!带你从0了解移动机器人(五) ( 如何选择控制器类型)

控制器是移动机器人&#xff08;AGV/AMR&#xff09;最主要的核心部件&#xff0c;是整个车体的“大脑”&#xff0c;关系到车体的可靠稳定、性能指标和安全性。它通常用于接收传感器模块采集的数据&#xff0c;并进行信息处理分析&#xff0c;从而下发各种运动指令的硬件。目前…

哪里可以找到优质的文章?

我认为中外科技内容过去主要是“信息差”&#xff0c;即人们可以直接从国外文章中摄取信息并直接实践&#xff0c;谁快谁赢。 而现在主要是“观点差”&#xff0c;国内科技相关的理论和评论文章的数量和质量都还比较弱。 所以&#xff0c;优质文章建议多找外文。 参考风险投资人…

django-项目

一、RESTful设计风格 基础概念 全称&#xff1a;Representational State Transfer 1.资源 网络上的一个实体&#xff0c;每个资源都有一个独一无二的URL与之对应&#xff1b;获取资源-直接访问URL即可 2.表现层 资源的表现形式 如HTML、xml、JPG、json等 3.状态转化 …

Kubernetes技术--部署实际的java项目部署

1.容器交付流程 (1).总体的流程如下所示: (2).k8s部署项目细节流程(详细过程) 2.java实际项目部署 (1).准备java项目,把项目打成jar包或者war包,这里需要依赖两个环境:jdk和maven环境。 使用mvn clean package进行打包,如下所示

2023年口腔医疗行业研究报告

第一章 行业概况 1.1 定义 口腔医疗行业是以口腔医疗服务消费为基础&#xff0c;包含医疗及消费双重属性&#xff0c;是 为满足口腔及颌面部疾病的预防和诊疗、口腔美容等需求提供相关医疗服务的行业。 该行业的主要参与者包括口腔保健专业人员&#xff08;如牙医、口腔外科…

【重要】这是我见过最好的Flash科普文了

一、Flash Memory简介 Flash Memory 是一种非易失性的存储器。在嵌入式系统中通常用于存放系统、应用和数据等。在 PC 系统中&#xff0c;则主要用在固态硬盘以及主板 BIOS 中。 另外&#xff0c;绝大部分的 U 盘、SDCard 等移动存储设备也都是使用 Flash Memory 作为存储介质…

day 2

多态&#xff0c;虚函数&#xff0c;纯虚函数 1.多态&#xff1a;父类的指针或者引用&#xff0c;指向或初始化子类的对象&#xff0c;调用子类对父类重写的函数&#xff0c;进而展开子类的功能。 函数重写 1> 必须有继承关系 2> 子类和父类有同名同类型的函数 3>…

【深度学习实验】NumPy的简单用法

目录 一、NumPy介绍 1. 官网 2. 官方教程 二、实验内容 1. 导入numpy库 2. 打印版本号 3. arange 函数 4. array函数 5. reshape函数 6. 矩阵点乘&#xff08;逐元素相乘&#xff09; 7. 矩阵乘法 一、NumPy介绍 NumPy是一个常用于科学计算的Python库&#xff0c;尤…

司徒理财:8.31黄金高空低多布局静等非农来袭

黄金行情走势分析&#xff1a;      黄金现在处于底部震荡走势&#xff0c;反弹已经接近尾声&#xff0c;周五公布大非农数据&#xff0c;消息不确定的情况下&#xff0c;黄金不会轻易突破日线压力&#xff0c;今日将依托1950的压力位置做空看跌&#xff0c;看波段回调&…

【Python小项目】Python的GUI库Tkinter实现随机点名工具或抽奖工具并封装成.exe可执行文件

一、项目背景 受朋友所托,帮他在公司年会活动上做一个点名抽奖的小工具。经过沟通后,他发给我一个人员名单表格,是xlsx格式的excel工作表,并大概设计了一下抽奖工具的界面以及相关要求。话不多说,马上开始项目流程。 二、需求分析 客户需求总结如下: UI界面设计如下:…

SpringBoot之@RefreshScope

注解RefreshScope时一个组合注解。 Target({ ElementType.TYPE, ElementType.METHOD }) Retention(RetentionPolicy.RUNTIME) Scope("refresh") Documented public interface RefreshScope {// Scope代理模式之ScopedProxyMode&#xff0c;包含TARGET_CLASS、INTERF…

技术领导力实战笔记:14

14&#xff5c;团队优化&#xff1a;如何妥善且优雅地做好解聘工作&#xff1f; 我们需要在思想上对这件事情有一个正确的认识&#xff0c;解聘对团队、个人和管理者三方都是有好处的。摆正自己的立场才能做出正确的决定。 1.公司发展太快&#xff0c;个人没有跟上脚步 2.个人…