仅允许特定用户通过ssh在一个端口登录,而其他用户则通过另一端口登录


13

我有以下用例:

  • 需要允许用户从安全,可信任的网络登录
  • 然后允许几个(只有两个)移动用户在Linux Centos计算机上远程登录。

我可以使sshd在不同的端口上运行,例如:

  • 从内部可以在22上运行是可以的,因为我不想让它们在其他端口上连接(使脚本混乱)。
  • 对于外部移动用户,我将在另一个端口(例如端口X)上运行sshd(提高了安全性-这是一种小型办公室设置)。

为了提高安全性,我希望将sshd配置为仅允许访问端口X上的特定用户(然后配置一些警报,以便我们可以知道用户何时通过端口X登录)。

但是,我无法在sshd文档中找到这样的任何配置。如果没有这样的解决方案,那么只要有人在端口X上完成sshd登录,是否至少有可能触发shell脚本运行?我正在查看iptables文档,以查看当sshd登录存在时是否可以触发警报,但无法解决任何问题。

赞赏输入

Answers:


12

SSH在备用端口上运行不再视为安全。它只会增加一点点模糊性,并为您的用户增加复杂性。对于希望破坏您的网络的人们,他们正在使用自动端口扫描程序,而不在乎它在哪个端口上运行,它为您增加了零障碍。

如果要增强允许远程基于Internet的入站SSH的系统上的安全性,请sshd_config按指示的@Anthon 控制用户,然后直接在PAM中实现安全性。

创建两个组,lusers然后创建rusers。将远程移动用户添加到rusers组中。使用pam_succeed_if.so PAM模块允许访问这些用户。将行添加到ssh的pam配置中:

account     sufficient  pam_succeed_if.so user ingroup lusers
account     sufficient  pam_succeed_if.so user ingroup rusers

某些pam_succeed_if.so模块可能要求您使用稍有不同的语法,例如group = lusers。

然后,不仅sshd限制了可以连接的用户,而且即使在中出现错误sshd,您仍然可以享受基于PAM的限制所提供的保护。

远程用户的另一步骤是强制将ssh_keys与口令一起使用。因此,本地用户可以使用密钥或密码登录,但是远程用户必须具有密钥,并且如果为他们创建密钥,则可以确保该密钥具有密码短语关联。因此,限制了对实际拥有SSH密钥和密码短语的位置的访问。如果用户密码不正确,则限制潜在的攻击媒介。

在sshd_config:

更改2个设置:

ChallengeResponseAuthentication yes

和

PasswordAuthentication yes

至:

ChallengeResponseAuthentication no

和

PasswordAuthentication no

因此,默认值为现在仅允许密钥身份验证。然后,对于本地用户,您可以使用matchconfig设置来更改本地用户的默认设置。假设您的本地专用网络是192.168.1.0/24,请添加到sshd_config:

Match Address 192.168.1.0/24
PasswordAuthentication yes

现在,本地用户可以使用密码或密钥进行连接,而远程用户将被迫使用密钥。由您来创建带有密码短语的密钥。

另外一个好处是,您只需要管理一个sshd_config,并且只需要在单个端口上运行ssh,就可以简化自己的管理。


编辑2017-01-21-限制authorized_keys文件的使用。

如果要确保用户不能仅自己生成一个ssh密钥,并将其与authorized_keys文件一起使用进行登录,则可以通过设置sshd的特定位置来控制它来查找授权密钥,从而进行控制。

在中/etc/ssh/sshd_config,更改:

AuthorizedKeysFile  %h/ssh/authorized_keys

像这样:

AuthorizedKeysFile  /etc/.ssh/authorized_keys/%u

指向用户没有写权限的受控目录意味着他们无法生成自己的密钥,也无法使用它来解决已制定的规则。


2
我看不出您的答案如何将远程用户与本地用户区分开。如果该lusers组中的某个人而不是该rusers组中的某人生成密钥对并更新其~/.ssh/authorized_keys,则他们将能够从远程登录。
— 理查德·汉森

8

您可以将以下内容添加到您的/etc/ssh/sshd_config:

AllowUsers mobileuser1 mobileuser2 *@10.0.0.0/8

上面假设允许的远程用户名为mobileuser1和mobileuser2,并且您的可信网络为10.0.0.0,子网掩码为255.0.0.0。

这使两个移动用户可以从任何地方登录,每个人都可以从受信任的网络登录。与这些模式都不匹配的任何用户(例如foo从远程登录的用户)将被拒绝访问。


那是我在答案中遗漏的那一部分。我认为,如果将您的答案与我的答案相结合,这将是一个非常强大的解决方案。
— 蒂姆·肯尼迪

2

您可以通过启动两个ssh守护程序和两个sshd_config文件来执行此操作。复制从现有的一个(例如/etc/ssh/sshd_config /etc/ssh/sshd_alt_config且在可替代的配置设置(从man用于页面sshd_config:

港口

Specifies the port number that sshd(8) listens on.  The default
is 22.  Multiple options of this type are permitted.  See also
ListenAddress

允许用户

This keyword can be followed by a list of user name patterns,
separated by spaces.  If specified, login is allowed only for
user names that match one of the patterns.  Only user names are
valid; a numerical user ID is not recognized.  By default, login
is allowed for all users.  If the pattern takes the form
USER@HOST then USER and HOST are separately checked, restricting
logins to particular users from particular hosts.  The
allow/deny directives are processed in the following order:
DenyUsers, AllowUsers, DenyGroups, and finally AllowGroups.

您可能希望将替代的ssh日志保存到其他文件,例如,按照写入该文件的内容来注意异常的登录尝试。

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.