iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
Security

從1到2的召喚羊駝補破網之旅系列 第 18

Day 18:SonicWall 黑名單匯入實戰

  • 分享至 

  • xImage
  •  

[鐵人賽] Day 18:SonicWall 黑名單匯入實戰 — Threat Feed × 自動化安全策略

📝 寫在前面

(Day 13)談到如何用 n8n + ThreatView/Blocklist 自動化處理情資,今天換個角度,直接把外部 Threat Feed 匯入到 SonicWall 防火牆
這篇算是對比 Fortinet 的做法,看看 SonicWall 在操作與限制上的差異,並示範如何結合爬蟲與 API/SSH,自動化「黑名單匯入」。

Day 17提到的資安院獎金獵人備賽過程,因為Day 18-19已經寫了,所以還是放一下好了😂


🎯 本日目標

  • 爬取 Threat Intelligence Feed(ThreatView、blocklist.de、FireHOL、DShield)
  • 匯入 SonicWall → 建立 Address Object / Address Group
  • 自動化流程(每日更新黑名單)

1) 啟用 SonicWall SSH 管理介面

首先,要讓防火牆可以接受批次設定,需開啟 SSH 管理功能

GUI 設定步驟

  1. 登入 SonicWall Web 管理界面 → System / Device → Administration

    • 勾選 Enable SSH Management
    • 設定連接埠(預設 22,可修改)
    • 設定允許來源(LAN/WAN/MGMT)
  2. 進入 Network → Interfaces,確認要啟用 SSH 的介面允許 Management Access。

  3. 測試連線:

    ssh admin@<firewall-ip> -p 22
    

🔒 安全建議

  • 不建議直接在 WAN 開 SSH → 至少要限制來源 IP。
  • 可改用非預設 Port + 強密碼/金鑰認證。
  • 開啟前先備份設定檔。

2) Threat Feed 爬蟲

我們要抓取的清單如下:

feeds = {
    "ThreatView_IP_High": "https://threatview.io/Downloads/IP-High-Confidence-Feed.txt",
    "blocklist.de_all": "https://lists.blocklist.de/lists/all.txt",
    "FireHOL_Level1": "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/firehol_level1.netset",
    "DShield_Block": "https://feeds.dshield.org/block.txt",
}

Python 範例:抓取與清理

import requests

def fetch_feed(url):
    resp = requests.get(url, timeout=10)
    resp.raise_for_status()
    return [line.strip() for line in resp.text.splitlines() if line and not line.startswith("#")]

ips = []
for name, url in feeds.items():
    ips.extend(fetch_feed(url))

# 去重
ips = sorted(set(ips))
print(f"共收集 {len(ips)} 個惡意 IP")

3) 匯入 SonicWall 黑名單 — 三種方式

方法 A — GUI 匯入

  • 匯入 CSV → Address Objects → Address Group → Firewall Rule。

  • 範例 CSV 格式:

    name,type,zone,ip,netmask,comment
    bad-91.245.255.43,host,LAN,91.245.255.43,255.255.255.255,Threatview 2025-09-17
    bad-94.198.54.61,host,LAN,94.198.54.61,255.255.255.255,Threatview 2025-09-17
    

方法 B — REST API(推薦)

新版 SonicOS 支援 API,可以自動化批次建立 Address Object:

API_URL="https://<FW_IP>/api/sonicos/config/addressObjects"
USER="admin"
PASS="YourPassword"

curl -k -u ${USER}:${PASS} -H "Content-Type: application/json" \
  -X POST "${API_URL}" \
  -d '{
    "name": "bad-91.245.255.43",
    "type": "IPv4",
    "ip": "91.245.255.43",
    "netmask": "255.255.255.255",
    "comment": "Threatview OSINT 2025-09-17"
  }'

👉 你可以寫一個 Python/cron job,把每天的 Feed 轉成 JSON → 丟到 SonicWall API。

方法 C — SSH 批次(臨時)

若 CLI 支援,可以用 paramiko/expect 一次下指令:

for ip in $(cat bad_ips.txt); do
  ssh -p 22 admin@<FW_IP> "configure; address-object ipv4 add name bad-${ip} ip ${ip} netmask 255.255.255.255; exit"
done

4) 自動化流程設計圖

flowchart TD
    A[Threat Intelligence Feeds] -->|HTTP GET| B[Python 爬蟲收集 IP]
    B --> C[格式轉換 CSV/JSON]
    C --> D{SonicWall 匯入方式}
    D -->|REST API| E[自動建立 Address Objects]
    D -->|GUI 匯入| F[人工驗證少量測試]
    D -->|SSH 指令| G[批次下 CLI]
    E --> H[建立 Address Group → 防火牆規則 Deny]
    F --> H
    G --> H
    H --> I[Log/Monitor → SIEM/EDR]

5) 實務注意事項

  • 物件上限:SonicWall Address Objects 有數量限制,請先查機型規格。
  • 效能:避免上萬筆單獨 IP,能合併成網段就合併。
  • 白名單:一定要有排除清單(避免誤封合作夥伴 IP)。
  • 測試策略:先用「Log Only」模式觀察 24–72 小時,再改成 Deny。
  • 備份/回滾:每次批次更新前 → Export Settings 備份。

🔚 結語

這篇示範了如何把外部情資(Threat Feed)整合進 SonicWall 防火牆,並且用 API/爬蟲達成自動化。
雖然 SonicWall 在「大量匯入黑名單」的靈活度上不如 Fortinet,但透過 REST API 搭配腳本,依然能做到每天自動更新、批次封鎖惡意 IP。

安全策略不是「一次匯入就好」,而是持續更新。
有了這套流程,我們就能把外部 Threat Intelligence 轉化為可落地的 防火牆阻擋規則,提升整體防護力。



上一篇
Day 17 :插播文[副本]資安院推動賞金獵人
系列文
從1到2的召喚羊駝補破網之旅18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言