保护SSH服务器免受暴力破解


14

我有一个小的SVN服务器,运行debian的旧戴尔optiplex。我对服务器没有很高的要求,因为它只是一台小的SVN服务器...但确实希望它是安全的。

我只是将服务器更新为更新更好的optiplex,然后开始对旧服务器进行研究。遇到问题后,我记下了它。当我检查日志时,它充满了蛮力尝试,并且有人成功进入了我的计算机。这个人用两个目录“ root”和“ swap1”或其他东西创建了一个名为“ knarkgosse”的额外卷。真的不知道为什么以及他们做什么,但是一定要防止这种情况再次发生。我发现这有点奇怪,因为我每隔几个月左右就更改一次密码,并且密码始终是由随机字母和数字组成的……不容易被暴力破解。

我知道我可以阻止root登录,并使用sudoers ...并更改SSH端口,但是我还能做什么?

所以我有几个问题:

  1. X次不正确的尝试后如何防止登录5分钟。还是每次尝试不正确后都慢速尝试?

  2. 服务器可以连接某种中央黑名单吗?跟踪IP地址“不安全”且永远不应被授予访问权限的黑名单?

  3. 我还可以做些什么来确保服务器安全?

就像我之前说的,我正在用Apache(www-data用户问题?),svn,mysql,php,phpmyadmin,hudson运行Debian 5。它位于家庭网络上,端口转发位于80、443、8080、8180、23和22。


Answers:


17

Fail2banPort Knocking应该可以满足您的大多数需求。

还建议更改SSH端口并仅允许基于密钥的身份验证。

可以争辩说,添加其他安全措施可能会达到收益递减的地步,但是同样,要由您决定何时“足够安全”。

禁止root登录也是一个好主意。


2
我使用denyhosts,但与fail2ban afaik几乎相同。
pfyon 2010年

Fail2Ban听起来很耳熟...我来看看。
Paul Peelen

1
+1 Fail2Ban,5次失败尝试= 5分钟IP阻止。除非您拥有一个非常简单的密码,否则永远不会以每分钟1个密码的方式强行使用它。
克里斯·S

@Chris S Yea,那是我的最爱之一。脚本小子通常不知道如何处理超时...
gWaldo 2010年

1
@gWaldo,确认偏见在重写您所读的内容以说出您已经认为正确的内容方面大有帮助。
克里斯·S

7

不能替代安全密码和密钥验证。 话虽这么说,Fail2Ban是禁止尝试进行多次身份验证的用户IP的绝佳工具。它也可以作为大多数发行版的预编译包使用。请注意,您可能会意外被禁止,因此请确保您也拥有恢复白名单中的IP或可轻松访问控制台...

Fail2Ban有几个很好的例子,说明如何配置您所要求的所有内容……但是,它没有通用的错误地址存储库。我不认为由于容易获得另一个IP(dhcp更新/僵尸网络攻击/等),所以在任何地方都没有这样的存储库。我还将使用常见的“管理员”类型的用户名(root / admin / administrator / sysop / etc ..)禁用通过ssh登录,因为这些是最常用的方法。


好答案。我完全同意您的粗体字...因此,该字母与数字密码组合在一起。密钥认证对于这个服务器来说太多了……但这是一个好主意。我现在已经安装了Fail2ban,似乎不需要重新配置它,并且因为这个小型svn服务器在家里,所以我可以轻松访问它(考虑到它位于步入式衣橱= S的后面)Thnx征求您的意见!
Paul Peelen

1
Spamhaus发布了已知的垃圾邮件发送者网络列表。它不涵盖僵尸网络,只是众所周知的“专业”垃圾邮件发送者:spamhaus.org/drop
Chris S 2010年


4

这里提供了很多好的建议。我谨建议三件事应使其相对安全:

  1. 在随机的高端口上运行sshd。僵尸程序通常仅跟随端口22,然后跟随端口22(如2222)变化。
  2. 在sshd配置中禁用基于密码的身份验证:

UsePAM否

  1. 仅通过预共享的SSH密钥对在此站点上进行身份验证。ssh-keygen上的人开始使用基于PKI的身份验证。

希望这可以帮助。


2
对于压力非常小的解决方案,我绝对第二次在非标准端口上运行ssh。从我所看到的情况来看,这将使与ssh服务器的暴力连接尝试减少一个数量级。在一周的时间里,我的一台服务器(在标准端口上运行ssh)获得134次无效连接尝试。同一时期,在同一服务器(非标准端口上运行SSH)虚拟实例有0
DF

1

我一直是CSF / LFD的忠实拥护者,它可以阻止尝试暴力破解,portcan和其他选项的用户的IP地址。从本质上讲,它是用于IP表的巨大的perl包装器,但是配置文件不难阅读,文档也不错。


您是否知道每当在服务器上执行端口扫描时,是否可以通过某种方式(例如通过电子邮件)向人发出警报?
Paul Peelen

1

您也可以研究sshguard。我没有用过,但是我听过好东西。

资料来源:http :
//isc.sans.edu/diary.html?storyid=9370

http://www.sshguard.net/

http://www.sshguard.net/docs/faqs/

“ Sshguard会从日志记录活动中监视服务器。当日志传达某人正在做某件事时,sshguard会通过阻止他/她/它一点来做出反应。Sshguard具有敏感的个性:当顽皮的泰克坚持打扰您的主机时,它会做出反应越来越坚定。”


听起来很整洁,我会研究一下。thnx
Paul Peelen

1

我有一个通过默认端口连接到Internet的SSH服务器,但从未遇到过问题。

  • tcp_wrappers(例如,hosts.allow hosts.deny)用于SSH。我不认为那里没有支持SSH的SSH。
  • iptables与tcp_wrappers结合使用,消除了大约99%的随机端口扫描/ bruteforce尝试。.唯一的问题是您需要知道从何处进行连接才能允许这些IP / IP范围...我只是做了查找我周围地区的受欢迎提供商的信息,以查看其IP范围并允许其使用..大多数扫描似乎都来自遥远的国家:)
  • PermitRootLogin不带密码(即,仅使用密码加密的RSA / DSA密钥对)对于自动任务非常有效。.当我登录进行交互时,我显然使用了配置了sudo访问权限的我的帐户(常规)
  • 苏度
  • 持续更新。.我经常使用所有安全/关键更新来更新此框
  • 密码/密码更改
  • 一次又一次运行chkrootkit,看看我是否有任何问题..(有多个执行该功能的地方)

希望能帮助到你!


1

有一种更好的方法,使用fail2ban意味着您必须添加一个应用程序,并且它在应用程序层运行。

如果使用iptables,则效率更高,因为它在网络层运行,并且您不必安装其他应用程序。

使用iptables最新模块http://www.snowman.net/projects/ipt_recent/

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT

0

一个选项(除了其他安全措施外,还可以使用sshd在22以外的端口上侦听)。我自己没有尝试过,但听说它可以减少机器人纯暴力攻击的次数。

我必须强调,这不是真正的安全性,只是减少了自动暴力攻击的次数。检查我猜测的每个端口的工作量过多。


我也这样做了,将其固定在端口23上。主要是因为我在端口22上有另一个服务器(现在我将其关闭)。
Paul Peelen

2
但是23是保留端口telnet。使用非保留端口(例如> 60k)通常是一个更好的主意。iana.org/assignments/port-numbers提供了保留端口号的列表。
ℝaphink

谢谢你的提示。我尚未在这台机器上使用原则,但会更改端口。我在专业服务器上使用的端口范围是52000-59000,因此我想在此端口上使用相同的端口。
Paul Peelen

1
@Paul:I don't use te[l]net on this machine-保持这种状态。尽管出于各种原因希望使用telnet 客户端,但是当ssh可用时,没有理由运行telnet服务器。网络上的纯文本密码是错误的
mlp

0

这里没有提到,实际上应该限制通过防火墙的访问。这并不适合所有情况,但是如果您要从具有静态IP的一致位置连接到主机,则可以完全阻止SSH(除了该IP)。这将确保入侵者无法进入。如上所述,这并不总是适合所有情况,尤其是在您的IP是动态且经常更改的情况下。


总的来说,我同意您的解决方案。我相信这是我工作的公司的标准...但是我认为这对我来说不算什么。问题是我主要在家里(本地网络),工作(静态IP)或在旅途中(使用3G调制解调器/ iPhone)使用Macbook Pro。对于最后一个问题,如果我没有VPN,我想这是一个过大的问题。谢谢您的回答。
保罗·皮伦

0

DenyHosts,http: //denyhosts.sourceforge.net/,是我很幸运的一个好项目。如果将denyhosts设置为同步,它将下载新IP,以添加到必须使用denyhosts暴力破解其他系统的禁止列表中。它也会使一段时间内未尝试强行使用的IP失效。

但是,使用公共密钥身份验证并禁用密码日志记录可能是您最好的选择。击败任何蛮力攻击。


0

对我有效的是:

  1. 就像其他人说的那样,没有root登录,在sshd_config中将PasswordAuthentication设置为no(仅使用w / keys登录)

  2. 只有一个或两个用户允许通过ssh登录,并且他们的准模糊名称不在常见的暴力工具用户名列表中(例如,不是“ admin”或“ apache”或“ web”或“约翰尼”)

  3. 限制性防火墙规则(基本上,所有内容都被阻止,但我的服务端口和ssh)。我什至限制ping,以防止进行更粗略的扫描(这让我的伴侣非常恼火)。

  4. 在我的Web主机上,我确实限制了对特定IP地址的访问-但这似乎不是您的选择。当然,我自己无法在所有主机上做到这一点。您可能还想研究“端口敲门”。

  5. 我最喜欢的是:OSSEC的主动响应模块,可以阻止多种暴力情况并针对其他错误发出警报。它会在y时间内检测到x次无效登录,然后(通过iptables firewall-drop命令)阻止特定时间段。我现在要封锁约12个小时才能玩得开心。:)

我在这里要做的一件事是确保我不会阻塞太多错误的事情,是在/etc/ossec.conf中,我将活动响应设置为较高级别(默认配置中不存在),然后通过sshd_rules.xml并将我要阻止的规则设置为该级别,并根据需要修改阻止与警报的阈值。

如果您正在运行Apache,则也可以阻止违反apache-rules的内容。我不仅仅因为NAT问题就阻止这些,我想考虑阻止整个大学之类的东西。:)另外,您可以编写自定义规则以在日志文件中的某些条件下进行阻止,这确实很有帮助。

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.