如何为使用 docker-compose 公开的端口创建 IP 白名单

如何为使用 docker-compose 公开的端口创建 IP 白名单

我正在尝试使公共 IP 上的端口(由 docker-compose 公开)仅供我的其他一些 IP 地址使用。我仍需要其他端口来接受来自任何 IP 的连接。

我曾尝试使用 ufw 来实现这一点,但显然 docker 本身对 iptables 做了一些更改,因此我无法以正常方式做到这一点。

答案1

不确定这对 UFW 来说有多好,但执行这些步骤的 iptables 规则涉及以下内容:

iptables -I DOCKER-USER -i eth0 -s 10.0.0.0/24 -p tcp \
  -m conntrack --ctorigdstport 8080 -j ACCEPT
iptables -I DOCKER-USER -i eth0 ! -s 10.0.0.0/24 -p tcp \
  -m conntrack --ctorigdstport 8080 -j DROP

以下是这些命令各部分的详细信息:

  • 该表需要由DOCKER-USERdocker提供,运行所有请求,并且不会像修改其他表那样修改此表。
  • 您希望插入DOCKER-USER而不是追加,因为此表末尾的默认规则是接受所有内容。在此之后追加规则将被忽略。
  • 接口eth0是外部网络接口。您通常不希望在内部阻止请求,无论是使用环回还是在容器之间。
  • 源 IP CIDR 指定您要允许的地址范围,在本例中10.0.0.0/24为 C 类网络10.0.0.*。第二条规则阻止到目标端口的所有其他内容。
  • conntrack需要使用和来ctorigdstport指定原始目标端口(即已发布端口),而不是容器端口。在 mangle 规则修改数据包以与容器通信后,iptables 看到的端口将是容器端口,并且多个容器可以在内部监听同一个端口,并发布到主机上的不同端口。

答案2

一种选择可能是利用反向代理(nginx\traefik\haproxy 容器?)来为您执行过滤的应用程序。

相关内容