如何从 fail2ban 日志中获取唯一 IP(和被禁止次数)
How to get unique IP (and number of banned times) from fail2ban logs
我在 fail2ban
日志中有很多被禁止的 IP。这具有以下格式:
[...]
2021-02-28 00:03:33,818 fail2ban.filter [687]: INFO [sshd] Found 193.142.146.33 - 2021-02-28 00:03:33
2021-02-28 00:07:17,068 fail2ban.filter [687]: INFO [sshd] Found 193.142.146.33 - 2021-02-28 00:07:16
2021-02-28 00:08:49,568 fail2ban.filter [687]: INFO [sshd] Found 142.93.234.120 - 2021-02-28 00:08:49
[...]
我想将其转换为包含被禁次数的唯一 IP 列表(使用前面的示例):
2 193.142.146.33
1 142.93.234.210
评论:uniq
(zcat /var/log/fail2ban.log.4.gz | grep ssh | uniq -c - | less
)不行,因为拍的时间不一样。所以我在调用 uniq
.
之前需要一些预处理
假设日志的所有行都遵循与这三行相同的模板,任何地方都没有多余的空格:
zcat /var/log/fail2ban.log.4.gz | awk '{ print }' | sort | uniq -c | sort -k1,1rn
请注意,uniq
需要对输入进行排序。管道中的最后 sort
将首先显示最常出现的地址。
或者使用 perl
的 Regexp::Common
模块来获得一个强大的正则表达式来从每一行中提取所有 IPv4 地址:
zcat /var/log/fail2ban.log.4.gz | perl -MRegexp::Common=net -nE 'say for m/\b$RE{net}{IPv4}\b/g' | sort | uniq -c | sort -k1,1rn
我在 fail2ban
日志中有很多被禁止的 IP。这具有以下格式:
[...]
2021-02-28 00:03:33,818 fail2ban.filter [687]: INFO [sshd] Found 193.142.146.33 - 2021-02-28 00:03:33
2021-02-28 00:07:17,068 fail2ban.filter [687]: INFO [sshd] Found 193.142.146.33 - 2021-02-28 00:07:16
2021-02-28 00:08:49,568 fail2ban.filter [687]: INFO [sshd] Found 142.93.234.120 - 2021-02-28 00:08:49
[...]
我想将其转换为包含被禁次数的唯一 IP 列表(使用前面的示例):
2 193.142.146.33
1 142.93.234.210
评论:uniq
(zcat /var/log/fail2ban.log.4.gz | grep ssh | uniq -c - | less
)不行,因为拍的时间不一样。所以我在调用 uniq
.
假设日志的所有行都遵循与这三行相同的模板,任何地方都没有多余的空格:
zcat /var/log/fail2ban.log.4.gz | awk '{ print }' | sort | uniq -c | sort -k1,1rn
请注意,uniq
需要对输入进行排序。管道中的最后 sort
将首先显示最常出现的地址。
或者使用 perl
的 Regexp::Common
模块来获得一个强大的正则表达式来从每一行中提取所有 IPv4 地址:
zcat /var/log/fail2ban.log.4.gz | perl -MRegexp::Common=net -nE 'say for m/\b$RE{net}{IPv4}\b/g' | sort | uniq -c | sort -k1,1rn