Text-Processing

如何使用 grep 或 awk 操作日誌文件?

  • December 10, 2016

我正在嘗試克服 /var/log/secure 日誌文件,並僅顯示“密碼失敗”日誌類型,該類型至少出現 3 次。 有什麼方法可以僅使用 linux 命令來做到這一點?啊?grep?

安全日誌的範例,

Mar 20 08:38:28 localhost sshd[21895]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=mail.queued.net user=root 
Mar 20 08:38:31 localhost sshd[21895]: Failed password for root from 207.210.101.209 port 2854 ssh2 
Mar 20 15:38:31 localhost sshd[21896]: Received disconnect from 207.210.101.209: 11: Bye Bye 
Mar 20 08:38:32 localhost unix_chkpwd[21900]: password check failed for user (root) 
Mar 20 08:38:32 localhost sshd[21898]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=she

從這個日誌文件中,我希望什麼也沒說,因為只有 1 行密碼失敗,但可以說有 4 行“密碼失敗”,具有相同的 IP - 我想顯示可能試圖暴力破解我的 IP 地址。 .

這只是完成工作的一種方式。而不是使用者名,我更喜歡計算特定 IP 地址嘗試連接到我的主機的次數,因為這樣我最終可以禁止它。

awk '/Failed password/{ z[$11]++; } 
    END{ 
      for (i in z){ 
        if (z[i]>3) printf("%s attemps %s times.\n", i, z[i])
      }
}' /var/log/secure

(當然它可以是一個單行命令,我縮進是為了增加可讀性。)

解釋:

awk逐行讀取日誌文件。如果一行包含字元串/Failed password/遞增數組元素z[$11]++索引$11(即 IP 地址):我將其用作計數器。最後,在數組中搜尋z[$11]並僅列印嘗試連接超過 3 次的 IP 地址。

您可以根據需要自定義支票和列印消息。


如果您擔心暴力嘗試,我可以建議您使用現有工具作為Fail2ban掃描日誌文件並禁止顯示惡意跡象的 IP(例如:太多密碼失敗,尋找漏洞等) . 它易於理解和配置以滿足您的需求。

引用自:https://unix.stackexchange.com/questions/329252