最终目标非常简单。打开 SSH 端口 22,但禁用互联网:我可以通过 ssh 进入 docker 容器,但无法执行任何需要互联网连接的操作(下载软件包、curls 命令……)我有一个应用程序,基本上允许用户通过浏览器与在我的服务器上运行的 docker 容器进行通信。到目前为止,我已经使用 Go 服务器通过 docker exec 容器命令将命令转发到容器……,但发现显示输出非常麻烦(尤其是如果它们运行 nano 或 vim 之类的东西)。如果有人知道如何解决这些问题,那也会很有帮助。但是,让我们回到主要问题。
我决定只在我的容器上打开 ssh 并以此方式与它们通信。容器完全不能访问互联网,这一点非常重要。我不希望它们下载任何软件包或发送任何请求,因为存在明显的 DDOS 农场威胁和类似的安全问题。此外,如果它们具有 root 访问权限,那就更好了。
我尝试在容器上启用 SSH,然后将容器的端口 22 映射到主机。这样做的问题是,如果我在将网络设置为“无”或“内部”的情况下运行容器,则无法映射端口。所以这是错误的。我尝试的另一种方法是设置 iptables 规则(使用 dockerfile 和入口点脚本),然后删除“NET_ADMIN”权限(这样他们就无法恢复我设置的规则),但您无法这样做,因为您首先需要 NET_ADMIN 来配置 iptables 规则(奇怪的情况,因为我在运行没有 NET_ADMIN 的容器之前构建了映像)。
另一个可能的解决方案是在主机上实现 iptables。不过,虚拟机也会有付费版本,可以访问互联网。