允许组和SSH匹配地址

我有一个家庭服务器与一些密码较弱的SSH帐户。 由于我们只是在本地使用,这不是一个大问题。

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

AllowUsers externaluser Match Address 192.168.0.0/24 AllowGroups localusers 

效仿这个最好的方法是什么? (或者我应该只允许本地用户外部访问,但没有密码authentication,希望他们的私钥保密?)

也许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 

有可能实现你正在尝试的!

一个解决scheme是运行两个不同的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,并且每个人都使用适当configuration的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 

我们为一些交互式login主机完成这项工作,而且工作得很好。