Text-Processing
如何使用 grep 或 awk 操作日誌文件?
我正在嘗試克服 /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(例如:太多密碼失敗,尋找漏洞等) . 它易於理解和配置以滿足您的需求。