Linux 日誌分析:找出伺服器攻擊痕跡 文章首圖

Linux 日誌分析:找出伺服器攻擊痕跡

Linux 日誌分析:找出伺服器攻擊痕跡

在伺服器管理的日常工作中,安全監控往往是後置且被忽視的環節。當伺服器出現異常當機或效能低落時,第一時間該檢查什麼?答案通常是日誌(Logs)。Linux 系統將各種事件詳細記錄在 /var/log 目錄下,對於具備基礎 Linux 知識的中階使用者而言,掌握如何快速從海量日誌中篩選出異常流量與攻擊痕跡,是維護伺服器穩定性的核心技能。

本文將以 Ubuntu 22.04 / Debian 12 為例,示範如何透過標準指令列工具,有效識別常見的暴力破解與惡意掃描行為。

了解關鍵日誌位置

在深入分析之前,我們必須知道資料藏在哪裡。對於 Web 伺服器與 SSH 服務,最重要的兩個日誌檔案如下:

  • /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS):記錄系統登入、SSH 連線嘗試及權限變更。這是發現暴力破解攻擊(Brute-force)的主要來源。
  • /var/log/nginx/access.log/var/log/apache2/access.log:記錄所有 HTTP 請求。若日誌中出現大量 404 錯誤或異常的 User-Agent,可能暗示有人正在進行目錄掃描或漏洞探測。

步驟一:檢測 SSH 暴力破解痕跡

最常見的伺服器攻擊之一是針對 SSH 埠(預設 22)的暴力破解。攻擊者會使用字典檔不斷嘗試登入,直到猜中密碼為止。

我們可以結合 grepsortuniq 指令,快速統計失敗次數最多的 IP 位址。請執行以下指令:

grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -n 10

指令解析:

  1. grep "Failed password":篩選出所有登入失敗的記錄。
  2. awk '{print $(NF-3)}':提取來源 IP 位址。在 SSH 日誌格式中,IP 通常位於倒數第四個欄位(NF-3),具體位置可能因日誌格式微調而異,請根據實際輸出調整。
  3. sort | uniq -c:將 IP 排序並計算出現次數。
  4. sort -nr:依照次數由大到小排序。
  5. head -n 10:僅顯示前 10 名最頻繁的攻擊 IP。

若發現某個非預期 IP 的失敗次數高達數百次,這幾乎可以確定是自動化攻擊工具在運作。

步驟二:分析 Web 伺服器的異常請求

針對 Web 伺服器,我們需要尋找惡意掃描痕跡。常見的攻擊包括目錄遍歷(Directory Traversal)或嘗試存取敏感檔案(如 .env, wp-login.php)。

使用 awk 統計狀態碼為 404 的請求,並找出來源 IP:

awk '$9 == 404 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

指令解析:

  • $9 == 404:假設日誌格式為標準 Combined Log Format,第 9 欄位為 HTTP 狀態碼。404 代表資源不存在,大量 404 通常意味著掃描器正在尋找可利用的漏洞路徑。
  • 後續指令同上,用於統計並排序。

此外,檢查異常的 User-Agent 也是重要步驟。攻擊者常使用空字串或特定的惡意掃描器名稱:

awk '{print $12}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

若看到大量 Mozilla/5.0 (compatible; Nmap Scripting Engine) 或空白的 ",應立即提高警覺。

步驟三:即時監控與防禦建議

除了事後分析,即時監控能更有效地阻斷攻擊。安裝 fail2ban 是標準做法,它會自動監控日誌並封鎖違規 IP。

若你希望手動即時監控 SSH 失敗連線,可使用 tail 指令:

tail -f /var/log/auth.log | grep "Failed password"

當看到攻擊 IP 時,可立即使用 iptablesufw 進行阻斷。例如使用 ufw

sudo ufw deny from <攻擊者IP>

常見問題解答

Q1: 日誌檔案太大,處理起來非常緩慢怎麼辦? A: 建議使用 zgrep 來查詢壓縮過的歷史日誌(如 auth.log.1),或定期使用 logrotate 管理日誌輪替。對於即時分析,建議只針對最近 24 小時的日誌進行統計,或使用 journalctl(systemd 系統)來查詢特定時間範圍的日誌,效能更佳。

Q2: 如何區分正常的使用者登入失敗與攻擊? A: 正常使用者的失敗次數通常很少(1-3 次),且時間間隔較長。攻擊則呈現「高頻率、短時間、單一來源多帳號」的特徵。若同一 IP 在幾分鐘內嘗試數十個不同使用者帳號,即可判定為攻擊。此外,可結合白名單機制,忽略內部管理 IP 的失敗記錄。

小結

透過上述步驟,我們利用 Linux 內建的強大文本處理工具,無需安裝額外軟體即可初步判斷伺服器是否遭受攻擊。雖然這些指令無法替代專業的 SIEM 系統或入侵偵測系統(IDS),但它們是快速應急處理的第一步。定期檢視日誌、設定自動化的阻斷機制,並保持系統更新,才是保障伺服器安全的長久之道。