![是否可以限制哪些主机可通过 SSH 隧道访问?](https://linux22.com/image/654128/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%99%90%E5%88%B6%E5%93%AA%E4%BA%9B%E4%B8%BB%E6%9C%BA%E5%8F%AF%E9%80%9A%E8%BF%87%20SSH%20%E9%9A%A7%E9%81%93%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我有一个运行 ssh 服务器和 web 服务器的盒子。
- 我想防止拥有 ssh 帐户的人可以使用此盒子作为 Internet 其余部分的匿名代理(例如,通过创建隧道并将其用作 SOCKS 代理)。
- 我想允许拥有 ssh 帐户的人可以使用此框作为代理来访问本地网络服务器。
例如:
- 打开隧道:
ssh -D1234 myhost.com
- 配置浏览器使用 localhost:1234 作为代理
- 通过此代理访问
myhost.com
应该可以 - 通过此代理访问任何其他主机都会失败
我认为可以通过简单地关闭传出端口 80 来粗略地实现这一点,但这 (a) 不会阻止人们通过隧道传输非 Web 流量,并且 (b) 阻止任何用户访问网站。是否有更精细的方式来做到这一点,理想情况下是通过限制 sshd 同意通过隧道传输的内容,这可能吗?
答案1
您可以使用 sshd_config 文件中的 PermitOpen 选项限制可通过隧道访问的主机。
PermitOpen <TheIPYourWebServerListensOn>:80
如果你使用localhost
as,TheIPYourWebServerListensOn
你可能需要指示你的代理客户端使用它,即使对于发往 的请求也是如此localhost
。这可能会令人困惑。
另外,请记住,通过 SOCKS5,DNS 解析发生/可以发生在代理端,这允许非常方便的设置,例如在 hosts 文件中为服务器定义本地别名。
忘了说了,您可以添加多个主机:端口组合。您只需用空格将它们分开即可。sshd_config 手册页是此处的参考。希望这能有所帮助!
答案2
使用PermitOpen
sshd_config 您当然可以实现这种设置。
但是,请记住,如果您仍然允许用户通过 shell 登录,那么仅禁用端口转发实际上并不能提高安全性:他们可以直接从服务器访问互联网,甚至安装自己的转发器。无论如何,您必须信任您的 shell 用户。
如果你需要阻止用户直接访问某些端口范围甚至整个互联网(仅允许使用本地服务,例如发送和接收邮件),你可以使用iptables'扩展数据包匹配模块,确切地说是模块所有者,它允许根据所有者的 uid 或 gid 甚至进程名称过滤数据包。