![iptables 和 Docker - 仅允许特定的端口映射](https://linux22.com/image/717184/iptables%20%E5%92%8C%20Docker%20-%20%E4%BB%85%E5%85%81%E8%AE%B8%E7%89%B9%E5%AE%9A%E7%9A%84%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84.png)
我有一台运行 docker 容器的服务器。该服务器有 2 个 ip,一个公共 ip(在接口上enp0s8
)和一个私有 ip(在接口上tun0
,只能通过 vpn 访问)。我想以某种方式配置 iptables,以便仅允许通过公共接口访问端口 80 和 443,但允许通过 vpn 接口访问所有端口。
我正是尝试执行以下操作:
- 运行具有端口映射 80:80、443:443 的 HAProxy 容器(应该可以从公共 IP 访问)
- 运行带有端口映射 8080:80 的 PhpMyAdmin 容器(只能从 VPN 访问)
我尝试在 iptables 中添加以下规则:
iptables -I INPUT -P ACCEPT
iptables -I INPUT -i enp0s8 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -i enp0s8 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -i enp0s8 -j DROP
但是端口 8080 上的 phpmyadmin 容器仍然可以从两个接口访问。
答案1
这取决于 docker 网络配置。通常你iptables -I FORWARD ...
只需要调整链。
仅iptables -I INPUT -i enp0s8
捕获出现在enp0s8
且 IP 地址匹配的数据包ip addr show dev enp0s8
,因此它不会捕获典型的 docker 流量。