在2天内,有19,000个auth.log中的root密码尝试失败?

我正在debugging一些login问题,偶然发现我的/var/log/auth.log中有很多失败的根密码尝试。这是一个VPS Linode。

过去两天,我试图find19K的尝试。

我知道我应该将sshd移动到不同的端口,但是记住和使用它似乎是一种痛苦,而且需要更新一堆脚本。 另外,攻击者只能通过ports来find新的端口吗?

我为root设置了一个非常强大的密码,所以我不太在意。

我想这只是每分钟6 …所以可能不是一个性能问题。

但这似乎并不理想。

任何想法如何阻止或防止它?

似乎来自一个相当小的IP地址列表…也许我可以阻止这些? 我查了一下,他们似乎在中国。

另一个select是禁用rootlogin,并设置一个sudo用户用一个唯一的用户名。 但我不认为这将有助于解决这个问题 – 人们仍然可以尝试以root身份login。

更新:使用默认设置apt-get安装fail2ban后,我看到在auth.log中失败的根尝试次数减less了6-8倍:

root@localhost:/var/log# grep "Failed password for root" auth.log | wc 21301 327094 2261733 root@localhost:/var/log# grep "May 1.*Failed password for root" auth.log | wc 6217 95973 664165 root@localhost:/var/log# grep "May 2.*Failed password for root" auth.log | wc 8370 127280 880779 root@localhost:/var/log# grep "May 3.*Failed password for root" auth.log | wc 1030 16250 111837 

我也消除了root ssh密码validation,并且只切换到root用户的基于密钥的login,通过以下方法: https : //unix.stackexchange.com/questions/99307/permit-root-to-login-via-ssh-only -with键为基础的身份validation

尽pipe如此,这并不能阻止失败的密码条目出现在auth.log中。 这只是说,即使他们知道密码,他们也无法通过。 因此,fail2ban会减less这些日志条目,而基于密钥的ssh提供实际的安全性。

最后,如所build议的那样,我已经为端口22实施了IP白名单,以完全消除日志条目。 作为参考,这可以使用ufw在Ubuntu上完成,如下所示:

 apt-get install ufw ufw allow from 127.198.4.3 to any port 22 ufw --force enable 

我正在使用–force,因为我正在脚本中执行此操作,而不是交互式地操作新的节点。

但是,为了处理来自我的dynamicIP的访问,在每次IP更改时都不要使用Linode的基于Web的Lish控制台,而是使用混合方法。

我有一个主服务器,托pipe我的主域,其他节点根据需要分解为子域上的子服务器。 主服务器包含用于ssh到子服务器的私钥。 这也是ssh列入白名单的IP。

但是主服务器使用NO ssh密钥,也不使用IP白名单。 我希望能够在紧急情况下从任何地方访问它,即使我没有密钥文件,甚至没有我不信任安装密钥文件的地方。 我需要类似密码访问的东西,但在一个密钥日志或ssh妥协的环境中是安全的。

多年来一直使用的解决scheme是基于硬件的双因子validation,使用YubiKey USB设备和安装在主服务器上的Yubico PAM模块。

因此,即使攻击者拥有主服务器的root密码,如果没有我的YubiKey,他们也无法进入。 这很容易随身携带。 我可以从世界上最脏的网吧安全地访问我的服务器上的root。

到达主服务器后,我可以进入任何没有密码的子服务器。

所以我仍然需要主服务器上的fail2ban,以减lessauth.log条目。 毕竟在子服务器上是不需要的,因为IP白名单需要处理这个问题。

试图阻止暴力攻击的特定IP范围并不是解决问题的理想方法。 有许多僵尸networking和服务器不断地扫描互联网并试图破坏服务器和设备。 试图阻止stream量将是非常低效的,所以你最好的select是减轻或者一起避免。

减轻连接数量的一种方法是更改​​SSH端口。 大多数攻击者采取霰弹枪的方式来危害主机,所以只要你select一个非标准的备用端口,你就不应该看到很多的SSH尝试,除非它是有针对性的攻击。 扫描互联网上的所有端口需要花费很多时间,所以这不是最好的方法,可以被认为是减轻一些攻击的一种方法。

另一种缓解方法是设置类似Fail2Ban的function,以自动将未能多次validation的IP列入黑名单。 这可以减轻一些攻击,但是现在不是很有效,因为大多数暴力攻击来自分布式主机。

处理SSH安全性的最佳方式是限制对服务本身的访问。 这可以通过将允许访问您的SSH端口的IP列入白名单,然后设置基于密钥的身份validation,然后禁用密码身份validation来完成。 如果攻击者无法到达SSH端口,或者从来没有机会尝试密码,就不用担心暴力攻击。

我不会指望长根密码。 18个字符不是很长,特别是如果它主要是带有几个符号和数字的话。

通常,在服务器(特别是面向公众的服务器)上允许使用密码进行rootlogin是一个坏主意,原因如下:很容易猜到用户名,关系太多,而且有很多人那里有脚本。

切换到所有用户只有基于密钥的身份validation也不是一个坏主意。 这在很大程度上消除了暴力攻击的威胁。