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

🔍 Linux Log 分析與 SIEM 實作:journalctl、GoAccess、ELK、Auditd、Fail2Ban 全攻略

    🔍 Linux Log 分析與 SIEM 實作:journalctl、GoAccess、ELK、Auditd、Fail2Ban 全攻略

    在現代環境裡,單一台 Linux 主機的 log 已經不再只是「出問題時才翻出來看」的輔助工具, 而是整體安全監控與事件追蹤的關鍵基礎。

    本文會從單機的 journalctlAuditdFail2Ban, 到 Web 流量分析工具 GoAccess,一路延伸到集中化的 ELK / SIEM 架構, 提供一套可以從「一台主機」平滑升級到「多台伺服器集中監控」的實戰路線。


    📌 一、為什麼需要集中化 Logging + SIEM?

    先快速整理傳統做法的幾個痛點:

    • 只在出事時才上機看 /var/log,平常完全沒有趨勢觀察。
    • 環境一多(5 台以上),每台逐一 ssh 查 log 完全不具規模性。
    • 沒有統一的格式與保留策略,查舊資料時要靠運氣。
    • 缺乏告警:Docker 當機、Nginx 502、sshd 爆量暴力攻擊時,沒有人第一時間收到通知。

    而一套完整的 Logging + SIEM 架構可以提供:

    • 集中收集:系統、Web、DB、安全設備 log 全丟到同一平台。
    • 全文檢索:關鍵字搜尋或多條件過濾。
    • 視覺化:儀表板顯示趨勢、Top IP、Top URL、Top 錯誤碼。
    • 告警:依規則推播到 mail / Slack / Teams / LINE。
    • 稽核追蹤:配合 Auditd、sudo log 等建立操作軌跡。

    📚 二、Linux Log 基礎盤點:哪些東西要被收集?

    常見要納入 Monitoring / SIEM 的 log 類型:

    • 系統 log:systemd journal(journalctl)、kernel、boot
    • 認證 log:sshd、sudo、su、PAM
    • 服務 log:Nginx / Apache / HAProxy / Postfix / DB
    • 安全 log:Auditd、Fail2Ban、SELinux / AppArmor event(可參考你的 Linux Security 系列):contentReference[oaicite:1]{index=1}
    • 應用程式 log:自家服務、微服務、容器應用產生的 log

    接下來會從「單機工具」開始,逐步往集中化架構走。


    🧰 三、journalctl:systemd 時代的 log 查詢主角

    在使用 systemd 的 Linux 上,大部分服務 log 已經收斂到 journal 之中。

    1. 查看整體 log(依時間倒序)

    journalctl -r

    2. 只看本次開機的 log

    journalctl -b

    3. 依照 service 過濾(例如 nginx)

    journalctl -u nginx.service -f

    4. 依時間區間查詢

    journalctl --since "2025-12-03 10:00" --until "2025-12-03 11:00"

    單機排錯與稽核時,習慣善用 journalctl 會讓效率差非常多。


    🛡 四、Auditd + Fail2Ban:從 Log 到動作(封鎖攻擊)

    1. Auditd:記錄「誰在系統上做了什麼」

    Auditd 適合用來記錄:

    • 關鍵檔案被誰修改(例如 /etc/sudoers、/etc/passwd)
    • 特定目錄的讀寫行為
    • 重要指令的執行記錄
    # 監控 /etc/sudoers 任何存取
    auditctl -w /etc/sudoers -p wa -k sudoers_watch

    之後可用:

    ausearch -k sudoers_watch
    aureport -f

    2. Fail2Ban:從 log 中自動封鎖惡意 IP

    你已有 Fail2Ban 進階教學文章,可以當作本篇的延伸閱讀之一:contentReference[oaicite:2]{index=2}。

    簡化版概念:

    • 讀取指定 log(例如 /var/log/auth.log 或 journal)
    • 比對 Regex 找出多次登入失敗 IP
    • 透過 iptables / nftables / Firewalld 自動封鎖
    [sshd]
    enabled  = true
    filter   = sshd
    logpath  = /var/log/auth.log
    maxretry = 5

    Fail2Ban 的 log 本身也要進 SIEM,因為它代表「哪些 IP 曾經攻擊過你」。


    📈 五、GoAccess:Web Access Log 即時分析

    你已經有獨立的 GoAccess + Nginx/Apache Dashboard 教學文,可直接串為本篇延伸閱讀:contentReference[oaicite:3]{index=3}。

    典型用法:

    goaccess /var/log/nginx/access.log \
      --log-format=COMBINED \
      --real-time-html \
      --output=/var/www/html/report.html

    優點:

    • 部署超快,適合臨時分析流量。
    • 可視化 Top URL、HTTP 狀態碼、來源 IP、User-Agent。
    • 可當作「Web log 視覺化前哨」,再把原始 log 丟給 ELK 做更進階分析。

    🧱 六、ELK / SIEM 架構:集中化 Log 與安全事件管理

    典型的集中化架構大致如下:

    各 Linux 主機:
      - systemd journal
      - /var/log/*(Nginx / Apache / App)
      - Auditd / Fail2Ban / Security logs
              │
              ▼
      Log Shipper(Filebeat / Fluent Bit / Vector)
              │
              ▼
      Elasticsearch / OpenSearch(索引與儲存)
              │
              ├─ Kibana / OpenSearch Dashboards(視覺化)
              └─ Alerting / SIEM(告警與關聯分析)

    實作重點:

    • 所有節點安裝輕量 Agent(如 Filebeat / Fluent Bit)。
    • 針對不同 log 類型使用不同 input module(systemd、nginx、auditd …)。
    • 在中央的 ELK/類似平台做索引、Mapping 與索引輪替。
    • 在 Dashboards 上建 Dashboard:流量、錯誤、登入失敗、root/ sudo 操作等。

    ⚙️ 七、簡易實作範例:Filebeat + Elasticsearch + Kibana

    1. 在 ELK 伺服器安裝 Elasticsearch + Kibana(略)

    假設你已有一台集中化 log 伺服器。

    2. 在 Linux 節點安裝 Filebeat

    # 以 Debian 系為例(實際 repo 依官方文件)
    sudo apt install filebeat

    3. 啟用 systemd module

    filebeat modules enable system
    filebeat modules enable nginx
    filebeat modules enable auditd

    4. 設定輸出到 Elasticsearch

    # /etc/filebeat/filebeat.yml
    output.elasticsearch:
      hosts: ["elk01:9200"]
      username: "elastic"
      password: "your_password"

    5. 啟動 Filebeat

    systemctl enable filebeat
    systemctl start filebeat

    之後即可在 Kibana 上看到 systemd、nginx、auditd 等 log index,並建立 Dashboard 與 Alert。


    🔔 八、告警與 SIEM 規則設計範例

    集中化之後,關鍵在於你定義什麼樣的事件要「叫醒人」:

    • 1 分鐘內多次 ssh 登入失敗 > N 次(配合 Fail2Ban 檢查)
    • 某台主機 Journal 出現 repeated segfault / OOM
    • Web 服務的 5xx 狀態碼突然飆高
    • Auditd 出現對敏感檔案的異常讀寫
    • 某 IP 對多個服務 port 做 port scan

    這些規則同時可以記錄在你的 Runbook / SOP 中,讓值班人員照表處理。


    🧪 九、容量管理與保留策略(結合你現有 logrotate 教學)

    集中化 log 的另一個挑戰是:容量爆炸。你已經有獨立的 logrotate 進階教學,可以用來控管本機 log 檔案輪替:contentReference[oaicite:4]{index=4}。

    在集中化平台則需要:

    • 為 Index 設定保存天數與 size 上限。
    • 將舊 Index 轉到冷儲存(S3 / 便宜磁碟)。
    • 對「安全相關 log」與「一般應用 log」設定不同保留時間。
    • 搭配備份策略(例如每天 snapshot、定期還原演練)。

    📋 十、Linux Log + SIEM 實作 Checklist

    ✅ 盤點所有要收集的 log 類別(系統 / Web / DB / 安全設備 / App)
    ✅ 統一時區與 NTP,同一事件不會每台時間都不同
    ✅ 善用 journalctl / Auditd / Fail2Ban 做單機防禦
    ✅ Web 流量先用 GoAccess 做初步分析與報表
    ✅ 部署集中化 Log 平台(ELK / OpenSearch / 其他)
    ✅ 每台 Linux 安裝 Log Shipper(Filebeat / Fluent Bit / Vector)
    ✅ 對關鍵事件定義 Alert 規則並測試通知
    ✅ 為 Index / Log 設定保留天數與容量上限
    ✅ 定期做「還原與稽核演練」,確認 log 真能回答問題
      

    💬 互動留言引導(Log / SIEM 實戰分享區)

    如果你在規劃或實作 Linux Log / SIEM 架構時,遇到以下狀況:

    • 不知道該先收哪些 log?
    • ELK / OpenSearch 架起來卻效能很差?
    • Filebeat / Fluent Bit 一直送不到集中平台?
    • Fail2Ban / Auditd log 太多,不知道該看什麼?

    歡迎在下方留言你的環境規模、節點數量與目前做法, 我會盡量以實戰角度協助分析,並把有代表性的案例整理成後續補充篇。


    🔗 延伸閱讀

    — WWFandy・Linux Log & SIEM Notes

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級