如何停止/预防SSH bruteforce [关闭]


22

我对网络管理非常陌生,因此请注意,我还没有那么丰富的经验。

我有一个带有plesk面板的Ubuntu根服务器。

昨天我和我的朋友们注意到我们TS3上的语音质量非常差。我向服务器发送了一些ping操作,并且丢包率很高。之后,我用谷歌搜索了一下,发现有一个auth.log。我下载并滚动了一下,然后发现了这一点:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

似乎有人试图多次通过SSH登录。我滚动了一下,发现有人试图使用许多不同的用户名:student, tech, psi, news,...

文件中显示了数百个这些登录名。

我在数据中心的网站上查看了流量统计信息。每小时只有17MB。我有一个100Mbit的骨干网,因此数据传输本身似乎不是问题。

目前,我无法以任何方式访问服务器。

我的问题是:如何再次获得权限,如何抑制这种攻击并防止随后的攻击?


还在这个部门学习我的东西。。。。。。。。。。
mjrider 2014年


Answers:


37

如何获得访问权限?

目前尚不清楚为什么无法访问您的帐户。

如果您的计算机受到攻击或承受高负载,则应与提供商讨论限制访问(IP限制)或使服务器脱机(与Internet断开连接)。

您可能还需要带外访问,您的提供商可能会提供帮助。

如果有人破坏了您的服务器,则可能需要从备份中还原或使用恢复映像。

如何防止对服务器(尤其是SSH)的攻击

防止暴力登录的最佳方法?

首先不要让他们进入您的机器!有很多方法可以阻止蛮力尝试在到达您的主机之前甚至在SSH级别上进行。

话虽如此,用fail2ban之类的东西保护您的操作系统是一个好主意。http://en.wikipedia.org/wiki/Fail2ban

Fail2ban与DenyHosts类似...但是不同于专注于SSH的DenyHosts,fail2ban可以配置为监视将登录尝试写入日志文件的任何服务,而不是使用/etc/hosts.deny仅阻止IP地址/主机,fail2ban可以使用Netfilter / iptables和TCP包装器/etc/hosts.deny。

您应考虑使用许多重要的安全技术来防止暴力登录:

SSH:

  • 不允许root登录
  • 不允许ssh密码(使用私钥身份验证)
  • 不要在每个界面上聆听
  • 为SSH创建一个网络接口(例如eth1),该网络接口与您提供请求的接口(例如eth0)不同
  • 不要使用常用的用户名
  • 使用允许列表,仅允许需要SSH访问的用户
  • 如果您需要Internet访问...请限制访问有限的IP。一个静态IP是理想的,但是将其锁定为xx0.0 / 16优于0.0.0.0/0
  • 如果可能,找到一种无需Internet访问的连接方式,则可以拒绝SSH的所有Internet流量(例如,使用AWS,您可以获得绕过Internet的直接连接,这称为Direct Connect)。
  • 使用诸如fail2ban之类的软件来捕获任何暴力攻击
  • 确保操作系统始终是最新的,尤其是安全性和ssh软件包

应用:

  • 确保您的应用程序始终是最新的,特别是安全软件包
  • 锁定您的应用程序“管理员”页面。上面的许多建议也适用于您应用程序的管理区域。
  • 密码保护您的管理区域,用于Web控制台的htpasswd之类的东西会投射出任何潜在的应用程序漏洞,并造成额外的进入障碍
  • 锁定文件权限。“上传文件夹”是各种令人讨厌的东西的入口点。
  • 考虑将您的应用程序放置在专用网络之后,并且仅公开您的前端负载平衡器和一个跳转框(这是使用VPC的AWS中的典型设置)

1
我已经通过help.ubuntu.com/community/Fail2ban安装了Fail2ban,它似乎非常强大且用户友好(邮件通知等)

我从数据中心收到一条消息:发生了洪灾(这是什么?),这使许多服务器的连接非常差。尤其不是对我的服务器的攻击。


1
有趣。因此,看来我的数据中心是攻击的目标。但是知道除此之外我也被强暴了,这也很好。Fail2ban确实是一个很好的工具。我将在接下来的几天阅读有关Iptables和SSH Config的文章,并尝试使其更加安全。

3
将openssh配置为侦听22以外的端口,并配置iptables丢弃进入端口22的任何内容。 php并将其与iptables一起使用。
ThoriumBR

4

我如何抑制这种攻击并防止随后的攻击

通常,我将默认的ssh端口从22更改为另一个端口,例如1122。这样可以防止来自bot的许多自动攻击,但是简单的端口扫描即可检测到它。无论如何:

vi /etc/ssh/sshd_config

并将端口22编辑为端口1122,但这还不够。

关于蛮力的自动IPTables规则

我使用的是log2iptables https://github.com/theMiddleBlue/log2iptables而不是Fail2ban,因为这是一个简单的Bash脚本,可以使用正则表达式解析任何日志文件并执行iptables。例如,当出现5个匹配项时,log2iptables会删除特定的IP地址。这很酷,因为使用Telegram API,并且当他发现问题时可以通过手机向我发送消息:)

希望这会有所帮助!


8
我从项目URL和SF句柄之间的相关性猜测,您正在参与此项目。请参阅我们有关引用您自己的产品的指南,尤其要注意“ 必须在答案中披露您的隶属关系 ”的要求。
MadHatter

1

我将它们放在一起,作为cronjob等每15分钟运行一次:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

0

这是我针对SSH攻击的替代解决方案。想法是如果不使用,请继续关闭SSH守护程序。没有开放的端口没有攻击。你可以试试。它是开源的 https://github.com/indy99/nnet_port_guard


1
欢迎来到服务器故障!您的答案表明可以通过其他网站找到该问题的可行解决方案。由于其他网站可能会移动,删除或更改,因此Stack Exchange系列问答网站通常对此回答不满意。请阅读我如何写一个好的答案?并考虑修改答案以包括解决问题所需的步骤。并且不要忘记进行现场参观
Paul

0

Centos / RHEL阻止不良行为者的自动化解决方案

这是Centos的脚本,用于检查ssh失败的登录是否包含无效的用户帐户,并检查错误的密码是否包含有效帐户。如果源IP攻击我们超过3次并且不在拒绝列表中,则会将其添加到拒绝列表中。我每15分钟从root的crontab运行一次。我也不允许通过ssh进行root登录,因此这种组合可使事情保持安静。

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done

1
看起来fail2ban做同样的事情,并经过了考验。
Patrick Mevzek '18年
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.