SSH 允许特定网络的用户

SSH 允许特定网络的用户

如何只允许特定用户从特定网络接口登录到 SSH 服务器?

例如

  • eth0 是“外部”,eth1 是“内部”。
  • user1 被信任可以从任何地方登录
  • user2 只允许从“内部”登录

无法使用,AllowUsers user1@eth0因为 AllowUsers 采用的是主机名而不是接口名。

该网站上的其他答案暗示了类似以下内容:

Match address 1.2.3.4/16 # eth0's network
   AllowUsers user1
Match address 2.3.4.5/16 # eth1's network
   AllowUsers user1,user2
Match address 0.0.0.0/0  # Match's equivalent of a closing brace?

但是,如果 eth0 使用 DHCP 服务器来获取其地址,那么它事先并不知道 1.2.3.4 是否是应放入 sshd_config 中的正确地址。

(如果这有区别的话,在 Ubuntu 12.04 上使用 OpenSSH)

答案1

我不知道如何在一个Match块中做到这一点,并且你上面的评论表明这是不可能的(正如你在man页面上提到的那样)。

但是如果你确定要通过界面进行用户限制 - 你的问题是这么说的 - 你可以运行两个sshd,每个都有不同的sshd_config指示它只在一个界面上监听,由ListenAddress指令控制。

sshd内部接口上的监听在其配置中可以有,AllowUsers user1 user2而外部接口上的监听可以有AllowUsers user1。我可能会通过组成员身份来做到这一点,并使用AllowGroups internal/ AllowGroups internal external,但这只是我的想法。

编辑: 在我看来,正确的做法是运行/usr/sbin/sshd -f /etc/ssh/sshd_config_inside/usr/sbin/sshd -f /etc/ssh/sshd_config_outside安排它在启动时的工作方式,并确保你的服务启动/关闭文件做正确的事情,确实很重要,但这也是系统管理员需要做和要做的一件非常正常的事情。这是确实要做到这一点,不需要两个二进制文件,甚至不需要两个不同名称的同一个二进制文件。

答案2

我知道这是一个老问题,但我正在寻找一个无需启动 2 个 sshd 实例的解决方案。

参考您的具体问题以及 1.2.3.4/16 子网和 2.3.4.5/16 子网,您可以使用以下内容:

AllowUsers [email protected].* [email protected].* [email protected].*

参考:http://www.unixlore.net/articles/five-minutes-to-even-more-secure-ssh.html

对于我的网络,我使用以下命令允许用户 chris 从任何地方进行 ssh,但仅允许用户 1、用户 2 和用户 3 在我的内部网络 (192.168.0.0/24) 上进行 ssh:

AllowUsers chris [email protected].* [email protected].* [email protected].*

版本:Ubuntu 14.04.3 LTS 上的 SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3

答案3

Match address 1.2.3.4/16无效,必须是Match address 1.2.0.0/16。接口的网络地址不会改变,对吗?所以你得到什么 IP 都没关系。

另一个选择可能是(我没有这方面的个人经验)创建两个具有静态地址的虚拟接口,有两个 sshd 实例,每个实例仅绑定到其中一个地址,并从 DHCP 接口到虚拟接口进行 DNAT。

答案4

也许您可以编写一个小脚本来获取当前的 eth0 地址(从 ifconfig?)并在您的 sshd_config 中设置(使用 sed);如果我没记错的话,也可以编写钩子脚本在每次以太网接口关闭/启动时执行(这可以解决手动更新或通过 crontab 更新 sshd_config 文件的必要性)。

相关内容