Debian11下的nftables仅允许Cloudflare访问端口

本文的以下的内容仅适用于使用了CloudFlare的CDN,可能存在一些问题,就暂时写自己看看了。

简述

通过shell脚本来对Cloudflare提供的链接:https://www.cloudflare.com/ips-v4 以及 https://www.cloudflare.com/ips-v6 进行处理,以能够定时的同步到所需要的机器里——nftables防火墙上,效果就是限制端口仅允许CF的ip通过。

上一篇文章:Debian 11 上的 nftables防火墙 简单配置(配置文件)

nftables规则模板

     set cfip4 {
	      type ipv4_addr
	      flags interval
	      elements = {  } #cf_ipv4
     }
     set cfip6 {
	      type ipv6_addr
	      flags interval
	      elements = {  } #cf_ipv6
     }

对于需要使用的地方,可以简单的引用命名集,如:对80、433等端口进行限定,仅允许cloudflare的ip进行访问。

chain input {
		type filter hook input priority 0;
		ip saddr @cfip4 tcp dport { 80,443 } accept
		ip6 saddr @cfip6 tcp dport { 80,443 } accept
}

相比起iptables,那可太方便了。

完整的参考如下

table inet filter {
     set cfip4 {
	      type ipv4_addr
	      flags interval
	      elements = {  } #cf_ipv4
     }
     set cfip6 {
	      type ipv6_addr
	      flags interval
	      elements = {  } #cf_ipv6
     }
     
	chain input {
		type filter hook input priority 0;
		ip saddr @cfip4 tcp dport { 80,443 } accept
		ip6 saddr @cfip6 tcp dport { 80,443 } accept
                tcp dport 22 accept
                ct state related,established accept
    		counter reject
      }
}

自动更新脚本

因为不熟悉shell,只能随便写写,相信问题应该挺多的,有需要的话简单看看就好。

创建相关文件

mkdir -p /opt/auto_cf_ips && touch /opt/auto_cf_ips/auto_cf_ips_error.log && cp /etc/nftables.conf /etc/nftables.conf.bak

创建脚本

此处内容需要回复后并刷新才能查看

设置定时任务

定期获取cf的ipv4、ipv6网关,并更新到nftables防火墙中。Debian11使用命令 crontab -e 来设置定时任务。

#每天凌晨3点20分执行
20 3 1 * * /opt/auto_cf_ips/auto_set_cf_ip.sh

碎碎念

通过curl来定时更新nftables防火墙规则,对于使用了Cloudflare CDN的站点来说很大程度上能满足需求。

阅读剩余
THE END