尧图精选

FortiGate防火墙文件系统提取实战:维护模式与固件解包全指南

🕒 发布时间:2026/10/1 4:30:27 📁 来源:尧图网络
搞网络的人多少都遇到过这种场面一台跑得好好的Fortigate防火墙某天突然反复重启、升级中途断电、或者开机直接卡在引导界面配置还没来得及备份。这时候最要紧的事情就是从设备里把配置和关键日志捞出来——也就是做一次文件系统提取。我把这几年在Fortigate上做文件系统提取的几种路径、具体操作和踩坑记录整理成文给有同样需求的运维朋友做个参考。先说清楚适用范围下文提到的所有操作都只针对你拥有合法管理权限的设备和固件用于故障恢复、数据备份和学习研究。无论哪种提取方式只要方向明确、步骤耐心Fortigate里面那些配置、日志、证书文件大部分都能救回来。1. 先搞清楚Fortigate文件系统到底长什么样1.1 从分区结构理解提取的本质Fortigate防火墙运行的是FortiOS这个系统虽然看起来像封闭的嵌入式系统但底层其实是一套Linux内核加定制用户态。不同硬件型号的存储介质不一样有的是板载SSD有的是CF卡虚拟化版本则是虚拟磁盘但它们的逻辑分区结构大体上是一致的Bootloader区域负责引导一般很少动它。内核与内核模块启动时加载固件升级会整体替换。rootfs根文件系统以只读方式挂载通常是squashfs这类压缩只读文件系统里面是系统程序和库文件。data区配置与日志存储区可写分区设备的配置文件、证书、日志、会话状态都在这里通常是ext4格式。搞清楚分区结构之后提取文件系统就有了明确目标大部分故障恢复场景要的是data区里的配置文件固件解包分析场景要的是rootfs里的系统程序日志取证场景则要把data区里的日志文件完整导出来。不同目标对应不同的操作路径这就引出了下面按设备状态的提取方法分类。1.2 为什么说提取文件系统是故障恢复的救命稻草我自己遇到的最典型情况是某台分支机构的FortiGate 60F在升级FortiOS 7.2到7.4的过程中断电重启后网络接口全部失踪、Web管理界面直接进不去SSH也连不上。当时唯一的希望就是通过console口进维护模式把data区里最新的配置文件抓出来然后在新设备上恢复。另一个常见场景是设备硬件损坏但磁盘没坏把存储介质拆下来做镜像再从镜像里提取配置和日志这种离线的做法在设备已经无法开机时尤其管用。此外安全研究或固件分析也需要从官方固件包里提取rootfs做版本比对、漏洞分析这属于另一种提取用的是完全不同的工具链。2. 设备还能开机时的在线提取操作2.1 最稳妥的官方备份路径如果设备虽然异常但还能进入CLI或者Web管理界面优先走官方备份这属于最不容易出错的做法。在CLI下执行execute backup config tftp 文件名 服务器IP这条命令会把当前运行配置以文本形式备份到TFTP服务器。如果要连证书一起备份用execute backup full-config tftp 文件名 服务器IPWeb界面则在System Advanced Backup里下载配置文件。这类备份虽然拿到的不是整个文件系统但对绝大多数恢复场景已经足够。我建议所有能在CLI登录的设备先做这一步哪怕你马上准备进维护模式做更底层的提取也要先有一个保底配置在手。2.2 用系统自带的诊断命令直接读文件一些较新版本的FortiOS提供了直接查看底层文件的命令不用特意进维护模式。假设我想确认data分区的位置和挂载情况可以执行diagnose hardware sysinfo memory diagnose sys coredump list查看临时文件或者系统文件列表可以用fnsysctl ls /data fnsysctl cat /data/etc/fortidebug.conffnsysctl在较老的FortiOS版本里是访问底层文件系统的主要入口。在7.x版本中部分命令被收紧但diagnose目录下仍然有很多有用的子命令。这里要提醒一下能在线操作时别急着拆机或者反复重启设备。在线状态下导出的文件最完整而且你可以随时用execute backup和fnsysctl两种方式交叉验证确保拿到的配置是完整可用的。2.3 在线提取时的网络与传输协议选择在线提取时传文件通常有三种方式可选TFTP、FTP、SCP。我实际用下来的感受是TFTP最轻量局域网里非常快但服务器端需要提前搭好且没有加密和校验所以只建议在隔离的维护网络里用。FTP支持列出目录、上传下载都方便但明文传输同样只适合临时环境。SCP走SSH通道如果有管理SSH权限是安全性最高的选择传输失败率也最低。如果你手边的设备还能使用SSH管理我更推荐用SCP方式直接把备份文件拉回来避免TFTP服务器UDP丢包导致文件不完整。具体操作是在CLI里开启SCP服务端config system global set admin-scp enable end然后在电脑上用scp admin防火墙IP:sys_config 本地路径拉取配置文件。这个方式比TFTP稳很多尤其在文件较大、链路有丢包的环境中。3. 设备无法正常启动时的维护模式提取3.1 进入维护模式的时机与按键技巧FortiGate在引导过程中预留了一个维护模式入口官方的叫法是Maintenance Mode或Emergency Recovery Mode。不同型号进入方式稍有差别但绝大多数设备都是开机后密切关注console输出在出现倒计时提示时按CtrlC中断引导然后选择进入维护模式。以FortiGate 100F为例接好console线后给设备加电终端窗口会快速滚动日志看到类似Press CtrlC to stop auto-boot...的提示时立刻按CtrlC。如果没截住可以重启再来一次多试几次就能摸到时机。进入维护模式后的命令行提示符通常是M开头比如M[100F]:。在这个模式里系统会挂载一个最小化的文件系统供操作它能识别设备内置的存储介质并提供ls、cd、tftp、fdisk等基础命令。但要注意维护模式不是完整系统很多上层命令不可用所以操作逻辑以挂载分区、定位文件、导出文件为主。3.2 在维护模式下定位配置分区设备进入维护模式后默认不会自动挂载data区。首先要确认存储设备名称。在大多数基于SATA/SAS磁盘的设备上它会是/dev/sda之类在基于CF卡的设备上可能是/dev/mmcblk0或/dev/hda。我通常在提示符下执行fdisk -l查看整个磁盘的分区布局。一个典型的FortiGate磁盘输出会包含多个分区其中要重点找的是ext4格式的那个分区它就是配置文件所在的数据分区。确认分区号后建立一个临时目录并挂载mkdir -p /tmp/mnt mount /dev/sda3 /tmp/mnt分区号不要照抄不同型号、不同FortiOS版本的分区编号会有差异一定要先看fdisk -l的输出再决定。挂载完成后配置文件一般在/tmp/mnt/etc目录下核心文件是forticonf.conf或system.conf不同版本文件名有差异日志在/tmp/mnt/log目录。用ls -la仔细看一下文件大小确认文件不是0字节再动手导出。3.3 通过TFTP把文件救出来文件找到之后就需要传输到外部主机。在维护模式下最通用的传输方式就是TFTP。先给防火墙管理接口配置一个和TFTP服务器同网段的IPifconfig eth0 192.168.1.2 netmask 255.255.255.0然后执行导出tftp -p -r system.conf -l /tmp/mnt/etc/system.conf 192.168.1.100其中-p表示put上传-r是远程文件名-l是本地文件路径最后的IP是TFTP服务器地址。如果文件比较多比如要把整个/tmp/mnt/etc目录打包导出维护模式下没有tar是常见问题这种情况可以用dd配合管道来传不过前提是文件是连续的块设备。更务实的做法是逐个导出关键文件别贪多。3.4 维护模式导出的实战顺序建议按我自己在故障现场的操作习惯进维护模式后按这个顺序行事先执行fdisk -l完整记录分区表防止后续操作出错时不知道原始状态。挂载data分区后先用ls -la记录文件列表和大小至少确认system.conf存在且非空。导出配置文件、证书目录、日志目录三块缺一不可。证书在/tmp/mnt/etc/cert或类似路径下少了它就算拿到配置也没法用于新设备。每次TFTP传输成功后回到电脑上对比文件大小确保和源文件一致再动下一步。4. 设备彻底开不了机时的离线固件提取4.1 从官方固件包中解出rootfs在线和维护模式都走不通或者目标仅仅是分析固件内部结构时可以从FortiOS固件镜像入手。官方固件通常是一个带自定义文件头的压缩包用常规解压工具打不开需要先识别文件头。用binwalk先扫描一把binwalk fortios.img输出里会明确标出rootfs压缩文件所在偏移量最常见的格式是squashfs。拿到偏移量后可以用dd把rootfs部分截取出来dd iffortios.img ofrootfs.squashfs bs1 skip偏移量然后用unsquashfs解包unsquashfs rootfs.squashfs解开后就是一个完整可浏览的根文件系统系统程序、库文件、启动脚本都在里面。对于想验证版本差异、研究启动流程的人来说这一步等于打开了黑盒。4.2 不同固件版本对提取工具的影响FortiOS 6.x的固件头部结构相对简单binwalk识别率高。到了7.0之后Fortinet在固件封包上做了一些调整部分版本直接binwalk会识别不出squashfs这时候可以先跑binwalk -A或者用foremost按文件特征去扫描。另一个常见问题是新旧固件的压缩算法差异旧版多采用gzip压缩的squashfs新版可能使用xz或zstd。unsquashfs的版本如果太老会报Filesystem uses unsupported compression的错误。解决办法是升级squashfs-tools到最新版而不是绕过报错。4.3 有磁盘镜像时的离线提取路径如果手里有从故障设备拆下来的整盘镜像比如用dd或者ddrescue做的镜像文件不需要直接操作物理设备可以把镜像文件挂载起来提取fdisk -l fortigate_disk.img losetup /dev/loop0 fortigate_disk.img -P mount /dev/loop0p3 /mnt/forti关键点是losetup -P参数它让内核把镜像里的分区表也解析出来这样每个分区就能以loop0p1、loop0p2这样的设备节点访问。如果不用-P内核往往只暴露整个镜像为一个块设备分区挂载会很麻烦。磁盘镜像提取的好处是保留了原始的分区结构、文件权限、删除文件的残留数据对日志取证和故障根因分析价值最高。缺点是需要额外的存储空间和分析时间一块4GB的磁盘镜像做全盘字符串扫描也不算轻松。5. 提取过程中的常见问题与排查思路5.1 问题速查表结合实际操作经验我把最常遇到的问题整理成一个速查表方便在现场对照处理现象可能原因排查与解决TFTP传输一直超时防火墙接口IP未配置电脑防火墙拦截UDP 69端口TFTP服务器目录无写权限确认两端IP同网段临时关闭电脑防火墙或放行TFTP端口检查服务器目录权限维护模式下ls无输出data分区未挂载分区编号选错先fdisk -l看分区表检查dmesg有无挂载错误确认文件系统是否损坏导出的配置文件是0字节挂载只读失败文件路径不对读取时分区已经异常重新挂载并检查mount输出在/tmp/mnt下逐层ls确认路径unsquashfs报压缩算法不支持squashfs-tools版本过旧固件用了新压缩算法升级到最新squashfs-tools尝试加-no-xattrs参数绕过属性解析问题binwalk识别不出rootfs固件文件头被加密或压缩文件不是完整固件用binwalk -A做深度扫描检查文件大小是否为完整固件包考虑对固件头做偏移分析恢复配置后部分接口状态不对配置文件与硬件型号不匹配接口索引发生变化用config system interface手工核对在新设备上微调接口映射关系5.2 分区挂载失败的处理经验维护模式下挂载data分区偶尔会看到mount: mounting /dev/sdaX on /tmp/mnt failed: Invalid argument之类的报错。这通常不是磁盘彻底坏了而是文件系统有轻微异常。先试试只读挂载并跳过日志回放mount -r -t ext4 /dev/sda3 /tmp/mnt-r只读挂载能避开日志回放失败带来的干扰对读取配置来说足够了。如果还不行再用e2fsck -n /dev/sda3以只读方式检查文件系统注意一定带-n避免修复操作对原始数据造成二次改动。5.3 版本差异导致的路径变化FortiOS从6.0到7.4的演进过程中配置文件路径和文件名有过调整。我的习惯是挂载好分区后不急着找特定文件名先列目录ls -la /tmp/mnt/ ls -la /tmp/mnt/etc/把整个目录树看一遍确认实际文件名和位置比靠记忆去套路径可靠得多。毕竟故障现场时间宝贵多试两次错误路径会浪费大量时间。6. 提取完成后的数据利用与现场心得6.1 配置文件恢复的正确姿势拿到配置文件后如果目标是在另一台FortiGate上恢复路径有两种一是通过Web界面Restore上传备份文件二是在CLI下执行execute restore config tftp 文件名 服务器IP恢复完务必留意版本匹配问题配置文件的版本不能高于目标设备固件版本否则可能出现语法解析错误。跨大版本恢复时建议先在新设备上升级固件到与旧设备相同或相近的版本再恢复配置不要先把配置灌进去再升级那样更容易出问题。6.2 日志文件和证书的后续处理日志文件提取出来后如果是明文日志直接用文本工具分析就行如果是二进制格式可以先在本地用FortiGate配套的工具或第三方日志分析平台做解析。证书文件导出后建议立即用OpenSSL检查有效期和私钥是否匹配openssl x509 -in cert.pem -text -noout openssl rsa -in private.key -check如果证书已经过期白忙一场。所以不要在提取完配置后就松懈证书验证是容易被忽略但极其重要的一步。6.3 一些花钱买不来的实操体会我在实际处理这类问题时最大的体会就是备份永远是第一位的。定期做配置备份、把备份文件存储在设备之外才是解决问题的根本手段文件系统提取只是事后补救。另一个体会是保存好原始固件镜像和磁盘镜像即使当前用不到在后续做故障复盘、安全分析时这些原始数据都是最有价值的证据。提取工作完成后不要急着把设备返修或者重新刷机先在电脑上保留一份完整的镜像文件和关键文件清单。如果你和我一样管理着一批FortiGate设备建议为每个型号建立一份文件系统关键路径速查表设备尺寸不同、版本不同路径差异记在文档里比记在脑子里可靠得多。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →