1. 写在最前面为什么要在 Workstation 里折腾一台 FortiWeb做 Web 安全或运维的朋友大概率都遇到过这种场景要测试 WAF 规则、要复现客户现场的拦截问题、要给开发环境做安全前置但又找不到一台空闲的物理设备。借硬件要等流程公有云的 WAF 实例按小时计费长期挂着成本也不低。这年头最灵活的方案就是在本地虚拟化环境里跑一台 FortiWeb-VM。FortiWeb 是某知名安全厂商推出的 Web 应用防火墙6.3.4 算是 6.x 系列里一个相当稳定的版本接口布局、CLI 风格和后续版本没有太大割裂感拿来学习和做测试完全够用。配合 VMware Workstation Pro可以在笔记本上完整模拟一套 WAF 部署环境包括双网卡隔离、反向代理、Web 防护策略、IP 信誉库这些核心功能。这篇内容不是照着官方手册念一遍而是把我在本地环境实际部署过程中踩过的坑、反复试出来的经验按一条能走通的路完整过一遍。目标是让一个之前没碰过 FortiWeb 的人也能在两小时内装出一台能管理、能转发、能出拦截日志的 WAF 虚拟机。适合谁看安全工程师想在本地灵活验证 WAF 策略运维工程师需要在测试环境模拟流量转发链路学生或刚入门的安全爱好者想找一个免费可用的 WAF 环境练手。需要的基础会用 VMware Workstation 创建虚拟机、知道桥接和 NAT 的大致区别。FortiOS 系列设备的命令行基础会有一点帮助但不是必须的后面每一步都会给出具体命令和操作路径。2. 准备工作与安装镜像获取2.1 虚拟机形态选择OVA 是最省事的入口FortiWeb 官方为虚拟化环境提供三种交付形态OVA 模板适用于 VMware ESXi / Workstation 直接导入云市场镜像适用于 OpenStack 等云平台安装 ISO适用于从零手动安装固件。本地 Workstation 环境最推荐用 OVA。原因很简单OVA 打包了虚拟磁盘、虚拟机配置、网卡预定义导入后只需要调整资源分配和网络类型就能直接开机。ISO 安装方式在 FortiWeb 上相对少见需要手动格式化磁盘、选择固件版本过程更繁琐而且很容易在磁盘控制器类型上出问题。下载 OVA 的位置是官方支持站点注意评估类授权和正式授权的区别。6.3.4 这个版本官方站点上一般有对应的 OVA 包和升级包文件名类似 FortiWeb-v6.3.4-buildXXXX-OVF.ova 的格式下载时顺手把 release notes 也拿下来后面核对版本和已知问题用得上。2.2 导入前的版本兼容性排查我一开始直接在 Workstation 16 里双击 OVA 导入结果弹出提示说文件包格式不合法。仔细检查后发现问题出在 OVF 模板里声明的虚拟硬件版本是 13而 Workstation 16 对旧版本的支持通常不受影响真正的原因是 OVA 包里的磁盘格式是稀疏格式导入时存储空间计算异常。解决方法是改用菜单路径文件 打开选中 OVA 文件让 Workstation 自动弹导入向导。如果仍然报错不要急着改文件先把 OVA 解包成 OVF 和 VMDK 两件套再通过 文件 新建虚拟机 自定义 稍后安装操作系统 其他 Linux 3.x 内核 的方式手动挂载 VMDK。这个办法已经帮我在三台不同配置的电脑上绕过了解包校验的问题。2.3 资源分配别按最小配置凑合导入虚拟机后第一件事不是开机而是把资源调整到位。FortiWeb-VM 官方最低配置是 1 vCPU、2 GB 内存但实际跑起来之后你会发现如果开着 Web Protection Profile 里的机器学习和防爬虫功能内存很快吃紧虚拟内存交换会引发管理界面卡顿。我这边建议直接用 2 vCPU、4 GB 内存。磁盘空间保持 OVA 默认的 30 GB 或 40 GB 都可以FortiWeb 的日志存储默认放在本地磁盘日志量大时空间消耗很快。多给一点磁盘空间不会亏。表FortiWeb-VM 在 Workstation 中的推荐资源分配项目最低配置推荐配置备注处理器1 vCPU2 vCPU启用虚拟化引擎可提升性能内存2 GB4 GB内存不足会导致 Web 界面响应变慢磁盘20 GB40 GB日志和包捕获文件占用显著网络适配器 1默认VMnet0桥接管理接口网络适配器 2无VMnet8NAT或自定义业务接口开机前还要检查一下虚拟机的固件类型。FortiWeb 的引导加载程序对 UEFI 支持不算完美建议在虚拟机设置里把固件改成 BIOS。这个设置在创建虚拟机时就得选好导入 OVA 后改固件类型可能导致启动异常。如果已经导入了建议重新走一遍手动挂载 VMDK 的方式新建固件选 BIOS可以省掉很多奇怪的引导问题。3. 网络配置最容易被绕晕的环节3.1 搞清楚 FortiWeb 的接口用途再动手FortiWeb 默认带两个物理接口在 CLI 和 Web 界面里的名称分别是 port1 和 port2。生产环境中标准做法是port1 作为管理接口连接管理网段只允许 HTTPS / SSH 和 Pingport2 作为业务接口连接被保护的 Web 服务器网段承载 HTTP / HTTPS 流量。这样设计的好处是管理流量和业务流量彻底隔离。如果管理网段被攻破攻击者至少不能直接通过业务接口横向移动反过来业务接口上的恶意流量也不会直接暴露管理面。在 Workstation 中两个网卡的对应该关系就落在了虚拟网络编辑器的设置上网络适配器 1对应 FortiWeb 的 port1选择桥接模式VMnet0或自定义 VMnet视你的局域网情况而定网络适配器 2对应 port2选择 NAT 模式VMnet8或自定义仅主机模式。3.2 网卡模式的取舍NAT、桥接还是仅主机很多人在 Workstation 里部署虚拟机时习惯直接选 NAT 模式这本身没有问题但放到 FortiWeb 的场景里就有讲究了。NAT 模式下虚拟机通过 Workstation 的虚拟 NAT 设备访问外部网络外部网络主动访问虚拟机需要配置端口转发这对 WAF 测试是个致命伤。你要模拟外部攻击者访问被保护的 Web 服务器攻击流量必然要能主动到达 FortiWeb 的业务接口。如果用 NAT你只能在宿主机上做端口映射绕了一个大圈还不符合生产环境链路。所以我最终采用的方案是port1管理桥接模式和宿主机在同一局域网直接用宿主机浏览器访问管理界面port2业务VMnet8 NAT 模式和需要保护的 Web 服务器也是虚拟机放在同一个虚拟网络中。VMnet8 的网段默认为 192.168.138.0/24如果这台 Web 服务器也在同一台 Workstation 里它的网络适配器也需要设置为 VMnet8。这样 FortiWeb 的 port2 和 Web 服务器就处于同一个虚拟交换网络FortiWeb 通过反向代理访问后端服务器链路完全可控。还有一种做法是 port2 也用桥接模式让 FortiWeb 直接把流量转发到局域网里的物理服务器。这种方案更接近生产环境但对局域网 IP 规划有要求如果宿主机所在网段 DHCP 分配比较混乱不建议新手尝试。先把 NAT 虚拟网跑通再考虑桥接也不迟。3.3 首次开机控制台里必须做的网络初始化把虚拟机开机之后显示器上会进入 FortiWeb 的终端界面。首次启动时系统默认的管理接口 IP 是 192.168.1.99/24这个地址在大多数家庭或办公网络里都不通需要立即修改。在控制台登录默认账号是 admin默认密码是空直接回车。登录后进入 CLI 界面依次完成以下配置FortiWeb-VM # config system interface FortiWeb-VM (interface) # edit port1 FortiWeb-VM (port1) # set ip 192.168.1.10 255.255.255.0 FortiWeb-VM (port1) # set allowaccess https ping ssh FortiWeb-VM (port1) # next FortiWeb-VM (interface) # end这里有几个我实际测试中总结的要点管理 IP 要设置在 port1不要设到 port2。FortiWeb 的默认路由表里管理流量只从 port1 接收如果把 IP 配置在 port2Web 管理界面很可能起不来。allowaccess 参数里一定要包含 https否则浏览器无法访问管理界面。如果你打算用 SSH 排障把 ssh 也加进去。ping 可加可不加但建议加上方便排查网络连通性。如果局域网内已有其他设备占用了规划的管理 IP需要换一个不冲突的地址。可以先在宿主机上 ping 一下确认地址可用性。配置完成后在宿主机浏览器里访问 https://192.168.1.10浏览器会提示证书不受信任。这是自签名证书的正常现象选择继续访问即可。看到登录界面说明管理网络已经通了。3.4 业务接口配置从 CLI 到 Web 界面的路径业务接口 port2 的配置可以继续在 CLI 里完成也可以在 Web 界面的网络菜单下操作。我习惯在 CLI 里先配好然后切到 Web 界面做后续的代理服务器配置这样链路更顺。FortiWeb-VM (interface) # edit port2 FortiWeb-VM (port2) # set ip 192.168.138.10 255.255.255.0 FortiWeb-VM (port2) # set allowaccess ping FortiWeb-VM (port2) # next FortiWeb-VM (interface) # end这里要注意port2 的 IP 网段必须和后续要添加的 Web 服务器保持在同一网段。如果你的 Web 服务器 IP 是 192.168.138.100那么 port2 的地址需要是 192.168.138.0/24 网段内的任意合法地址。另外建议设置默认路由如果有管理网段的网关也需要加一条静态路由指向网关FortiWeb-VM # config router static FortiWeb-VM (static) # edit 1 FortiWeb-VM (1) # set device port1 FortiWeb-VM (1) # set gateway 192.168.1.1 FortiWeb-VM (1) # next FortiWeb-VM (static) # end设置完成后可以在 Web 界面的 系统 网络 接口 页面看到两个接口的状态。interface 状态要显示 upRX/TX 有流量递增说明链路正常。3.5 最容易踩的坑网卡顺序识别错误这可能是 NetSvc 系列设备里最常见的问题。在 Workstation 的虚拟机设置里网卡 1 和网卡 2 的排序有时候会被系统自动调整导致你在 VMware 里看到的“网络适配器 2”实际上是 FortiWeb 的 port1反过来也一样。怎么判断当前实际对应关系最快的方法是把虚拟机开机在 FortiWeb 控制台执行FortiWeb-VM # get system interface physical输出里会列出每个物理接口的 MAC 地址。然后回到 Workstation 的虚拟机设置里看每个网络适配器的 MAC 地址两者对照就能确认谁对应谁。如果发现对应关系反了不需要重新安装系统只需要在 CLI 里把两个接口的 IP 配置对调即可。我遇到过一次port1 被接在 VMnet8 上管理界面一直访问不了查了一下午才发现是网卡顺序的问题这种问题不看 MAC 真的容易让人崩溃。4. Web 管理界面初始化与 License 处理4.1 第一次登录默认账号、密码修改和证书问题浏览器访问 https://管理IP 之后用 admin 登录。系统会强制让你修改默认密码新密码需要满足复杂度要求至少包含大写、小写、数字长度 8 位以上。这个密码修改流程走完之后系统会提示重新登录。关于证书很多人在这一步纠结要不要换成正式证书。测试环境用自签名证书完全没问题如果要模拟生产环境可以在 系统 证书 里上传正式证书和私钥。需要注意证书链完整最好是证书、中间证书、根证书依次上传否则部分浏览器会报证书链不完整。4.2 License 验证没有 License 的 FortiWeb 只能看不能动没有 License 的 FortiWeb 能登录但功能菜单大部分是灰色的。Web Protection Profile 无法启用反向代理也无法生效。可以说没有 License 这台设备就是一台摆设。解决方案是去官方站点申请试用 License。申请时会要求注册设备序列号。在 Web 界面的 Dashboard 右下角能看到设备的序列号格式一般是 FVW-XXXXXX-XXXXXX复制这个序列号到官方站点填写之后会收到一份包含 License 文件的邮件文件格式为 .lic。在 Web 界面的 系统 License 页面点击上传 License 文件上传后系统会自动识别授权类型和到期时间。FortiWeb-VM 的试用 License 一般是 90 天期间所有功能都可以使用。到期后设备会退回受限模式之前配置的策略不会消失但不会继续执行拦截动作。申请 License 时有个容易忽略的地方设备序列号与许可证是绑定的。如果后续因为某些原因把 OVA 重新导入了一台新的虚拟机新设备的序列号会变化原来的 License 无法使用需要重新申请。这也是为什么建议部署完成后做一次快照避免因为误操作导致 License 失效。4.3 时间、语言和日志基本设置License 生效后建议先设置系统时间和时区。WAF 的日志时间戳和证书校验都依赖系统时间如果时间不准TLS 握手会失败日志分析也会错乱。在 系统 配置 页面设置时区为 UTC8北京时间然后手动校准时间或配置 NTP 服务器。语言方面FortiWeb 6.3.4 的 Web 界面默认是英文切换路径在右上角的账号菜单里有中文选项但中文界面下部分术语翻译不够贴切。如果后续要对照技术文档做排查建议保留英文界面避免术语不一致导致的误解。日志设置上本地磁盘日志默认开启建议在 日志与报告 日志配置 里把日志级别设置为 信息这样可以看到完整的请求和响应摘要。磁盘几乎用满时系统会自动清理旧日志这个默认行为可以先不用改。5. 反向代理与 Web 防护策略配置实操5.1 创建服务器组与虚拟服务器FortiWeb 6.3.4 的核心功能是反向代理。所谓反向代理就是让客户端只访问 FortiWeb 的地址FortiWeb 再把请求转发给后端实际的 Web 服务器。这样做的好处是源站 IP 对客户端不可见所有攻击流量被 WAF 先拦截一层。配置路径是 应用交付 反向代理 服务器组然后点击新建服务器组。服务器组里需要指定后端的 Web 服务器 IP 和端口。假设后端服务器 IP 是 192.168.138.100端口是 80协议是 HTTP那就这样填名称随意建议用实际业务名类型HTTP服务器192.168.138.100:80健康检查默认开启。健康检查建议保持开启。FortiWeb 会定期向后端服务器发送探测请求如果后端宕机WAF 会绕过这台服务器避免请求被转发到故障节点。测试环境里如果后端是刻意暴力测试用的可以临时关闭健康检查但生产环境千万不要关。然后创建虚拟服务器应用交付 反向代理 虚拟服务器新建一条记录虚拟服务器名称例如 vser-http-test接口port2源地址全部或特定客户端网段代理类型HTTP服务器组选择刚才创建的服务器组。创建完成后这条虚拟服务器会对应一个地址也就是 FortiWeb port2 的 IP 和端口比如 192.168.138.10:80。为了验证这条链路是否通可以先把浏览器指向 http://192.168.138.10如果能看到后端 Web 应用的页面说明反向代理已经生效。有一个非常关键的细节如果 FortiWeb port2 和后端服务器都在 VMnet8 网段而浏览器是运行在宿主机上的此时宿主机无法直接访问 192.168.138.10因为宿主机不在 VMnet8 网段内。解决方案是在 Workstation 的虚拟网络编辑器里将 VMnet8 的子网地址改成宿主机的同一网段比如 192.168.1.0/24或者把 FortiWeb 的 port2 也改成桥接模式。不然后续测试会连不上虚拟服务器还容易误以为是 FortiWeb 配置出了问题。5.2 配置 Web Protection Profile 并关联到虚拟服务器反向代理生效后最核心的一步来了把 Web Protection Profile 挂上去。这是 FortiWeb 区别于普通反向代理的关键也是 WAF 的灵魂所在。在 策略 Web Protection Profile 里新增一条配置选项很多挑最常用的几个说明签名检测Signature启用后会自动下载并更新攻击签名库覆盖 SQL 注入、XSS、命令注入等常见 Web 攻击。这是必开项爬虫防护Bot Mitigation可以检测和拦截恶意爬虫区分搜索引擎爬虫和攻击性爬虫。测试环境可以开一个宽松策略看看日志效果协议合规Protocol Compliance对 HTTP 协议做严格校验拦截畸形请求。这类攻击通常不需要业务层逻辑开起来不会误伤正常流量访问控制Access Control支持 IP 黑名单、地区来源控制、URL 关键词过滤。可以把测试客户端的 IP 加进白名单方便验证规则。配置完成后在 策略 Web Policy 里新建一条策略把虚拟服务器和 Web Protection Profile 关联起来。保存后这条策略会立即生效。验证方式在后端 Web 应用上访问一个带典型 SQL 注入特征的 URL比如http://192.168.138.10/product.php?id1 AND 11正常情况下FortiWeb 会返回 403 拦截页面。去 日志与报告 攻击日志 里查看能看到拦截详情包括攻击类型、源 IP、命中规则 ID。这一步能看到日志正常记录说明整条链路已经跑通了。如果拦截没生效优先检查策略的启用状态以及虚拟服务器是否关联到了正确的 Web Policy。另一个常见问题是FortiWeb 默认只对 80 端口做 HTTP 代理如果后端是 HTTPS需要在虚拟服务器的代理类型里选择 HTTPS 并上传证书否则端口监听不对流量根本不会进 proxy。5.3 调整防护强度从学习模式到阻断模式FortiWeb 有一种初始学习机制新建 Web Protection Profile 后默认的签名检测可能会因为置信度不够而仅记录不阻断。这一点相当容易让新手误以为功能失效。在 策略 页面找到刚创建的 Web Policy把 Action 从 Learning / Monitor 改为 Block / Deny。具体要看版本里的选项名称6.3.4 里一般叫做 防护模式Protection Mode选项包括Learning只记录日志不阻断请求Monitor记录日志并产生告警但继续转发Block记录日志并阻断请求。建议先在 Learning 模式下观察几天确认没有误报后再切换到 Block。测试环境可以直接切到 Block快速看到效果。5.4 其他常用功能URL 重写、IP 黑名单、速率限制除了基础的 WAF 拦截能力FortiWeb 还能承担一部分接入层网关职责这些配置按需开启即可URL 重写在 应用交付 重写规则 里可以把旧的 URL 路径重定向到新路径。比如迁移网站后保留旧入口避免 404IP 黑名单在 策略 黑名单 里手动添加攻击者 IP 或整个 C 段也可以结合攻击日志里的源 IP 一键添加速率限制在 策略 速率限制 里可以限制单个源 IP 每秒的请求次数有效缓解 CC 攻击。测试时可以设置一个较低的阈值比如 30 次/秒观察效果。这些功能在 6.3.4 里都是图形化配置没有太多需要展开的地方但建议都实际操作一遍。熟悉配置路径之后你会发现 FortiWeb 的能力不止于拦截注入攻击更像是一个多功能的 Web 流量安全网关。6. 快照备份、系统维护与版本升级要点6.1 工作快照测试环境的保险丝FortiWeb 是典型的状态型安全设备配置变化会立即影响网络行为。测试过程中经常会遇到改错一个参数导致 Web 管理界面访问不了、反向代理突然失效之类的情况这时候如果有一个干净的快照直接回滚就行节省大量排障时间。在 Workstation 里虚拟机开启状态下也可以创建快照但建议在关机状态下创建。操作路径虚拟机 快照 拍摄快照。快照名称加上日期和描述比如 2025-06-base-config-with-license。创建快照前建议先确认 License 已经生效因为 License 文件上传后设备序列号不会变化快照恢复后 License 依然有效。如果快照建在 License 生效之前恢复后可能需要重新上传 License 文件。6.2 固件升级先备份再动手FortiWeb 的固件升级和 FortiGate 类似都是上传固件包然后设备自动重启完成升级。升级包格式一般是 fortinet-fortiweb-6.3.4-buildXXXX-YYYYMMDD-FORTINET.out 之类。升级步骤在 Web 界面 系统 固件 页面上传升级包等提示固件校验通过后确认升级设备重启启动过程大约 5-10 分钟重新登录确认版本号已经变化。升级前必须做两件事备份配置路径是 系统 配置 备份下载一个 .conf 文件到本地创建快照万一升级失败可以秒回退。不同小版本之间升级通常不需要中间版本过渡但跨大版本比如 6.x 到 7.0时一定要看清楚 release notes有时候需要先升级到指定中间版本才能继续往上升。6.3.4 往上升级时建议先档一次配置备份因为某些版本的配置格式不兼容恢复时可能丢失部分配置。6.3 日常维护日志导出与磁盘空间管理FortiWeb 的本地日志默认存放在 /var/log 分区如果在测试中频繁触发攻击验证日志量会涨得很快。日常维护时可以做两件事定期导出攻击日志路径是 日志与报告 日志配置 导出格式支持 CSV 和 JSON。导出后可以导入到本地分析工具里做趋势统计监控磁盘可用空间在 Dashboard 上能看到近实时存储占用。如果磁盘快满可以在 系统 配置 存储 里手动清理历史日志同时确认日志归档策略。一个容易忽略的点FortiWeb 会把临时包捕获文件PCAP也存储在本地抓包排障之后一定要及时删除否则一个几十 MB 的 pcap 文件很快就会挤占日志空间。7. 常见问题速查表部署和配置中的典型故障现象可能原因解决方法浏览器无法访问 FortiWeb 管理界面管理 IP 不在宿主机可通网段控制台执行 get system interface 检查 IP调整到同一网段管理界面能打开但所有菜单灰色不可用License 未上传或已过期系统 License 检查状态重新上传有效 License反向代理配置后无流量日志虚拟服务器的接口选择错误确认虚拟服务器绑定的接口是 port2且端口监听正常后端服务器被 WAF 频繁误拦防护模式处于 Block 且签名误报临时切换为 Monitor 模式观察日志确认误报来源FortiWeb 重启后配置丢失虚拟机磁盘快照或内存状态问题确认修改配置后执行了保存避免直接使用内存快照恢复控制台有界面但 Web 页面空白管理接口证书过期或证书链问题重新生成自签名证书或上传正式证书攻击日志里看不到拦截记录防护策略未关联或处于 Learning 模式在策略中将 Action 改为 Block并检查关联关系SSH 无法登录 FortiWeballowaccess 未包含 sshCLI 中重新配置 port1 的 allowaccess 参数虚拟机开机后不断循环重启固件类型设置为 UEFI 导致引导失败使用 BIOS 固件重新导入或创建虚拟机这张表是我实际使用中反复遇到过的类型覆盖了从部署到排障的常见环节。如果你遇到的问题不在表里最有效的方法是进入 CLI 执行 diagnose debug 相关的命令查看系统日志输出一般都能找到线索。8. 我的体会和一个小建议在 Workstation 里部署 FortiWeb-VM 这件事熟练之后十分钟就能完成但对第一次接触的人来说网络规划、序列号、License 申请、接口对应这些细节点很容易让人卡住。我一开始也经历过“按教程配置好了但无论如何都访问不了”的阶段最后定位到问题是出在 VMware 的虚拟网络配置上而 FortiOS 的配置反而没有问题。如果让我给一个最实用的建议那就是在 Workstation 里把虚拟网络规划画在纸上标注每个网卡对应哪个接口、属于哪个网段、网关是谁然后再动手配。这比任何命令行技巧都管用。另外一个小技巧FortiWeb 的 CLI 里支持 tab 键自动补全命令输入时完全不用背。在接口配置界面时不断按 tab 可以显示所有可选参数这个细节在官方文档里不会强调但实际用起来效率高很多。FortiWeb 6.3.4 之后的版本在界面上有一些调整但核心配置路径和 CLI 命令变化不大。把这篇里的流程跑通一次后续再接触新版 FortiWeb 或 FortiGate都能快速上手。希望这篇内容能帮你在本地搭出一套可用的 WAF 测试环境少踩几个我踩过的坑。
阅读完成 · 觉得有帮助?