现在在一个新的homelab服务器上运行许多dockers,并试图确保一切都被锁定和安全。我使用服务器做各种事情,既需要从外部世界(nextcloud)访问,也需要从内部网络(plex)访问。当然,服务器位于限制开放端口的路由器后面,但正在寻找额外的安全性-我想限制那些我只想通过内部网络访问的dockers,以192.168.0.0/24。这样,如果我的路由器上的端口以某种方式打开,它不会被暴露(我是偏执狂吗?).
目前docker-compose文件通过以下方式暴露端口:
....
ports:
- 8989:8989
....
字符串
这当然工作正常,但如果我打开路由器上的端口,世界就可以访问它。我知道我可以绑定到localhost通过
....
ports:
- 127.0.0.1:8989:8989
....
型
但当我试图从内部网络访问Docker时,这并没有帮助我。我读过很多关于docker网络和各种标志的文章,也读过关于iptables解决方案的可能性。
任何指导都是非常感激的。
谢谢你,
3条答案
按热度按时间pgccezyw1#
不要在docker-compose中声明任何端口,它们在容器之间自动可见。
我以这种方式使用了一个elasticsearch容器,一个单独的kibana可以通过yml上声明的服务器名称连接到它。
如果我的路由器上某个端口打开了,它不会暴露
使用此过程,端口在Docker环境之外永远不可见(即外部==在您的本地网络中)。
如果您担心的是端口在执行我告诉您的过程时在您的LAN中发布,那么它们不是。
kkbh8khc2#
你其实和
字符串
与此同时,它可以在您的服务器上本地访问,足够有趣,您的绑定到localhost技巧正是我正在寻找自己的设置XD
从这一点上,实际上有几种方法来设置它,以便您可以在本地网络上访问它。
SSH隧道
第一个是我在自己的设置中使用的:ssh转发
你可以,如果你还没有,设置一个.ssh/config文件来转发localhost端口到你的计算机.考虑到您的示例,语法如下
型
some-hostname
是您可以选择的短名称,user-of-server
是您设置的实际登录用户,192.168.x.x
是您服务器的实际本地IP地址,您还可以包括IdentityFile /path/to/ssh/key
。这样你就可以在本地网络上的任何一台计算机上运行ssh some-hostname
来ssh到你的服务器上,你的服务器将在该特定计算机上的localhost:8989
上可用。反向代理
第二个是反向代理,如nginx,这也可以在docker容器中运行,您可以将其绑定到任何端口,例如6443,您可以将其配置文件挂载到容器中
型
在./config/defaul.conf中,你可以设置一些类似的东西
型
则它应该仅在192.168.x.x:6443上可用
vc6uscn93#
这就是我的工作:
字符串
在netstat中,我可以看到它在192.168.0.2上打开,所以我的局域网可以连接到它。