环境综述
本方案基于 X86 的 MikroTik RouterOS 7.21 硬件平台,利用其内置的 Container(基于 Docker 架构)功能,部署集成了 ModSecurity v3 与 OWASP 核心规则集 (CRS) 的 Nginx 镜像。通过这一组合,在路由器网关层构建高性能 Web 应用防火墙 (WAF),实现对后端业务(如 OA 系统)的入侵检测与过滤。
**流量走向:**外部流量 (Port 80) -> ROS NAT -> WAF 容器 (Port 8080) -> 规则过滤 -> 后端 OA (Port 89)
开启容器功能与权限解锁
RouterOS 默认不开启容器权限,需通过硬件验证解锁。
确认安装包:在 System -> Packages 中确认 container 插件已安装。
解锁权限:
/system/device-mode/update container=yes
执行后必须在 5 分钟内手动按下路由器的 Reset 键或拔插电源进行物理确认。重启后执行 /system/device-mode/print 确认 container: yes。
镜像拉取与网络环境准备
针对国内网络环境,需配置镜像加速并建立独立的三层路由网络。
配置镜像源与临时路径(推荐使用 USB 外部存储):
/container/config/set registry-url=https://registry-1.docker.io tmpdir=/usb1/tmp
构建三层路由网络:
# 创建 VETH 接口:容器 IP 为 .2,网关指向路由器 .1
/interface/veth/add name=veth_nginx address=172.17.0.2/24 gateway=172.17.0.1
# 在路由器侧分配网关地址
/ip/address/add address=172.17.0.1/24 interface=veth_nginx
部署并初次运行容器
拉取 owasp/modsecurity-crs:nginx-alpine 镜像并实例化。
拉取并创建:
/container/add remote-image=owasp/modsecurity-crs:nginx-alpine interface=veth_nginx root-dir=/usb1/waf_v7 logging=yes
启动与配置修改:
等待 Status 变为 stopped 后执行 /container/start 0。随后进入容器内部:
/container/shell 0
vi /etc/nginx/conf.d/default.conf
netstat -tunlp | grep 80
网络调试与转发配置 (NAT/Routing)
容器启动后,需要让外部流量能通过路由器到达容器,且容器能访问后端服务器。
端口转发 (NAT):将公网或局域网 IP 的 80 端口映射给容器。
/ip/firewall/nat/add chain=dstnat dst-address=192.168.1.1 protocol=tcp dst-port=80 action=dst-nat to-addresses=172.17.0.2 to-ports=8080
因为 172.17.0.0/24 为 docker 单独网段,出口伪装(如需要):
/ip firewall nat add chain=srcnat src-address=172.17.0.0/24 action=masquerade
路由连通性验证: 在容器 Shell 内 Ping 后端 OA 服务器地址,确保三层互通:
ping 192.168.23.118

