每天获得数百次闯入尝试是否正常?


196

我刚刚检查了服务器的服务器/var/log/auth.log,发现每天每天收到超过500个失败的密码/侵入尝试通知!我的网站很小,URL也不清楚。这正常吗?我应该采取任何措施吗?


2
直到我们锁定了所有不必要的外部端口之前,我记得不仅获得了很多黑客尝试,而且有一天真是太糟糕了,以至于我们同时被来自两个不同国家的黑客入侵了!所以是的,几百次闯入尝试是完全正常的。
Django Reinhardt

91
我们的服务器每16秒钟经历一次新的攻击“序列”。单个序列通常是在各个端口上进行大约100次尝试的一批。只是为了有一天,我打开了防火墙外部一台未打补丁的服务器。从开机开始不到10分钟即可获得pwnd。关键是互联网确实是一个丛林。尽量不要被吃掉。
NotMe 2011年

2
我可以看到我贴我的问题到错误网站:superuser.com/questions/200896/...
贾斯汀ç

6
尽管我同意其他人的观点,这在所需的通用端口上是正常的(80,443),但实际上通过将默认端口从22更改为晦涩的类似6022,实际上消除了针对我的SSH端口的这些尝试。仅此一项,就几乎消除了99%的此类攻击。
基洛

2
如果要更改SSH端口,出于安全原因,请将其保持在端口1024以下(只有root可以打开<1024的端口,因此它可以防止其他用户劫持SSH)。
布伦丹(Brendan)

Answers:


207

在当今的互联网上,这很可悲。大量僵尸网络试图登录整个IP网络中找到的每台服务器。通常,他们对知名帐户(例如root或某些应用程序帐户)使用简单的字典攻击。

不能通过Google或DNS条目找到攻击目标,但是攻击者只是尝试在某个子网(例如,已知的根服务器托管公司)中的每个IP地址。因此,URL(因此是DNS条目)相当晦涩,这没关系。

这就是为什么如此重要的原因:

  • 禁止在SSH中进行root登录(howto
  • 在任何地方(包括Web应用程序)都使用强密码
  • 对于SSH,请尽可能使用公钥身份验证,并完全禁用密码身份验证(howto

此外,您可以安装fail2ban,它将扫描身份日志,如果它从某个IP找到一定数量的失败登录尝试,它将继续将该IP添加到/etc/hosts.deny或iptables / netfilter中,以将攻击者锁定几分钟。

除了SSH攻击外,扫描您的Web服务器以查找易受攻击的Web应用程序(某些博客应用程序,CMS,phpmyadmin等)也变得很普遍。因此,请确保也将它们保持最新并进行安全配置!


21
诸如fail2ban之类的应用程序可以极大地帮助“临时”阻止那些僵尸程序在早晨的愚蠢时间内击中您的服务器:-)我已经设置了我的机器,以禁止24小时内进行3次不正确的尝试。
emtunc 2011年

46
并将ssh的端口从22移到222。效果很好。
汤姆·奥康纳

40
+1,仅公共密钥身份验证:)
0xC0000022L

3
@STATUS_ACCESS_DENIED:fail2ban采取的操作只是要运行的shell命令的列表。因此,使用任何自定义配置都能正常工作非常灵活且容易。最好的参考是下载并查看action.d/iptables.conf
mattdm 2011年

4
这样阻止攻击者是浪费时间。如果禁用root登录,则很有可能没有人会猜出您的正确登录名,更不用说密码了。SSH本身已经在限制密码请求的速度,因此,即使他们知道您的用户名(随机机器人也不会知道),但是如果您拥有一个不错的密码,他们将永远不会猜到。
布伦丹·朗

58

几百个就好了...上个月,我发现我的一台服务器尝试了40k次失败。我经历了绘制它们的麻烦:地图

一旦我更改了ssh端口并实施了Port Knocking,该数字便降至0 :-)


2
尼斯地图。我很想知道怎么做!
jftuga 2011年

9
@jftuga我首先从日志中获取了所有IP。grep 'Failed password' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq(如果要允许重复,请在最后删除| uniq)。然后,您可以将它们放入CSV并将其上传到zeemaps.com。我见过的最好的地图,然后我的,在那里他们将使用计数彩色地图(绿变红每县尝试的次数),但我还没有想通喷,一出
巴特德沃思

3
“实施端口敲门”是什么意思?我可以通过apt-get安装该应用程序吗?数字下降到0听起来不错

18
晦涩难懂的安全保护措施不好。只要它是整体策略而不是整个策略的一部分,那就太好了。毕竟,除了晦涩的字符串以外,还有什么密码?
乔尔·科尔

5
@Joel Coel,这是一个秘密字符串,与通过隐蔽性问题实现的大多数安全性相反-一个晦涩但不一定是秘密的过程。
tobyodavies

29

除了仅允许公共密钥身份验证和禁止root登录之外,我还使用了“ tarpit”。

netfilter其中有一个recent模块,您可以将其与(INPUTchain)一起使用:

iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT

这样做是因为,recent使用IP和其他名称的模块以“ tarpit”的名称列出了每次尝试连接到端口22的尝试(如果您很好奇,请参阅/proc/net/xt_recent/tarpit)。显然,您可以使用其他名称。

要列出或取消列出IP,请使用:

echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit

这将尝试的速率限制为300秒内5次。请注意,具有现有连接的用户不会受到该限制的困扰,因为他们已经建立了连接并且可以创建更多的连接(甚至超过速率限制)。

根据自己的喜好调整规则,但请确保按该顺序添加规则(即,添加时按此顺序使用,插入时按相反的顺序使用)。

这极大地降低了噪音。它也提供了实际的安全性(针对暴力破解),这与更改端口的安全性有所不同。但是,如果您的环境可行,我仍然建议您更改端口。它将大大降低噪音水平...

您仍然可以将它与fail2ban结合使用,尽管没有它和上面的规则我一直运行得很好。

编辑:

可以阻止自己这样做,因此您可以添加类似以下内容的内容,以使您可以通过敲击特定端口来清除禁令:

iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove

2
我使用它并设法偶尔阻止自己,所以想设置另一个端口以使您可以“敲”清除禁令。
benlumley 2011年

@benlumley:好点。端口敲除对于更改默认端口也可能有用,甚至可以将两者组合使用...
0xC0000022L

@benlumley:看到了您的评论(已由Sam删除)。我绝对不介意答案是否得到编辑/改进;)
0xC0000022L

15

您可以实现fail2ban或类似的方法,例如将SSH锁定到IP。可悲的是,僵尸程序一直试图强行访问,因此这很正常,您需要确保输入正确的密码。


3
如果您使用的是SSH,请考虑使用公钥身份验证。这比密码验证更安全。
Piskvor 2011年

12

是的。如今这很正常。

如有可能,请仅出于管理目的使用公钥身份验证。在您的工作站上生成一个私钥:

$ ssh-keygen -t dsa

〜/ .ssh / id_dsa.pub的内容复制粘贴到服务器〜/ .ssh / authorized_keys(和/root/.ssh/authorized_keys,如果需要直接root登录)。

将服务器/ etc / ssh / sshd_config配置为仅接受公共密钥身份验证:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password

如果服务器太多,则可以使用Puppet对它们运行公钥和配置。

查看Denyhostsfail2ban以阻止重复的SSH登录尝试,如果需要完整的IDS / IPS ,请参阅Snort


2
我不建议在SSH中使用公钥身份验证对服务器进行Shell访问。如果您的工作站受到威胁甚至被盗,那么现在有人无需密码即可对您的服务器进行开放访问。公钥身份验证更适用于以下情况:您需要脚本或程序之类的东西才能通过SSH访问另一个系统而无需密码,因此您不必在脚本/程序中嵌入纯文本密码。
注册用户

5
@已删除的帐户:您可以为SSH私钥设置密码。
Phil Cohen

2
“注册用户的”注释是错误的。需要澄清的是:始终在私钥上设置一个好的密码,并且不要在任何服务器上存储私钥。将私钥保存在您自己的工作站上。将密钥添加到ssh-agent程序中并输入密码后,就可以登录安装了公用密钥的每个系统,而无需再次输入密码。在ssh客户端中启用代理转发,以便您可以从服务器登录到服务器。窃取您的私钥是不好的,但是上面有一个不错的密码,它不像被盗的密码那样糟糕。
Martijn Heemels,2011年

是的,甚至不要考虑存储未加密的管理员私钥。
yrk


6

尝试是机械化的,所以数字似乎还可以(是的,与某些站点相比,该数字较高,而与其他站点相比,该数字较低)。您应该采取通常必须采取的步骤:即使没有检测到攻击,每天也都将站点视为攻击目标。未检测到攻击,并不表示它不存在


6

我想说只有500个是有点低。

在以前的雇主那里,一位计算机安全研究人员将持续不断的入侵尝试称为“相当于宇宙噪声的互联网”。他将其描述为正常,持续的恶意流量,该流量正在Internet上搜索系统并自动利用脚本来尝试劫持系统。僵尸网络和其他恶意系统将永久扫描和重新扫描Internet,以查找像SETI这样的易受攻击的系统。


6

是,

这很普遍,但这并不意味着您不应该打好仗。以下是一些有关如何使服务器更安全的步骤。

避免与DNS相关的IP地址

通过在与域名关联的任何IP地址上禁用SSH访问,可以在共享或共置环境中大大减少此数目。未列出的非域IP地址将收到较少的此类流量,因此请购买未列出的IP,并且仅将此IP用于SSH访问。

使用VPN进行所有SSH访问

如果您所在的环境中可以在服务器环境中对私有网络实施IPsec / VPN,那么这是理想的选择。禁用所有SSH Internet访问,确保您具有集成的熄灯解决方案。设置您的VPN,并且仅允许从您的VPN进行SSH访问。

实施用于SSH访问的IP地址规则

如果不选择VLAN,则将路由器或防火墙规则配置为仅允许来自已知IP地址范围的SSH连接。

如果您按照这些步骤操作,您将在夜晚睡得很香,因为知道有人必须破坏您的托管公司网络才能通过SSH访问服务器。


5

看到数百个失败的SSH连接很正常。

如果您可以选择,我只需将SSH端口更改为非标准端口即可。它不一定使您的服务器更加安全,但可以确保清理日志(并让您看到有人故意闯入!)


5

除了使用诸如fail2ban之类的自动锁定机制外,您还有一个选择:实际联系攻击者的滥用地址ISP。这似乎完全是徒劳的,但对于脚本小子来说,他们的ISP更愿意对它们采取行动。

要查找滥用地址,请从arin.net开始,然后使用whois查找IP地址。您可能会被重定向到另一个区域注册表,但最终您可以找到包含该地址的IP块的负责ISP。查找滥用@地址,或仅邮寄技术联系人。

向他们发送带有相关日志文件条目的礼貌消息(确保删除所有私人信息),并要求他们对有问题的主机采取措施。


4
我们曾经这样做。但是,花费的时间与所获得的收益之差是如此之小,并不重要。
NotMe 2011年

1
此策略的一种更有效但风险更大的变体是向中间节点报告ISP。但您必须拥有可靠的报告证据。一旦这样做,我就让整个ISP陷入严重麻烦,因为他们无视他们的滥用情况报告。
staticsan 2011年

1
一次我这样做,是将滥用信息传递给了黑客,而不是负责服务器的人。从那以后,我不再烦恼,只是麻烦太多了。
2011年

在大多数情况下,这确实无济于事,可能会很耗时
RichVel 2012年

4

我建议不要使用fail2ban,而是在非标准端口上运行SSH(及其他)。我不相信安全性,但是我认为这是减少日志噪音的绝佳方法。

在非标准端口上失败的登录次数很少,并且也可能表明更有针对性的攻击。

您甚至可以更进一步,安装SSH蜜罐(例如Kippo)以“ 放进 ”暴力破解者,看看他们有什么机会。


哈哈,Kippo看起来很好。我将其安装在服务器上只是为了看看他们正在尝试做什么。
2011年

4

是的,很正常。我通过小型网站告诉客户您的情况。

随时准备被黑客入侵。

在开发服务器上拥有您网站的副本。这可以是使用XAMPP的Windows桌面,您可以免费获取。

始终对开发服务器进行更改,然后将其上传到实时网站。如果它是像Wordpress这样的CMS,请在开发服务器上发布您的帖子,然后将其复制并粘贴到实时服务器中。

切勿将任何内容从您的实时网站下载到您的开发服务器。

定期监视您的网页,查看是否有未做的更改。具体来说,是指向毒品或“增强”产品的隐藏链接。您可以找到许多浏览器插件和程序来为您完成此任务。

如果您受到损害。通知您的主机,删除所有内容,更改所有密码,然后将干净的开发服务器上传到现在空的Web服务器。与主机一起工作以防止再次发生。

对于小型站点,您不需要安全团队。那就是您的主机应该提供的。如果不这样做,那么在拥有开发服务器而不是尝试移动实时服务器的情况下,获得另一台主机就容易得多。

希望这可以帮助。


2
为“始终准备被黑客入侵” +1。
user78940 2011年

3

停止它的另一种方法(我个人不喜欢移动SSH端口):确定是否能够列出要登录的所有网络,然后仅允许它们访问SSH端口。

本地ISP的WHOIS条目帮助我将攻击减少到一个月1-2次登录尝试(当时大约是每天1k)。我仍然通过使用denyhosts来检测到这些。


3

除了您已经收到的其他出色建议之外,如果适用于给定服务器,我还喜欢使用AllowUsers指令。这仅允许指定的用户通过SSH登录,这大大降低了通过不安全配置的来宾/服务/系统帐户获得访问权限的可能性。

例:

AllowUsers admin jsmith jdoe

选项AllowUsers指定并控制哪些用户可以访问ssh服务。可以指定多个用户,以空格分隔。


3

是的,很正常。您可以 :

  • 通过使用fwknop减少攻击机会

Fwknop是更好的端口终止实现之一,因为它不是可欺骗的,并且实际上是进行身份验证的,而不是仅授权连接。

这将保护基于密码的攻击,并有可能发动有针对性的攻击者/有针对性的攻击,从而危及您的管理计算机并窃取ssh-key和password组合。

只需查看最新的pwn2own comp,即可了解熟练的攻击者轻易破坏您完整修补的管理框。


1

可悲的是,这很正常。您应该考虑在系统中添加诸如fail2ban之类的内容,以自动检测并禁止攻击者。如果您还没有这样做,还应该考虑仅将ssh与公共密钥一起使用,并且不允许通过ssh进行root登录。如果使用ftp将文件传输到系统,请考虑改用scp / sftp。


1

我实施了端口敲门,并且每天进行几次探查。他们没有连接,所以他们走了。我记录并报告对所涉及端口的所有访问。

我还使用Shorewall作为防火墙运行了fail2ban,以将持久攻击者暂时列入黑名单。

如果不需要Internet访问SSH,请禁用它。如果您有一些已知的地址需要远程访问,请限制对这些地址的访问。

限制对授权密钥的访问也可能会有所帮助。


0

我曾经pam_abl临时将暴力暴力者列入黑名单,而且效果很好。我认为在PAM中使用自己的数据库进行授权要好于依赖于hosts.denyiptables

另一个优点是pam_abl不依赖于扫描日志文件。


0

这些天完全正常。
您可以为SSH端口上的传入新连接在防火墙上设置“突发”限制,
或为a'la fail2ban安装许多日志解析器之一或更改SSH端口;)。

最后一个是最简单的。在重负载的机器上,这种闯入尝试会对整个系统造成严重的负面影响。

-
问候,
罗伯特


0

是的,这很正常。

我只是将ssh端口从标准22更改了。我的服务器,我的规则:)只需编辑/ etc / ssh / sshd_config,更改端口并重新启动服务。唯一的缺点是您必须记住将该端口添加到配置中,以使用的每个ssh客户端。


0
  • 禁用root登录(在每个linux系统中都有root用户,因此bot可以轻松猜出用户名)。以普通用户身份登录后,可以通过su或sudo切换到root。

  • 将默认端口从22更改为

  • 仅允许从已知IP的SSH访问

  • 为具有ssh访问权限的用户使用强壮的字母数字密码

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.