Linux Docker容器只能通过Cloudflare CDN访问(选定的ip范围)

Linux Docker容器只能通过Cloudflare CDN访问(选定的ip范围),linux,docker,nginx,iptables,cloudflare,Linux,Docker,Nginx,Iptables,Cloudflare,我在docker容器中有webserver,但无法在主机(Debian)上配置iptables。我希望只允许指定的ip地址通过端口80和443连接到我的计算机(主机)。端口22应可从任何ip访问。在我的情况下,应该允许使用Cloudflare ip地址。Cloudflare IP可在以下位置获得: 如何正确阻止端口80和443上的非Cloudflare ips连接?解决方案: iptables -F DOCKER-USER iptables -I DOCKER-USER -j RETURN ip

我在docker容器中有webserver,但无法在主机(Debian)上配置iptables。我希望只允许指定的ip地址通过端口80和443连接到我的计算机(主机)。端口22应可从任何ip访问。在我的情况下,应该允许使用Cloudflare ip地址。Cloudflare IP可在以下位置获得:


如何正确阻止端口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
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
接受所有--任何地方
返回tcp--anywhere多端口数据端口http、https
丢弃tcp—随时随地多端口数据端口http、https
返回所有--任何地方
说明:
第一部分(
ACCEPT
)接受来自web服务器(docker容器)的传出流量。
第二部分(
返回
)描述了允许在端口80或443上连接的ip地址。
第三部分(
DROP
)在端口80/443上丢弃连接数据包,这些数据包未在
RETURN
部分中列出。
第四部分(
返回
)是DOCKER-USER链中的默认规则。它可以通过下一个规则处理其他端口上的连接,而不是删除非80/443端口(例如端口22-ssh)上的所有连接