Docker 容器只能通过 Cloudflare CDN 访问(选定的 IP 范围)
Docker container accessible only via Cloudflare CDN (selected ip ranges)
我在 docker 容器中有网络服务器,但我无法在我的主机 (Debian) 上配置 iptables。我想允许 only 指定的 ip 地址在端口 80 和 443 上连接到我的机器(主机)。端口 22 应该可以从任何 ip 访问。在我的例子中,允许的应该是 Cloudflare ip 地址。 Cloudflare ips 在 https://www.cloudflare.com/ips-v4.
可用
我应该如何正确阻止端口 80 和 443 上的非 Cloudflare ips 连接?
解决方案:
iptables -F DOCKER-USER
iptables -I DOCKER-USER -j RETURN
iptables -I DOCKER-USER -p tcp -m multiport --dports http,https -j DROP
for i in `curl -s https://www.cloudflare.com/ips-v4`;\
do iptables -I DOCKER-USER -p tcp -i eth0 -m multiport --dports http,https -s $i -j RETURN;\
done
iptables -I DOCKER-USER -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -L
的 DOCKER-USER 的结果:
ACCEPT all -- anywhere anywhere
RETURN tcp -- <ACCEPTED IPs> anywhere multiport dports http,https
DROP tcp -- anywhere anywhere multiport dports http,https
RETURN all -- anywhere anywhere
解释:
第一部分 (ACCEPT
) 接受来自 Web 服务器(docker 容器)的传出流量。
第二部分 (RETURN
) 描述允许连接到端口 80 或 443 的 ip 地址。
第三部分 (DROP
) 丢弃端口 80/443 上的连接数据包,这些数据包未在 RETURN
部分中列出。
第四部分(RETURN
)是DOCKER-USER链中的默认规则。它可以通过下一个规则处理其他端口上的连接,而不是丢弃非 80/443 端口(例如端口 22 - ssh)上的所有连接。
这也会在端口 80/tcp 上丢弃 docker 容器 运行 的任何数据包,但容器的端口未映射到主机。创建类似于 docker, iptables and cloudflare
的问题
我在 docker 容器中有网络服务器,但我无法在我的主机 (Debian) 上配置 iptables。我想允许 only 指定的 ip 地址在端口 80 和 443 上连接到我的机器(主机)。端口 22 应该可以从任何 ip 访问。在我的例子中,允许的应该是 Cloudflare ip 地址。 Cloudflare ips 在 https://www.cloudflare.com/ips-v4.
可用我应该如何正确阻止端口 80 和 443 上的非 Cloudflare ips 连接?
解决方案:
iptables -F DOCKER-USER
iptables -I DOCKER-USER -j RETURN
iptables -I DOCKER-USER -p tcp -m multiport --dports http,https -j DROP
for i in `curl -s https://www.cloudflare.com/ips-v4`;\
do iptables -I DOCKER-USER -p tcp -i eth0 -m multiport --dports http,https -s $i -j RETURN;\
done
iptables -I DOCKER-USER -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -L
的 DOCKER-USER 的结果:
ACCEPT all -- anywhere anywhere
RETURN tcp -- <ACCEPTED IPs> anywhere multiport dports http,https
DROP tcp -- anywhere anywhere multiport dports http,https
RETURN all -- anywhere anywhere
解释:
第一部分 (ACCEPT
) 接受来自 Web 服务器(docker 容器)的传出流量。
第二部分 (RETURN
) 描述允许连接到端口 80 或 443 的 ip 地址。
第三部分 (DROP
) 丢弃端口 80/443 上的连接数据包,这些数据包未在 RETURN
部分中列出。
第四部分(RETURN
)是DOCKER-USER链中的默认规则。它可以通过下一个规则处理其他端口上的连接,而不是丢弃非 80/443 端口(例如端口 22 - ssh)上的所有连接。
这也会在端口 80/tcp 上丢弃 docker 容器 运行 的任何数据包,但容器的端口未映射到主机。创建类似于 docker, iptables and cloudflare
的问题