我刚刚cat /var/log/auth.log
登录了一下,发现有很多| grep "Failed password for"
记录。
但是,有两种可能的记录类型 - 对于有效/无效用户。这使我对他们的尝试变得复杂| cut
。
我希望创建一个列表(文本文件),其中包含可能攻击者的 IP 地址以及每个 IP 地址的尝试次数。有没有简单的方法来创建它?
另外,仅关于:在制作可能的攻击者列表时我应该考虑ssh
哪些所有记录?/var/log/auth.log
我的带有隐藏数字的“auth.log”示例:
cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail
结果:
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1
答案1
你可以使用这样的东西:
grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c
它会查找字符串Failed password for
并提取 ( -o
) IP 地址。它被排序,并uniq
计算出现的次数。
输出将如下所示(以您的示例作为输入文件):
1 111.111.111.1
3 111.11.111.111
6 111.111.11.111
输出中的最后一个已尝试 6 次。
答案2
这可能是一个臃肿的解决方案,但我建议你考虑安装类似的东西失败2Ban
它是为这种日志记录而设计的+增加了能够在防火墙中添加(临时)规则以阻止重复犯罪者的好处。不过,请务必将您自己的 IP 列入白名单,我有几次设法暂时将自己锁定在外面
答案3
这对我来说效果非常好。 (IP已更改以保护犯罪者)
$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
65 10.0.0.1
14 10.0.0.2
4 10.0.0.3
1 10.0.0.4
答案4
grep "Failed password for" /var/log/auth.log |
awk -F"from" {'print $2'} |
awk {'print $1'} |
sort -u