是否可以限制哪些主机可以通过SSH隧道访问?

我有一个运行ssh服务器和web服务器的盒子。

  • 我想阻止使用ssh帐户的人使用这个盒子作为匿名代理到Internet的其他部分(例如,创build一个隧道并将其用作SOCKS代理)。
  • 我想允许使用ssh帐户的人使用这个框作为访问本地web服务器的代理。

举个例子:

  1. 打开一个隧道: ssh -D1234 myhost.com
  2. 将浏览器configuration为使用localhost:1234作为代理
  3. 通过这个代理访问myhost.com应该工作
  4. 通过此代理访问任何其他主机应该失败

我想这可以通过简单地closures外出端口80来粗略完成,但是这将(a)不会阻止人们隧穿非networking业务,并且(b)防止任何用户访问网站。 是一个更细粒度的方式来做到这一点,理想情况下通过限制sshd将同意隧道,可能吗?

您可以使用sshd_config文件中的PermitOpen选项来限制可通过隧道访问的主机。

 PermitOpen <TheIPYourWebServerListensOn>:80 

如果使用localhost作为TheIPYourWebServerListensOn ,则可能需要指示代理客户端使用它,即使对发往localhost请求也是如此。 一些可能令人困惑的事情。

另外,请记住,通过SOCKS5,DNSparsing发生/可能发生在代理端,允许非常方便的设置,如在主机文件中定义服务器的本地别名。

忘了说你可以添加多个主机:端口组合。 你只需要用空格将它们分开。 sshd_config手册页是这里的参考。 希望这可以帮助!

使用sshd_config中的PermitOpen ,你当然可以实现这种设置。

但是请记住,单独禁用端口转发实际上并不能提高安全性,如果您仍允许用户shelllogin:他们可以直接从服务器访问Internet,甚至可以安装自己的转发器。 无论如何,你必须信任你的shell用户。

如果您需要阻止用户直接访问某些端口范围甚至整个Internet(只允许使用本地服务,例如发送和接收邮件),则可以使用iptables的扩展包匹配模块,也就是模块所有者 ,它允许过滤数据包基于业主uid或gid甚至通过进程名称。