【问题标题】:Docker container accessible only via Cloudflare CDN (selected ip ranges)只能通过 Cloudflare CDN 访问的 Docker 容器(选定的 IP 范围)
【发布时间】:2020-07-12 06:46:19
【问题描述】:
我在 docker 容器中有网络服务器,但我无法在我的主机 (Debian) 上配置 iptables。我希望仅指定的 IP 地址在端口 80 和 443 上连接到我的机器(主机)。端口 22 应该可以从任何 ip 访问。就我而言,allowed 应该是 Cloudflare ip 地址。 Cloudflare ip 可在https://www.cloudflare.com/ips-v4 获得。
我应该如何正确阻止端口 80 和 443 上的非 Cloudflare ips 连接?
【问题讨论】:
标签:
linux
docker
nginx
iptables
cloudflare
【解决方案1】:
解决方案:
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
DOCKER-USER 的iptables -L 的结果:
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)上的所有连接。