在没有防火墙或 SSH 密钥对的情况下保护 Ubuntu OpenSSH 服务器免受暴力攻击?

1 ssh security password

我使用 Ubuntu 16.04 并寻求以特殊方式加强我的 SSH 身份验证。

目前的情况:

我有一台带有最小Ubuntu服务器的机器,我主要用来通过其本地OpenSSH服务器传输文件。现在,由于一些原因,我在那台机器上没有防火墙,而且我也避免使用密钥对,因此我只使用了密码。我为抵御蛮力攻击而留下的唯一方法之一,也是我目前最想要的方法,是使用一种机制,在 Y 次连接尝试后阻止用户 X 小时。

想要的情况:

我希望有一个独立的机制(即,不作为防火墙的一部分)阻止用户 X 小时,在 Y 数量的连接尝试作为防御蛮力攻击的一种方式之后。

我的问题:

您是否知道可以让我实现所需情况的实用程序(和特定配置)?

pa4*_*080 7

这个答案旨在提供一种可能的方式来满足主要问题:保护 Ubuntu OpenSSH 服务器免受暴力攻击,但没有防火墙或 SSH 密钥对?

实际上,我更喜欢使用防火墙和 SSH 密钥对,并发现Doug Smythies 提供的答案非常有用。

使用两步验证保护 SSH

双因素身份验证 (2FA) 是一种多因素身份验证。在此示例中,2FA 通过使用这两个不同组件的组合来确认用户声称的身份:

  • 基于时间的六位数令牌代码 - 身份验证代码。默认情况下,这些令牌的有效期为 30 秒,外加 60 秒以补偿可能的时间偏差。

  • 用户的密码,它本身应该足够安全

其实当你已经设置好PermitRootLogin no并且用户名选择好了,对我来说,这种方法可以称为3FA。

此外,如果您登录的计算机没有针对暴力登录尝试进行强化,您可以为身份验证模块启用速率限制。

让我们开始:

1.安装依赖

sudo apt-get install libpam-google-authenticator
Run Code Online (Sandbox Code Playgroud)

2. 编辑配置文件

  • 编辑/etc/pam.d/sshd并添加此指令:

    # Google Authenticator
    auth required pam_google_authenticator.so
    
    Run Code Online (Sandbox Code Playgroud)

    将其添加到文件的开头。这样系统会先询问验证码,然后才询问密码。将它添加到文件的末尾 - 系统会询问第一个密码。

  • 编辑/etc/ssh/sshd_config和修改或添加这些指令:

    ChallengeResponseAuthentication yes
    UsePAM yes
    PasswordAuthentication no           # You can leave this 'yes' it doesn't matter.
    
    Run Code Online (Sandbox Code Playgroud)

3.为用户激活两步验证

切换到应该使用双因素身份验证的用户并在终端中输入:

$ 谷歌身份验证器 Enter

您是否希望身份验证令牌基于时间 (y/n) https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host%3Fsecret%3DE3CY3TNSNBXXXXXXyEnter



您的新密钥是:E3CY3TNSNBXXXXXX
您的验证码是 229999
您的紧急刮刮码是:
  19999711
  ...

你想让我更新你的“/home/user/.google_authenticator”文件(是/否) yEnter

您想禁止多次使用同一身份验证令牌吗?这将限制您大约每 30 秒登录一次,但它增加了您注意到甚至防止中间人攻击的机会
(是/否) yEnter

默认情况下,令牌的有效期为 30 秒,为了补偿客户端和服务器之间可能的时间偏差,我们允许在当前时间之前和之后使用额外的令牌。如果您遇到时间同步不佳的问题,您可以将窗口从其默认大小 1:30 分钟增加到大约 4 分钟。你想这样做吗
(是/否) yEnter

如果您登录的计算机没有针对暴力登录尝试进行强化,您可以为身份验证模块启用速率限制。默认情况下,这会将攻击者限制为每 30 秒不超过 3 次登录尝试。您要启用限速吗
(是/否) yEnter

此对话将生成一个名为的身份验证文件,.google_authenticator放置在用户的主目录中。如果您希望所有用户都使用相同的令牌,则此文件也可用于其他用户的帐户。此外,该文件可以自定义,也可以用于Apache2 中的 2FA,但这是另一回事。

4. 生成验证码

E3CY3TNSNBXXXXXX上面步骤中生成的密钥 --用于在某些应用程序中生成身份验证代码,如下所示:

5. 使用示例

在这个例子中使用了 Chromium/Chrome 的 Authenticator 扩展:

在此处输入图片说明

6. 延伸阅读


编辑:

在某些情况下,google 的时钟和服务器的时钟之间可能存在差异。这里有一些针对这个问题的提示:

不幸的是:如果是 VPS,您可能无权执行此操作...如果您使用的是 VPS,请联系您的提供商为您处理。

如果您的提供商不想响应您的要求,上述设置将起作用,但需要时移。键入date您的服务器的控制台,并测量该时移。然后,只需处理身份验证代码生成时刻与其使用时刻之间的时间转换。