iptables 和 Docker - 仅允许特定的端口映射

iptables 和 Docker - 仅允许特定的端口映射

我有一台运行 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 流量。

相关内容