我家里有一台服务器,里面有一些 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.*