用户需要从 WAN 端对 Ubuntu 服务器进行 shell 访问。有许多具有简单密码的 shell 帐户。因此 shell 端口(端口 22)在防火墙中被阻止。对于我的 WAN 端用户,我计划在 Debian chroot 中运行 ssh 服务器,并在防火墙中打开其端口。如果这种设置可行,实现它的最佳方法是什么?
答案1
单个 ssh 服务器
如果您计划在 chroot 中运行 SSH 服务器的唯一原因是限制某些用户的密码身份验证,那么您不需要这样做:您可以告诉 sshd 仅允许白名单用户使用密码。在/etc/ssh/sshd_config
,使用Match
指令:
PasswordAuthentication No
Match User trusted_user_1,trusted_user_2
PasswordAuthentication yes
如果您确实想要 chroot 某些用户,您仍然可以运行单个 ssh 守护程序,并使用ChrootDirectory
指令 in sshd_config
(在指令范围内Match
)。
两个 ssh 服务器,监听不同的地址
如果两个 ssh 守护程序侦听不同的地址,则可以让它们侦听同一端口。在每个指令中放置一个ListenAddress
指令/etc/ssh/sshd_config
,每个都有您希望该服务器侦听的 IP 地址(侦听在,不听到,即这些是服务器网络接口的地址)。仅当您的服务器计算机是执行 LAN/WAN 过滤的节点时,此方法的适用性有限。这也意味着类似的事情ssh localhost
不会是透明的(您仍然可以使用 访问不在本地主机上侦听的守护进程ssh -b
)。
两台 ssh 服务器,监听不同端口
Port
您可以使用以下指令使 chroot 中的 ssh 守护程序侦听不同的端口:/etc/ssh/sshd_config
。继续在防火墙上阻止来自外部的端口 22,并且不要阻止您为 chroot sshd 选择的其他端口。
两台ssh服务器,由防火墙执行路由
如果您有两个守护程序侦听不同的端口(如上所述),您仍然可能会产生它们都侦听端口 22 的错觉。例如,使 chrooted ssh 守护程序侦听端口 2201,并将来自端口 22 的流量重定向到eth1
到端口 2201:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j REDIRECT --to-ports 2201
然后,从 localhost 或通过 eth0 到端口 22 的 ssh 连接将到达非 chroot 服务器,而通过 eth1 到端口 22 的 ssh 连接将到达 chroot 服务器。端口 2201 上的连接将到达 chroot 的服务器。您可以使用除 之外的其他条件-i eth
,例如! -s 10.1.0.0/16 ! -s 127.0.0.0/8
匹配源地址除 10.1.xy 或环回之外的所有内容。