限制ssh到一个特定的主机名

所以这是问题:

  • 我有一个单一的服务器与多个主机名,这意味着我有一个loggingexample.com*.example.com指向服务器的IP地址
  • 我想限制传入的SSH连接到一个特定的主机名,即我只想login到[email protected],并且不允许使用user @ ip-address或[email protected]尝试

对于ListenAddress来自sshd_config的手册页具有以下内容:

 Specifies the local addresses sshd(8) should listen on. The following forms may be used: ListenAddress host|IPv4_addr|IPv6_addr ListenAddress host|IPv4_addr:port ListenAddress [host|IPv6_addr]:port 

这似乎表明,sshd有能力限制自己到一个特定的主机名。 不过,我已经尝试了ListenAddress secret.example.com:22 ,但重新启动sshd似乎没有添加任何使用主机名的限制。

man sshd_config似乎没有显示任何其他选项。

有什么我失踪,或者sshd根本没有这种能力?

没有像“DNS”连接那样的东西。 一旦客户端获得IP,它只能build立一个TCP / IP连接。 服务器只能看到IP,所以不知道客户端用来查找服务器的名称。

我们有网站虚拟主机的原因是因为客户端发送一个标题要求一个特定的主机。 事实上,在SSL(TLS)被修改为在初始连接期间允许“服务器名称指示”之前,虚拟主机不能使用SSL。

对于“虚拟主机”来使用SSH,它需要一种方式让客户端连接时传输主机名。 但是,即使SSH支持这样的function,您也需要一个特定的主机名来增加安全性。 原因是sshd必须解密atacker的数据包来运行filter。 只要您禁用SSH密码,解密攻击者的数据包与您的SSH密钥进行比较几乎没有什么区别。

如果您不想扫描,请移动SSH端口和/或安装fail2ban。 如果你真的偏执狂,你可以安装一个端口敲击器,从临时扫描器中“隐藏”你的开放端口和/或使用iptables将IP地址列入白名单。

有什么我失踪,或者sshd根本没有这种能力?

从根本上说,DNS不具备这种能力。 客户端将DNS名称parsing为IP,然后尝试连接到该名称,因此连接时会丢失该信息(除非SSH以服务器可以使用它的方式传输它,而我认为它不会)。

从另外一个SF问题中挣扎 ,怎么回事呢?

您可以在/ etc / ssh / sshd_config中使用AllowUsers指令,例如AllowUsers [email protected]

如果您在sshd_config文件中进行了任何更改,请不要忘记重新启动sshd。

从sshd_config手册页

这个关键字后面可以跟一列用空格分隔的用户名模式。 如果指定,则仅允许login符合与其中一种模式相匹配的用户名。 '*'和'?' 可以在模式中用作通配符。 只有用户名是有效的; 数字用户ID不被识别。 默认情况下,所有用户都可以login。 如果模式采用USER @ HOSTforms,则分别检查USER和HOST,限制来自特定主机的特定用户的login。

 -- original answer ends -- 

从我所看到的,你可以定义一个通配符,所以只有用正确的通配符匹配主机名元素呈现的用户才会被SSHd监听,比如*@sub.domain.tld 。 繁荣! 基于IP的用户login被拒绝。

在AllowUsers / AllowGroups声明之前,不要放置类似DenyUsers *东西。 拒绝列表将在允许列表之前进行评估,并将覆盖任何显式允许。 我还没有尝试过,但从我过去读过的内容来看,一旦明确定义了“允许”列表,您可能甚至不需要定义DenyUsers *

只是不要忘记总是允许自己。 😉

你可以做的是在机器上有多个IP地址。 然后,你的每个Alogging指向一个不同的IP地址,最终所有的IP地址都在同一个地方。 然后,您将可以使用ListenAddress进行限制。 不知道你从中得到什么,因为最终它是同一台机器。