设置服务器只接受Cloudflare的CDN IP连接方法 服务器仅允许CF IP访问的方法
之前教程写过怎么设置让NGINX只接受来自CF的CDN的IP连接的方法(https://www.bnxb.com/nginx/27638.html),但是这是属于第7层协议,要动用NGINX来处理,效率并不高,其实我们完全可以利用CENTOS服务器防火墙来实现这一功能
这里以CENTOS7带的firewalld防火墙为例
首先安装firewalld,如果已经有了这一步跳过
yum install firewalld
创建添加防火墙规则
cd /etc/firewalld/zones/ vi public.xml
粘贴如下防火墙IP(注意:需要把你的IP也加进去,不然会无法使用SSH等连接服务器)
另外还有种方案,就是把CF的其他可用端口一并放行,然后使用宝塔等管理面板,管理面板指定使用这个端口,这样就相当于可以通过CF访问到面板,就不会造成无法管理服务器的问题了,CF可用端口见https://lab.bnxb.com/zhishi/27646.html
<zone> <source address="173.245.48.0/20"/> <source address="103.21.244.0/22"/> <source address="103.22.200.0/22"/> <source address="103.31.4.0/22"/> <source address="141.101.64.0/18"/> <source address="108.162.192.0/18"/> <source address="190.93.240.0/20"/> <source address="188.114.96.0/20"/> <source address="197.234.240.0/22"/> <source address="198.41.128.0/17"/> <source address="162.158.0.0/15"/> <source address="104.16.0.0/12"/> <source address="172.64.0.0/13"/> <source address="131.0.72.0/22"/> <port protocol="tcp" port="80"/> <port protocol="tcp" port="443"/> </zone>
以上ip是cf公布的回源ip,CF只会使用这些IP段内的IP来连接你的服务器,因此这类设置这些IP开放80,443端口给他们连接,其他IP全部拒绝,如果你是使用其他cdn只要换成自己用的cdn的回源ip即可
然后重启防火墙
firewall-cmd --reload
如显示success则成功。
如果是非CENTOS系统,可以使用UFW命令
sudo ufw allow proto tcp from 173.245.48.0/20 to any port 80 sudo ufw allow proto tcp from 173.245.48.0/20 to any port 443
把上面的IP段全部添加进去就行了
如果是CENTOS6,只支持IPTABLE命令,那可以用下面方法
iptables -I INPUT -s 173.245.48.0/20 -p tcp --dport 80 -j ACCEPT iptables -I INPUT -s 173.245.48.0/20 -p tcp --dport 443 -j ACCEPT
同样的把上面的CF IP段全部添加进去就行了
然后重启防火墙
service iptables save service iptables restart