SSH 的 AllowGroups 和 Match Address

SSH 的 AllowGroups 和 Match Address

我家里有一台服务器,里面有一些 SSH 账户,密码很弱。因为我们只在本地使用,所以这不是什么大问题。

现在我想只允许一个帐户进行外部访问,但其他帐户仍可进行本地访问。但这行不通(因为匹配中只允许一部分选项):

AllowUsers externaluser
Match Address 192.168.0.0/24
AllowGroups localusers

模拟这种情况的最佳方法是什么?(或者我应该也允许本地用户进行外部访问,但不进行密码验证,希望他们将私钥保密?)

答案1

也许 pam_access 是实现此目的的更好方法?

例如:在 /etc/security/access.conf 中,执行如下行:

    + : root : 192.168.0.
    + : localonlygroup : 192.168.0.
    + : remoteuser: ALL
    - : ALL : ALL

然后确保 /etc/pam.d/sshd 周围可能有一行如下内容:

    account    required     pam_nologin.so

添加另一行如:

    account    required     pam_access.so

答案2

您尝试的事情完全可以实现!

一种解决方案是运行两个不同的 sshd 实例,一个用于面向外部的用户,一个用于内部用户。通过巧妙地使用目标iptables REDIRECT,您可以继续允许人们在端口 22 上连接到 sshd,但根据他们来自哪里,他们会获得适当的实例。例如:

# Connect inside users to "inside" sshd.
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 22 -j REDIRECT --to-ports 2200

# Connect out*emphasized text*side users to "outside" sshd.
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 22 -j REDIRECT --to-ports 2201

这假设您有内部 sshd 监听端口 2200,外部 sshd 监听端口 2201,并且每个 sshd 都使用适当配置的sshd_config文件。还请注意,要使此功能正常工作,您需要:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2200 -j ACCEPT
iptables -A INPUT -p tcp --dport 2201 -j ACCEPT

我们针对一些交互式登录主机确实进行了这样的操作,并且效果很好。

答案3

如果不使用用户组是可以接受的

AllowUsers externaluser@* *@192.168.0.*

相关内容