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

评论

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

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

我可以看到我将问题发布到错误的网站:superuser.com/questions/200896/…

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

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

#1 楼

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

攻击目标无法通过Google或DNS条目找到,但攻击者只是尝试尝试访问IP地址中的每个IP地址。某个子网(例如,已知的根服务器托管公司的子网)。因此,您的URL(因此没有DNS条目)非常模糊也没关系。

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


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

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

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

评论


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

– emtunc
2011年3月8日13:06

并将ssh的端口从22移到222。效果很好。

–汤姆·奥康纳(Tom O'Connor)
2011年8月8日13:47

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

– 0xC0000022L
2011年8月8日14:09

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

–mattdm
11年8月8日在18:01

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

–布伦丹·朗(Brendan Long)
2011年3月9日19:44

#2 楼

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

一旦我改变了ssh端口并实现了Port Knocking,数字就降为0 :-)

评论


尼斯地图。我很想知道如何做到这一点!

– jftuga
11年8月8日在15:27

@jftuga我首先从日志中获取了所有IP。 grep“密码失败” / var / log / secure * | grep sshd | grep -o'[0-9] \ {1,3 \} \。[0-9] \ {1,3 \} \。[0-9] \ {1,3 \} \ .. [0-9 ] \ {1,3 \}'| |排序uniq(如果要允许重复,请在最后删除| uniq)。然后,您可以将它们放入CSV并将其上传到zeemaps.com。我见过比我更好的地图,他们将使用计数为地图着色(每个县的尝试次数从绿色变为红色),但我还没有想出那个

–巴特·德·沃斯(Bart De Vos)
2011年3月8日15:50

“实施端口敲门”是什么意思?有没有可以通过apt-get安装的应用程序来执行此操作?数字降为0听起来不错

–user274
2011年3月8日21:46

默默无闻的安全性会带来糟糕的结果。只要它是整体策略而不是整个策略的一部分,那就太好了。毕竟,除了晦涩的字符串以外,还有什么密码?

–乔尔·科尔(Joel Coel)
2011-3-9在17:05



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

–tobyodavies
2011年3月10日下午6:06

#3 楼

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

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

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模块列出了每次尝试连接端口22的尝试,均使用IP和其他名称为“ tarpit”的名称(如果您使用很好奇,请看/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


评论


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

– Benlumley
2011年3月9日在11:46



@benlumley:好点。端口敲除对于更改默认端口也可能有用,甚至可以同时使用两者。

– 0xC0000022L
2011-3-9在12:52

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

– 0xC0000022L
2011年3月9日17:36

#4 楼

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

评论


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

– Piskvor离开了建筑物
2011年3月11日12:39

#5 楼

是。如今这很正常。

请尽可能仅将公钥身份验证用于管理目的。在工作站上生成私钥:

$ 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对它们运行公钥和配置。

查看Denyhosts和fail2ban阻止重复的SSH登录尝试,并在需要时查看Snort完整的IDS / IPS。

评论


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

–注册用户
2011年3月12日在21:34

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

–菲尔·科恩(Phil Cohen)
2011-3-15在22:57

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

–马丁·海默斯(Martijn Heemels)
11年5月24日在20:47

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

– yrk
2012-4-10 9:02

#6 楼

使用http://denyhosts.sourceforge.net/

,是的,您应该使用公共密钥身份验证并禁用密码身份验证。

评论


禁用密码身份验证并非总是可行的解决方案。

–公共证书
2011年3月11日19:39

#7 楼

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

#8 楼

我只能说只有500个数字是低的。

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

#9 楼

是的,
这很普遍,但这并不意味着您不应该打好仗。以下是一些有关如何使服务器更安全的步骤。
避免与DNS相关的IP地址
通过在与域名相关的任何IP地址上禁用SSH访问,可以在共享或共置环境中大大减少此数目。 。未列出的非域IP地址将收到较少的此类流量,因此,购买未列出的IP并将该IP仅用于SSH访问。
将VPN用于所有SSH访问
如果在环境中在其中您可以在服务器环境中将IPsec / VPN实施到专用网络,这是理想的选择。禁用所有SSH Internet访问,确保您具有集成的熄灯解决方案。设置您的VPN,并仅允许从您的VPN进行SSH访问。
对SSH访问实施IP地址规则
如果不选择VLAN,请配置您的路由器,或者防火墙规则仅允许来自某个VPN的SSH连接已知的IP地址范围。
如果您按照以下步骤操作,您将在晚上睡得很轻松,因为知道有人必须破坏您的托管公司网络才能通过SSH访问服务器。

#10 楼

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

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

#11 楼

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

要查找滥用地址,请从arin.net开始并查找IP地址使用Whois。您可能会被重定向到另一个区域注册表,但是最终您可以找到包含该地址的IP块的负责ISP。查找滥用行为@地址,或直接给技术联系人发送邮件。

向他们发送礼貌的消息,其中包含相关的日志文件条目(确保删除所有私人信息),并要求他们对违规行为采取行动主持人。

评论


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

–NotMe
2011年3月8日18:50

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

–staticsan
2011年3月10日,0:10

有一次,滥用消息传递给黑客,而不是负责服务器的人。从那以后,我不再烦恼,只是麻烦太多了。

– wump
2011年11月11日15:23

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

– RichVel
2012年6月21日上午10:16

#12 楼

我建议不要使用fail2ban,而是在非标准端口上运行SSH(及其他)。我不相信安全性,但是我认为这是减少日志噪音的绝佳方法。表示有针对性的攻击。<​​br />
您甚至可以更进一步地安装SSH蜜罐(例如Kippo)来“放进”暴力破解者,看看他们有什么机会。

评论


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

– wump
2011年11月11日15:29

#13 楼

是的,很正常。在小型网站上,我告诉客户的情况。

随时准备被黑客入侵。

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

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

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

定期监视您的网页,查看是否有未做的更改。具体来说,是指向毒品或“增强”产品的隐藏链接。您会发现许多浏览器加载项和程序将为您完成此操作。

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

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

希望这会有所帮助。

评论


为“始终准备被黑客入侵” +1。

–user78940
2011年5月24日23:05

#14 楼

停止它的另一种方法(因为我个人不喜欢移动SSH端口):确定是否能够列出要登录的所有网络,然后仅允许这些网络访问您的SSH端口。 br />
本地ISP的WHOIS条目帮助我将攻击减少到每月1-2次登录尝试(当时大约是每天1k)。我仍然通过使用denyhosts来检测到这些。

#15 楼

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

示例:

AllowUsers admin jsmith jdoe



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


#16 楼

是的,很正常。您可以:


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

Fwknop是更好的端口终止实现之一,因为它不是可欺骗的,实际上可以通过反对只授权连接。


您可以更改Openssh使用的端口,但并不能真正提高安全性。
使用Google-authenticator或wikid加强ssh身份验证

此将保护基于密码的攻击以及确定的攻击者/目标攻击的可能性,从而损害您的管理计算机并窃取ssh-key和密码组合。让熟练的攻击者破坏您完全打补丁的管理框。

#17 楼

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

#18 楼

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

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

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

限制访问授权密钥也很有帮助。

#19 楼

我使用pam_abl暂时将蛮力黑名单列入黑名单,并且效果很好。我认为使用PAM使用自己的数据库来获得授权比使用hosts.denyiptables更好。

#20 楼

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

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

-
问候,
Robert

#21 楼

是的,这很正常。

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

#22 楼


禁用root登录(在每个linux系统中都有root用户,因此bot可以
轻松猜测用户名)。以普通用户身份登录后,您可以
通过su或sudo切换到root用户。
从22更改默认端口
仅允许从已知ip进行ssh访问
为具有ssh访问权限的用户使用强壮的字母数字密码