将对 Docker 容器端口的访问限制为 IP 地址

将对 Docker 容器端口的访问限制为 IP 地址

我的服务器上有几个 docker 容器,暴露端口。现在我尝试将对端口的访问限制为能够插入规则而不允许策略的 IP 地址。我以编程方式在 dotnet 应用程序上应用 IP 表规则,该应用程序也在主机上的容器内运行,但在主机上而不是桥接网络上。因此,以下是在应用程序启动时应用的规则

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT

然后我将删除所有 DOCKER-USER 规则,但保留 RETURN 规则,并应用以下内容

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

然后我添加了所有需要的端口用于 web 接口等,并且在建立了连接的场景中,为所有这些端口制定规则(它们存储在数据库中)

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -A DOCKER-USER -p tcp -m conntrack --ctorigsrc {my_ip} -m tcp --dport 5000 -j ACCEPT
iptables -A INPUT -p tcp -s {my_ip} --dport 5000 -j ACCEPT

然后我删除 INPUT 和 FORWARD 链。到目前为止一切顺利。

现在我需要将连接限制到单个 IP,并能够动态删除和添加 IP 规则。我尝试像上面一样附加和插入 INPUT 和 DOCKER-USER 规则,但附加或插入规则都不会限制与 IP 的连接,总是有所有客户端或没有客户端能够连接到端口。

有人知道我遗漏了什么吗?

答案1

要动态添加或删除特定 IP 地址的规则,您可以创建自定义链并管理这些链的规则。

创建自定义链以允许来自特定 IP 地址

iptables -N ALLOWED_IPS

添加规则允许的 IP 地址链接受来自特定 IP 地址的流量:

iptables -A ALLOWED_IPS -s {allowed_ip1} -j ACCEPT
iptables -A ALLOWED_IPS -s {allowed_ip2} -j ACCEPT

将新 IP 添加到允许的 IP 地址

iptables -I ALLOWED_IPS -s {new_ip} -j ACCEPT

从列表中删除 IP允许的 IP 地址

iptables -D ALLOWED_IPS -s {ip_to_remove} -j ACCEPT

允许来自允许的 IP 地址链:

iptables -A INPUT -j ALLOWED_IPS

相关内容