
1. 项目概述雷池WAFWeb Application Firewall是一款开源的Web应用防火墙系统主要用于防护Web应用免受SQL注入、XSS攻击、CC攻击等常见Web威胁。在实际生产环境中由于安全合规要求或网络限制很多企业需要在内网环境中离线部署安全防护系统。本文将详细介绍雷池WAF的离线部署全流程包含环境准备、依赖处理、安装配置等关键环节。作为一款轻量级WAF解决方案雷池WAF特别适合中小型企业的安全防护需求。离线部署场景下我们需要解决的核心问题包括依赖包完整获取、环境隔离配置、证书处理以及后续更新维护机制等。我在多个金融和政务项目中实施过类似部署方案积累了不少实战经验。2. 环境准备与依赖处理2.1 硬件与操作系统要求雷池WAF对硬件要求相对灵活最低配置建议CPU4核以上x86_64架构内存8GB以上磁盘100GB可用空间日志存储需求视业务量而定网卡千兆网卡×2建议管理流量与业务流量分离操作系统推荐使用CentOS 7.6或Ubuntu 18.04内核版本建议4.14以上。离线环境下需要特别注意确保系统已安装基础工具链如tar、wget、vim等关闭SELinux或提前配置好策略防火墙规则预先放行管理端口默认8000和镜像仓库端口重要提示离线环境务必在部署前完成时间同步配置如部署本地NTP服务器证书验证等环节对时间敏感。2.2 离线依赖包准备在可联网环境中准备离线安装包# 创建依赖收集目录 mkdir -p /opt/leichi-offline/{rpms,pip,packages,docker} # 使用yumdownloader下载系统依赖 yum install -y yum-utils repotrack -a x86_64 -p /opt/leichi-offline/rpms \ openssl-devel \ libffi-devel \ python3-devel \ gcc \ docker-ce \ docker-ce-cli \ containerd.io # 使用pip下载Python依赖 pip3 download -d /opt/leichi-offline/pip \ docker-compose1.29.2 \ requests2.26.0 \ pyOpenSSL20.0.1 # 下载雷池WAF安装包 wget -P /opt/leichi-offline/packages https://github.com/chaitin/leichi-waf/releases/download/v2.3.1/leichi-waf-offline-2.3.1.tar.gz将整个/opt/leichi-offline目录打包后传输到目标服务器tar czvf leichi-offline-bundle-$(date %Y%m%d).tar.gz -C /opt leichi-offline3. 离线安装与配置3.1 基础环境部署在目标服务器解压安装包并部署依赖# 解压离线包 tar xzvf leichi-offline-bundle-20230615.tar.gz -C /opt # 安装系统依赖 cd /opt/leichi-offline/rpms rpm -Uvh --force --nodeps *.rpm # 安装Python依赖 pip3 install --no-index --find-links/opt/leichi-offline/pip /opt/leichi-offline/pip/* # 启动Docker服务 systemctl enable docker systemctl start docker3.2 Docker镜像离线加载雷池WAF采用Docker容器化部署需提前导入镜像# 解压WAF安装包 tar xzvf /opt/leichi-offline/packages/leichi-waf-offline-2.3.1.tar.gz -C /opt # 导入Docker镜像 cd /opt/leichi-waf/images for img in *.tar; do docker load -i $img done # 验证镜像加载 docker images | grep leichi预期应看到三个核心镜像leichi-nginx业务流量代理、leichi-manager管理系统、leichi-detector攻击检测引擎。3.3 配置文件调整编辑主配置文件/opt/leichi-waf/config/settings.py# 修改数据库连接为本地持久化 DATABASES { default: { ENGINE: django.db.backends.sqlite3, NAME: /data/leichi/db.sqlite3, } } # 关闭在线更新检查 UPDATE_CHECK False # 设置离线证书路径 SSL_CERTIFICATE /data/leichi/ssl/cert.pem SSL_PRIVATE_KEY /data/leichi/ssl/key.pem生成自签名证书如需mkdir -p /data/leichi/ssl openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /data/leichi/ssl/key.pem \ -out /data/leichi/ssl/cert.pem \ -subj /CNleichi-waf.local4. 系统初始化与启动4.1 数据库初始化执行数据迁移和初始化cd /opt/leichi-waf docker-compose run --rm manager python manage.py migrate docker-compose run --rm manager python manage.py createsuperuser4.2 服务启动启动全部服务cd /opt/leichi-waf docker-compose up -d验证服务状态docker-compose ps正常状态下应显示三个容器的状态均为Up。4.3 防火墙配置配置业务流量转发示例为HTTP/HTTPS流量iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443 iptables-save /etc/sysconfig/iptables5. 运维管理与问题排查5.1 日常维护操作日志查看# 查看实时日志 docker-compose logs -f # 访问日志路径 tail -f /data/leichi/logs/nginx/access.log # 错误日志路径 tail -f /data/leichi/logs/nginx/error.log服务启停# 停止服务 docker-compose down # 启动服务 docker-compose up -d # 单独重启检测引擎 docker-compose restart detector5.2 常见问题处理问题1Docker容器启动失败现象docker-compose up时报错端口冲突排查netstat -tulnp | grep -E 8000|8080|8443解决修改/opt/leichi-waf/docker-compose.yml中的端口映射配置问题2证书验证失败现象管理界面提示SSL错误解决# 检查证书权限 chmod 600 /data/leichi/ssl/* # 重新加载Nginx配置 docker-compose exec nginx nginx -s reload问题3检测规则不生效排查步骤检查detector容器日志验证规则文件是否存在docker-compose exec detector ls /etc/leichi/rules手动测试规则匹配docker-compose exec detector python test_rule.py5.3 离线更新策略虽然处于离线环境但仍需定期更新防护规则在联网环境下载最新规则包wget -P /tmp https://rules.leichi.com/latest/leichi-rules-$(date %Y%m%d).tar.gz将规则包拷贝到离线环境/data/leichi/rules目录执行规则热加载docker-compose exec detector python load_rules.py6. 安全加固建议管理界面防护修改默认管理端口8000配置IP白名单访问控制启用管理界面二次认证容器安全# 限制容器资源 docker update --cpus 2 --memory 2g leichi-manager # 禁用容器特权模式 sed -i s/privileged: true/privileged: false/ docker-compose.yml网络隔离业务流量与管理流量使用独立网卡Docker网络采用自定义bridge模式配置严格的iptables出站规则日志审计# 配置日志轮转 cat /etc/logrotate.d/leichi EOF /data/leichi/logs/*/*.log { daily rotate 30 compress missingok notifempty } EOF我在某次政务云部署中遇到过容器时间不同步导致证书验证失败的问题后来通过在离线环境部署本地NTP服务器解决。建议在实施前用chrony搭建内网时间服务器# 在时间源服务器 yum install -y chrony sed -i s/^server.*/server ntp.aliyun.com iburst/ /etc/chrony.conf systemctl enable chronyd systemctl start chronyd # 在WAF服务器 sed -i s/^server.*/server 内网时间源IP iburst/ /etc/chrony.conf chronyc sources -v