use*_*221 6 networking iptables network-security docker docker-swarm
我一直想知道为什么 docker 安装默认情况下不启用到容器的端口转发。
为了节省您的点击次数,我的意思是:
$ sysctl net.ipv4.conf.all.forwarding=1
$ sudo iptables -P FORWARD ACCEPT
Run Code Online (Sandbox Code Playgroud)
我认为这是某种安全风险,但我只是想知道它是什么风险。
基本上我想创建一些默认情况下启用此功能的代码,但我想知道可能发生什么不好的情况。
我用谷歌搜索这个并找不到任何东西。
一般来说,FORWARD ACCEPT 似乎被认为过于宽松(?)
如果是这样,我可以改变什么来使其更安全?
我的网络相当简单,它是本地局域网(10.0.0.0/24)中的一堆带有 openvpn 服务器的电脑,这些电脑可以部署 docker 主机(我是手工完成的,不使用 docker compose 或 swarm 或任何因为节点改变而需要互相看到的东西。所以没有真正的外部访问。另一个细节是我没有使用网络覆盖,而无需使用 swarm就可以做到,但该帖子的作者警告说它可能很快就会被弃用,所以我也想知道我是否应该立即开始使用 docker-swarm 。
编辑:我想我的问题可能比乍一看更理论化。我想知道他们为什么决定不这样做。我非常需要/想要 docker 实例之间的充分通信,它们需要 ssh 进入并打开一堆不同的端口来相互通信(这是我的网络知识的限制,我不知道如何这确实有效,我想它们都是高端口,但是那些也被docker阻止了吗?)。我也不确定 docker-swarm 在这里对我有多大帮助。他们针对的是微服务,我可能不时需要交互式会话,但这可能在一个问题中要求太多。
也许这个问题最简单的版本是:“如果我将该代码作为脚本放在每次计算机启动时加载,那么有人怎么会滥用它”。
每个 docker 容器都在本地桥接网络上运行,IP 地址通常在 172.1x.xx.xx 范围内。您可以获取运行的ip地址:
docker inspect <container name> | jq -r ".[].NetworkSettings.Networks[].IPAddress"
Run Code Online (Sandbox Code Playgroud)
您应该运行容器,在运行容器的主机上公开和发布特定的容器端口。
或者,您可以使用 iptables 将流量从外部重定向到特定端口:
iptables -t nat -I PREROUTING -i <incoming interface> -p tcp -m tcp --dport <host listening port> --j DNAT --to-destination <container ip address>:<container port>
Run Code Online (Sandbox Code Playgroud)
如果端口正在侦听 udp 套接字,请将 tcp 更改为 udp。
如果您想重定向所有流量,您仍然可以使用相同的方法,但可能需要在主机上指定辅助 IP 地址(例如 192.168.1.x),并将到达该地址的任何流量重定向到您的容器。
| 归档时间: |
|
| 查看次数: |
5199 次 |
| 最近记录: |