只允许从内网对SSH服务器进行密码认证

mgo*_*ven 24 security linux ssh ssh-keys

我有一个在 Ubuntu Precise 12.04 上运行的 OpenSSH 5.9p1 服务器,它接受来自内部网络和 Internet 的连接。我想要求对来自 Internet 的连接进行公钥身份验证,但对来自内部网络的连接接受公钥或密码身份验证。我可以配置 OpenSSH 来实现这一点吗?

mgo*_*ven 40

Match指令中/etc/ssh/sshd_config,您可以有选择地应用配置指令。可用的匹配标准之一是连接的源地址,因此可以使用它来实现您想要的。您可以默认禁用密码身份验证,然后为来自内部网络 IP 范围的连接启用它。(请注意,您还想禁用ChallengeResponseAuthentication以防止使用密码。)此示例允许来自所有 RFC1918 私有 IP 范围的密码身份验证。有关更多详细信息,请参阅sshd_config 联机帮助页

PasswordAuthentication no
ChallengeResponseAuthentication no

Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud)

请注意,应将 Match 块添加到文件的末尾,否则它后面的所有内容都将匹配到下一个 Match 块。匹配块定位不当可能会导致无法连接。

  • 请注意:如果您执行此操作并将 SSH 从某些可公开访问的机器(jumphost)转发到具有上述配置的机器(内部主机),您仍然可以让自己受到攻击,因为 jumphost 的源 IP 将是一个 RFC1918 地址和允许对您的内部主机进行密码验证。 (3认同)
  • 原始答案 9.5 年后它解决了我的问题......而且您不必再将匹配项放在文件末尾。https://unix.stackexchange.com/questions/67334/openssh-how-to-end-a-match-block“要使用 openssh 6.5p1 或更高版本结束匹配块,请使用以下行:全部匹配” (3认同)