熱門分類
載入中…
目錄0%

🔐 FortiGate 自動化備份 + 版本比對實戰:排程、CLI、差異檢查完整指南

    🔐 FortiGate 自動化備份 + 版本比對實戰:排程、CLI、差異檢查完整指南

    在企業環境中,FortiGate 扮演的是整個網路出入口與 Gateway 安全核心, 任何一條 Policy、路由、物件或 VPN 設定改錯,都可能直接影響整個公司上網與服務存活。

    如果這些設定沒有做好「定期備份 + 版本差異比對」,當某天出現連線異常或安全事件, 想回頭找「到底是誰、在什麼時候改了什麼」就會非常痛苦。

    本文會實作一套可落地的流程:利用 FortiGate CLI 匯出設定檔, 再搭配 Linux 管理主機 + 排程 + git 自動化備份,並用 Diff 工具檢查差異, 讓 FortiGate 設定也能享受類似「程式碼版本控制」的管理方式。


    📌 一、整體架構與設計思路

    先用一張簡化架構圖說明流程:

              ┌──────────────────────────────┐
              │      Linux 管理主機(Backup) │
              │  - ssh key 登入 FortiGate     │
              │  - 排程備份(cron / systemd) │
              │  - git 管理版本 + Diff        │
              └───────────▲──────────────────┘
                          │
              ssh / scp   │
                          │
                  ┌───────┴────────┐
                  │ FortiGate 防火牆 │
                  │  - CLI 已開啟    │
                  │  - 管理帳號       │
                  └─────────────────┘

    實作目標:

    • 每天自動抓一份設定檔回管理主機。
    • 依日期命名與放進 git repository 中管理。
    • 透過 git diff / VS Code / Beyond Compare 等工具檢查差異。
    • 必要時可快速還原到歷史版本設定(手動或半自動)。

    🧰 二、FortiGate CLI 設定備份方式總覽

    FortiGate 本身支援多種備份方式:

    • Web GUI:手動下載設定檔(加密 / 未加密)。
    • CLI:execute backup config ... 備份到 TFTP / FTP / SCP / USB。
    • 顯示設定:show full-configuration,可直接當純文字版本使用。
    • 新版可搭配 Automation / Script,但仍建議由外部管理主機統一控管。

    本文主軸會使用:

    • 方式 A:Linux 管理主機以 SSH 登入 FortiGate,執行 show full-configuration,將輸出導入檔案。
    • 方式 B:在 FortiGate 上執行 execute backup config scp / TFTP,自動推回管理主機。

    📡 三、方式 A:SSH + show full-configuration(最直覺好 Diff)

    1. 建立 FortiGate 管理帳號(建議)

    在 FortiGate CLI 中建立一個專用的備份帳號,例如 backup

    config system admin
        edit "backup"
            set accprofile "read-only"
            set vdom "root"
            set password <strong-password>
        next
    end

    若需要匯出完整設定(包含敏感資訊),權限可視情況調整為更高級別,但建議僅開啟必要權限,並限制來源 IP。

    config system admin
        edit "backup"
            set trusthost1 10.0.10.0 255.255.255.0
        next
    end

    2. 在 Linux 管理主機產生 SSH 金鑰並複製到 FortiGate

    # 管理主機產生金鑰
    ssh-keygen -t ed25519 -f ~/.ssh/fortigate_backup -C "fortigate-backup"
    
    # 將 public key 貼到 FortiGate 帳號設定中
    # (可在 GUI > System > Administrators > backup > SSH public key)
      

    設定完成後,測試從管理主機免密碼登入:

    ssh -i ~/.ssh/fortigate_backup backup@10.0.0.254

    3. 撰寫備份腳本:抓取完整設定並丟進 git

    在管理主機建立一個專用目錄,例如 /opt/fortigate-backup

    sudo mkdir -p /opt/fortigate-backup
    sudo chown $(whoami): /opt/fortigate-backup
    cd /opt/fortigate-backup
    git init

    建立 shell script,例如 backup_fgt.sh

    #!/bin/bash
    set -e
    
    FGT_HOST="10.0.0.254"
    FGT_USER="backup"
    SSH_KEY="$HOME/.ssh/fortigate_backup"
    TODAY=$(date +"%Y-%m-%d_%H%M")
    OUTDIR="/opt/fortigate-backup/configs"
    mkdir -p "$OUTDIR"
    
    OUTFILE="${OUTDIR}/fortigate_${FGT_HOST}_${TODAY}.conf"
    
    # 1) 透過 SSH 執行 show full-configuration
    ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no \
        ${FGT_USER}@${FGT_HOST} \
        'show full-configuration' > "$OUTFILE"
    
    # 2) 建立/更新最新 symlink 方便快速查看
    ln -sfn "$OUTFILE" "${OUTDIR}/fortigate_${FGT_HOST}_latest.conf"
    
    # 3) 加入 git 版本控制
    cd /opt/fortigate-backup
    git add "$OUTFILE"
    git commit -m "Backup ${FGT_HOST} at ${TODAY}" || echo "No change to commit"
    

    記得給執行權限:

    chmod +x /opt/fortigate-backup/backup_fgt.sh

    4. 利用 cron 排程每日備份

    crontab -e

    加入每天凌晨 03:10 執行一次:

    10 3 * * * /opt/fortigate-backup/backup_fgt.sh >/tmp/backup_fgt.log 2>&1

    這樣就完成「每天從 FortiGate 拉一份完整設定、丟進 git repository 裡」的自動化流程。


    💾 四、方式 B:FortiGate 自動推送設定(execute backup config ...)

    另一種做法是讓 FortiGate 主動把設定推到 TFTP / FTP / SCP 主機:

    1. CLI 手動備份到 TFTP(示意)

    execute backup config tftp FGT-01_$(get system time).conf 10.0.10.10

    不同 FortiOS 版本指令略有差異,常見格式為:

    • execute backup config tftp <filename> <server-ip>
    • execute backup config ftp <filename> <server-ip> <user> <password>
    • execute backup config scp <filename> <user>:<server-ip>:<path>(視版本支援)

    實務上可以搭配 Script / Automation Profile 定期執行,不過多數情況還是建議由外部管理主機統一排程與版本控管,比較好集中管理。


    🧪 五、Diff:快速找出「誰改了什麼」

    有了每日備份檔後,下一步就是「比較差異」。

    1. 使用 git log / git diff

    cd /opt/fortigate-backup
    
    # 查看歷史備份紀錄
    git log --oneline --graph
    
    # 比較最近兩次備份差異
    git diff HEAD~1 HEAD
    
    # 指定某兩個時間點的差異
    git diff <commit-id-1> <commit-id-2>
    

    搭配 VS Code / Beyond Compare 等 GUI 工具,可以更直覺地看到每條 policy、物件、路由的新增、刪除與修改。

    2. 直接用 diff 比較兩個檔案

    diff -u fortigate_10.0.0.254_2025-12-01_0310.conf \
           fortigate_10.0.0.254_2025-12-03_0310.conf | less

    使用 -u 會顯示上下文,有利於閱讀。


    🛡 六、安全性與權限控管建議

    FortiGate 設定檔中可能包含:

    • VPN 帳號密碼
    • 管理介面設定
    • 內部網段結構與拓樸

    因此,對備份主機與 git repository 要特別注意:

    • 備份目錄權限限制,例如 chmod 700 /opt/fortigate-backup
    • 若推到遠端 git server,建議架在內網或私有 GitLab / Gitea,不要公開。
    • 必要時可再用 GPG 等方式加密設定檔,解密權限僅限少數管理者。
    • 管理主機本身需做好硬碟加密與登入控管。

    🧯 七、還原(Restore)與實務建議

    備份只是第一步,關鍵是「真的能還原」。

    • 定期在 Lab / 測試機器上實際測試匯入設定檔。
    • 遇到重大變更(例如 Gateway / Routing 大調整)前,手動做一份額外備份並標註。
    • 如有多台 FortiGate(HQ + Branch),記得分別建立不同子目錄與命名規則。

    簡單建議命名方式:

    /opt/fortigate-backup/configs/
      ├── FGT-HQ_2025-12-03_0310.conf
      ├── FGT-BR1_2025-12-03_0310.conf
      └── FGT-DC_2025-12-03_0310.conf

    配合 git tag 註記重要節點,例如:

    git tag -a "before-dc-migration" -m "DC 網路改版前最後版本"
    git push --tags

    📋 八、FortiGate 設定備份 + Diff 實作 Checklist

    ✅ 在 FortiGate 建立專用備份帳號(限制來源 IP)
    ✅ 在 Linux 管理主機建立 SSH 金鑰並測試免密碼登入
    ✅ 撰寫 backup_fgt.sh 自動抓取 show full-configuration
    ✅ 以日期與設備代號命名備份檔
    ✅ 使用 git 管理備份版本(git add & commit)
    ✅ 設定 cron / systemd timer 每日排程執行
    ✅ 定期使用 git diff / diff / GUI 工具檢查差異
    ✅ 確認備份主機與 repository 權限管控完善
    ✅ 不定期實際測試 Restore 與還原流程

    💬 互動留言引導(FortiGate 備份 / Diff 實戰分享區)

    如果你在實作 FortiGate 自動化備份、排程或 Diff 的過程中遇到:

    • SSH 金鑰登入卡關或不能免密碼
    • show full-configuration 輸出不完整或中途被截斷
    • 多台 FortiGate 不知道如何設計命名與目錄結構
    • 想把備份與其他設備(例如 Switch / Router)一起管理

    歡迎在下方留言你的 FortiGate 型號、FortiOS 版本與目前做法, 我會把有代表性的案例整理成補充篇更新在本文,讓這套備份 + Diff 流程更完整。


    🔗 延伸閱讀

    — WWFandy・FortiGate Backup & Diff Notes

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級