Docker安装OpenWAF

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Docker安装OpenWAF

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

b7607de049be9da7b439647e5c618b9c_7435107f164b7b482a2cb7e1ce6915d9.png


创建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;
        }
    }
}


创建Nginx配置文件

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

粘贴下面内容


{
    "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

查看文件是否创建成功

6f04b710c960565e728d1d986536d01d_e6cda4fe543c935c532f1c78beebbf76.png


启动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


ba125ef9a5222dedc9fcea9d45e1211e_57d293622692585a92b086e57bc40597.png


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
3月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
24天前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
144 3
docker 安装 Postgres 17.6
|
6天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
100 5
|
6天前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
79 1
|
6月前
|
存储 安全 C++
Odoo 安装方式选择:源码安装 vs Docker
Odoo部署常采用源码编译或Docker容器化,但分别面临依赖复杂、版本风险和服务化难题,以及镜像臃肿和扩展受限的问题。Websoft9提出混合方案,融合两者优势:通过智能环境适配、三阶段部署流程(环境预检、混合模式选择、持久化配置)及声明式YAML配置,实现高效、灵活的双模运行时。此方案显著降低依赖冲突解决时间(从83分钟至0),生产环境构建耗时缩短至8分钟,并达100% CVE漏洞修复率,适合ERP定制开发与规模化部署的企业需求。
|
4月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
448 4
|
3月前
|
Linux Docker Windows
windows docker安装报错适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 “wsl.exe --update” 进行更新。
适用于 Linux 的 Windows 子系统需更新至最新版本(如 wsl.2.4.11.0.x64.msi)以解决 2025 年 Windows 更新后可能出现的兼容性问题。用户可通过运行 “wsl.exe --update” 或访问提供的链接下载升级包进行更新。
981 0