我的webserver在docker容器中,但是我不能在我的主机上配置iptables (Debian)。我希望允许只允许指定的ip地址在端口80和443上连接到我的计算机(主机)。端口22应可从任何ip访问。在我的例子中,应该允许使用Cloudflare ip地址。Cloudflare可在https://www.cloudflare.com/ips-v4上使用。
如何正确地阻止端口80和443上的非Cloudflare ips连接?
发布于 2020-07-11 18:34:05
解决方案:
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结果:
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服务器(码头容器)的传出流量。
第二部分(RETURN)描述允许ip地址在端口80或443上连接。
第三部分(DROP)在端口80/443上丢弃未在RETURN部件中列出的连接包。
第四部分(RETURN)是码头用户链中的默认规则.它可以在下一个规则之前处理其他端口上的连接,而不是删除非80/443端口(例如端口22-ssh)上的所有连接。
,这也将丢弃在端口80/tcp上运行的任何停靠容器数据包,但是容器端口没有映射到主机。创建类似于 的问题
https://stackoverflow.com/questions/62821274
复制相似问题