我有一个家庭服务器与一些密码较弱的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主机完成这项工作,而且工作得很好。