除一个 docker 桥接器外,将网络接口与系统隔离

除一个 docker 桥接器外,将网络接口与系统隔离

我有两个独立的网络,一个是可信的,另一个是非可信的。可信网络包含一个服务器。

蓝色表示现有的可信网络,大盒子表示服务器,通过 eth0 连接到可信网络。

在此处输入图片描述

我现在想开始使用服务器上的免费资源将包含在 docker 容器中的服务托管到不受信任的网络(红色)。

我希望绑定到 0.0.0.0 的所有内容都能正常工作,但不绑定到 eth1 和 docker1。这意味着 nginx 应该能够与除 eth1 和 docker1 之外的所有接口通信。它应该不是能够与 192.168.2.0/24 子网(也包括 docker1 网桥)通信。对于任何服务,sshd 和 samba 也适用。来自 192.168.2.0/24 的任何设备都不应能够在服务器上建立 ssh 会话或通过 samba 连接。服务器上不应发生 192.168.2.0/24 与其他子网之间的路由。

因此,服务器和 192.168.1.0/24 网络上的任何设备都应该能够访问容器 1 到 3,但不能访问容器 4 和 5。并且容器 4 和 5 不应该能够访问 192.168.1.0/24 网络上的任何内容。

我相信使用 iptables 应该可以做到。另外,我该如何配置 docker bridge?

我缺乏使用 iptables 以及 docker 网络的经验,因此如果能提供详细的解释我将非常感激。

(这两个网络之间的所有通信都只能通过路由器进行。路由器使用 NAT,以便子网 192.168.1.0/24 可以通过它访问 192.168.2.0/24,但反之亦然,只有当路由器上的端口转发允许时才可以,但这是一个不同的(且已解决的)问题。)

更新:添加这些规则可以起到作用吗?

iptables -A INPUT   -i eth1 -j DROP
iptables -A OUTPUT  -i eth1 -j DROP
iptables -A FORWARD -i eth1 -j DROP

iptables -A INPUT   -i docker1 -j DROP
iptables -A OUTPUT  -i docker1 -j DROP
iptables -A FORWARD -i docker1 -j DROP

iptables -A FORWARD -i eth1 -o docker1 -j ACCEPT
iptables -A FORWARD -i docker1 -o eth1 -j ACCEPT

如果是这样,例如,container1 如何连接到在 container4 上运行的 HTTP 服务器,如果它不知道要到达 192.198.2.10,它必须首先通过 eth0 退出,因为尝试直接联系 192.168.2.10 将导致数据包被丢弃。

相关内容