如何检索可能的ssh攻击者的IP地址?


17

我刚刚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

我建议您创建ssh密钥,将它们安装在服务器上,并完全禁用服务器sshd配置文件中的密码/etc/ssh/sshd_config...查找设置PasswordAuthentication noPermitRootLogin without-password 然后...在进入auth.log之前,所有此类密码尝试都将被阻止。
Scott Stensland '19

Answers:


19

您可以使用如下形式:

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次。


这是最好的答案@chaos-添加到我的有用的oneliners框中-谢谢!
2015年

很好的解决方案。我不知道grep可以提取正则表达式匹配项,而不仅仅是过滤行。我刚刚加入| sort -n了连锁店。
克拉韦米尔2015年

1
好的答案-多次抓狂通常是使用sed的信号。sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'替换了两个抱怨。
猎户座

1
@orion是真实的,但想想第一个grep也可以zgrep "Failed" /var/log/auth.log*通过压缩的日志档案搜索,但是sed不能。
混乱

1
IPv6呢?
Ortomala Lokni '16

6

这可能是一个肿的解决方案,但我建议您考虑安装像Fail2Ban这样的东西

它是为这种日志记录而设计的,并增加了能够在防火墙中添加(临时)规则以阻止重复犯罪的好处。不过请确保将自己的IP列入白名单,但在某些情况下我暂时将自己锁定在外


好吧,不错的评论,但不能回答问题。它更像是可以消除问题需求的建议,但是我不需要守护程序来监视我的文件。我有我为什么只需要通过脚本将该列表作为文本文件列出的原因。:)
克拉韦米尔2015年

我同意@Miro,如果您在这里没有提到它,我会在评论中添加它。
SailorCire

@Miro,您是对的,不是对问题本身的答案,它只是我想到的一种方便的日志记录工具。
2015年

0

这对我来说确实很好。(已更改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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.