只允许通过CloudFlare(iptables)访问Web服务器


Cloudflare是保护网站免受不同计算机骗子(黑客)侵害的好东西。 但是,如果他们仍然以某种方式识别了站点所在的Web服务器的原始IP,则他们将至少绕过代理尝试通过IP攻击它。 您可以阻止重定向,在尝试访问不存在的域时发送444个NGINX重置,但是最有力的解决方法是:仅针对我们的安全代理的IP地址向服务器打开http / https流量。

顺便说一句,这种方法还可以使部分犯罪网站(例如Crimeflare.org)变得无用。 好吧,“侦探”发现该IP地址曾经可以访问该域-通过尝试登录IP:443或IP:80来检查该域是否仍然存在。
而且,如果关闭服务器上的所有端口,禁用ICMP并仅允许通过IPMI / VNC进行访问,则没人会知道我们IP上根本没有任何东西。

让我们在iptables中进行操作。

CloudFlare具有大量地址,但它们都被压缩到少量子网中。 伙计们预料到了这一请求, 发表了一篇文章,告诉您在哪里可以找到他们当前的子网,甚至可以在iptables中写些什么。 一个问题是,它应该手动完成,这非常不方便且不可靠:CloudFlare中的地址可能会随着时间而变化,并且有一天可能会发生服务器上不允许使用位于新地址的代理的情况。 因此,会话将通过这些新地址的客户将无法访问您的站点。

幸运的是,该问题是自动化的。 因此:

1.我们禁止iptables中的所有HTTP / HTTPS通信:

iptables -I INPUT 1 -p tcp -m multiport --dports http,https -j DROP 

2.例如,通过/root/cloudflare-update.sh将cloudflare-update.sh脚本放置在某个位置,其内容如下:

 #!/bin/bash while read ip ; do iptables -D INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT ; done <<< "$(curl https://www.cloudflare.com/ips-v4)" while read ip ; do iptables -I INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT ; done <<< "$(curl https://www.cloudflare.com/ips-v4)" iptables-save > /etc/iptables/rules.v4 

也就是说,我们删除之前添加的所有现有条目,然后重新添加CloudFlare地址列表中的所有内容。 这样,我们避免了重复的规则。 最后-保存。

3.我们使脚本可执行:

 chmod +x /root/cloudflare-update.sh 

4.在树冠中(例如,在/ etc / crontab文件的末尾),我们添加了任务以每12小时更新一次地址:

 0 */12 * * * root /root/cloudflare-update.sh &> /dev/null 

仅此而已! 现在,您只能通过代理访问服务器上的端口80和443,因为 在任何时候,服务器上都只允许属于代理的地址。

Source: https://habr.com/ru/post/zh-CN414837/


All Articles