Kaz*_*lfe 7 firewall networking network-bridge docker
我的计算机在端口 1234 上托管了一个应用程序,除了我的机器之外,任何东西都不能访问该应用程序。但是,我的 Docker 容器(运行 Apache)应该能够访问它。同样,我的 Docker 容器在各种端口上托管了许多资源,这些资源同样只能从我的计算机访问。现在,由于我的系统为该特定网络使用网桥这一事实,情况变得更加复杂:
NETWORK ID NAME DRIVER SCOPE
4d4b5e752963 bridge bridge local
c387eb42698a project_default bridge local
6818c0eb94bf host host local
f7e4ed6c05a2 none null local
Run Code Online (Sandbox Code Playgroud)
这个桥(令人讨厌)总是有一个随机生成的 ID,每次我重新启动我的 Docker Compose 设置时都会改变:
br-c387eb42698a Link encap:Ethernet HWaddr 02:42:29:95:fd:2c
inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:29ff:fe95:fd2c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:405753 errors:0 dropped:0 overruns:0 frame:0
TX packets:530699 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:85147217 (85.1 MB) TX bytes:75260996 (75.2 MB)
Run Code Online (Sandbox Code Playgroud)
简而言之,我需要以下内容:
br-c387eb42698a(或任何网络名称)都可以访问我本地机器上的端口 1234(方便的是 172.18.0.1)理想情况下,这里的解决方案将以与 IP 无关的方式工作,这样它不依赖于172.18.0.0/24子网上的网桥,如果我连接到恰好包含172.18.0.0/24子网的网络,它也不会破坏或允许数据泄漏。
我能想到的最简单的事情是使用接口名称并围绕它设置 UFW 规则,但我无法真正做到这一点,因为我的接口在不断变化。
我怎样才能做到这一点?虽然我更喜欢纯粹地ufw(或iptables在必要时)执行此操作,但我对需要配置 Docker 以始终为桥接接口分配持久 ID(甚至自定义名称?)的解决方案持开放态度。
这在 vanilla UFW 中是不可能的,因为接口名称处于不可猜测的恒定状态。为了设置这样的东西,应该创建一个手动定义的网络。简而言之,可以在 compose config 中使用Docker 的驱动程序选项bridge来创建自定义网络。这看起来像:
networks:
my_bridge:
driver: bridge
driver_opts:
com.docker.network.bridge.name: my-bridge
Run Code Online (Sandbox Code Playgroud)
从这里,可以将网桥配置添加到撰写文件中的每个服务:
myimage:
image: myimage:1.0
ports:
- "2580:2580"
networks:
- my_bridge
Run Code Online (Sandbox Code Playgroud)
然后,在 Compose 系统下次启动时,将使用正确的名称创建新网络:
my-bridge Link encap:Ethernet HWaddr 11:22:33:44:55:66
inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:1122:3344:5566/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:788 (788.0 B) TX bytes:695 (695.0 B)
Run Code Online (Sandbox Code Playgroud)
从那里,添加 UFW 规则以允许连接到端口 1234 是微不足道的:
ufw allow in on my-bridge from any to any port 1234
Run Code Online (Sandbox Code Playgroud)
突然间,一切正常!
| 归档时间: |
|
| 查看次数: |
7213 次 |
| 最近记录: |