使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及,明月切身体会到还是 IPSET 最方便了,无论你是 IPv4 还是 IPv6 都可以方便的管理,无论你是加入白名单还是黑名单,都非常的简单高效!今天就参照明月自己的实操给大家分享一下。

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

IPSET 介绍

IPSET 是 iptables 的扩展,它允许你创建 匹配整个地址集合的规则。而不像普通的 iptables 链只能单 IP 匹配, ip 集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找,除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网络拥塞,IPSET 也具备一些新防火墙设计方法,并简化了配置。

官网:https://ipset.netfilter.org/

首先,我们可以利用 IPSET 根据不同的 CDN 服务商来创建不同的合集(set),甚至可以区别 IPv4/IPv6 来创建不同的合集分别的用在 iptables 规则里。因为明月目前使用的是 CloudFlare+奇安信网站卫士双 CDN ,所以就以此为例来创建不同的 IPSET 合集。

ipset create QNX360 hash:net #创建奇安信网站卫士节点 IPv4 合集
ipset create CloudFlare hash:net #创建 CloudFlare 节点 IPv4 合集
ipset create CloudFlare6 hash:net family inet6 #创建 CloudFlare 节点 IPv6 合集

目前奇安信网站卫士只提供 IPv4 节点 IP,所以只创建一个 IPv4 的QNX360合集即可。而 CloudFlare 的节点包含 IPv4/IPv6,所以我们加了family inet6参数,给 CloudFlare 的 IPv6 节点又创建一个CloudFlare6合集,一共是三个合集。

考虑到大部分 CDN 节点 IP 数量都不少,所以明月建议大家提前将 CDN 节点 IP 单独保存到文件进行导入,可以减少出错的概率保证数据的准确性,上述三个合集需要的 CDN 节点 IP 文件内容如下:

奇安信网站卫士节点

add QNX360 183.146.28.0/24
add QNX360 123.6.81.0/24

CloudFlare 的 IPv4 节点

add CloudFlare 103.21.244.0/22
add CloudFlare 103.22.200.0/22
add CloudFlare 103.31.4.0/22
add CloudFlare 104.16.0.0/13
add CloudFlare 104.24.0.0/14
add CloudFlare 108.162.192.0/18
add CloudFlare 131.0.72.0/22
add CloudFlare 141.101.64.0/18
add CloudFlare 162.158.0.0/15
add CloudFlare 172.64.0.0/13
add CloudFlare 173.245.48.0/20
add CloudFlare 188.114.96.0/20
add CloudFlare 190.93.240.0/20
add CloudFlare 197.234.240.0/22
add CloudFlare 198.41.128.0/17

CloudFlare 的 IPv6 节点

add CloudFlare6 2400:cb00::/32
add CloudFlare6 2606:4700::/32
add CloudFlare6 2803:f800::/32
add CloudFlare6 2405:b500::/32
add CloudFlare6 2405:8100::/32
add CloudFlare6 2a06:98c0::/29
add CloudFlare6 2c0f:f248::/32

CloudFlare 节点 IP 来源:https://www.cloudflare.com/zh-cn/ips/

上述三个合集的节点 IP 可以合并保存在一个.txt 文件里,如:ip.txt(记得这里的 TXT 文件必须是纯文本编辑器以 UTF-8 编码保存哦,不要用记事本!不要用记事本!不要用记事本!重要的事儿说三遍!),因为每行都有 add 命令添加 IP 到各自的 IPSET 合集里,所以保存到一个文件里是没有问题的,我们只需要让 IPSET 导入这个 TXT 文件就可以了:

ipset restore -f ip.txt #导入 ip.txt 里的节点到对应的 IPSET 合集里
ipset list #列出当前所有合集

可以看到如下的内容:

Name: QNX360
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 592
References: 1
Number of entries: 2
Members:
183.146.28.0/24
123.6.81.0/24Name: CloudFlare
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 1424
References: 1
Number of entries: 15
Members:
103.22.200.0/22
131.0.72.0/22
197.234.240.0/22
108.162.192.0/18
172.64.0.0/13
190.93.240.0/20
198.41.128.0/17
141.101.64.0/18
104.16.0.0/13
162.158.0.0/15
104.24.0.0/14
173.245.48.0/20
103.21.244.0/22
188.114.96.0/20
103.31.4.0/22Name: CloudFlare6
Type: hash:net
Revision: 6
Header: family inet6 hashsize 1024 maxelem 65536
Size in memory: 2032
References: 1
Number of entries: 7
Members:
2a06:98c0::/29
2606:4700::/32
2405:8100::/32
2400:cb00::/32
2803:f800::/32
2c0f:f248::/32
2405:b500::/32

可以看到都已经导入到各个合集里了,这时候我们就可以让 iptables 决定这些合集是加入白名单规则还是黑名单规则了,具体白名单规则命令如下:

iptables -A INPUT -p tcp -m set --match-set QNX360 src -m multiport --dports 443,80 -j ACCEPT #允许奇安信网站卫士 CDN 节点访问 80、443 端口
iptables -A INPUT -p tcp -m set --match-set CloudFlare src -m multiport --dports 443,80 -j ACCEPT #允许 CloudFlare 的 IPv4 节点访问 80、443 端口
ip6tables -A INPUT -p tcp -m set --match-set CloudFlare6 src -m multiport --dports 443,80 -j ACCEPT #允许 CloudFlare 的 IPv6 节点访问 80、443 端口

反之黑名单命令如下:

iptables -A INPUT -p tcp -m set --match-set QNX360 src -m multiport --dports 443,80 -j DROP #禁止奇安信网站卫士 CDN 节点访问 80、443 端口
iptables -A INPUT -p tcp -m set --match-set CloudFlare src -m multiport --dports 443,80 -j DROP #禁止 CloudFlare 的 IPv4 节点访问 80、443 端口
ip6tables -A INPUT -p tcp -m set --match-set CloudFlare6 src -m multiport --dports 443,80 -j DROP #禁止 CloudFlare 的 IPv4 节点访问 80、443 端口

注意上述命令的差异,涉及 IPv4 的命令是 iptables,涉及 IPv6 的是 ip6tables,不要搞混了,否则是不会生效的哦!同样的重载 iptables 和保存 iptables 也是要区分 IPv4 和 IPv6 的:

systemctl reload iptables.service #重载 IPv4 规则
service iptables save #保存 IPv4 规则
systemctl reload ip6tables.service #重载 IPv6 规则
service ip6tables save #保存 IPv6 规则

好了,至此就通过 IPSET 导入了两个不同 CDN 服务商的节点 IP 了,如果后期节点 IP 有所调整,只需要在 IPSET 里清理掉对应合集重新导入新的 IP 节点即可,注意区分 IPv4/IPv6 即可。比如变更 CloudFlare 节点 IP,我们只需要清楚 CloudFlare 合集后再导入即可:

ipset flush CloudFlare
ipset flush CloudFlare6

至于导入 TXT 格式,参考上面的合集 TXT 修改即可,推荐使用 EditPlus 的搜索替换来快速的修改文本【推荐下用了十多年的老牌纯文本编辑器——EditPlus】。

如果您只用了 CloudFlare,可以直接使用下面的命令完成 iptables 节点 IP 加白:

#添加 cloudflare ips-v4 到 iptables 白名单的命令
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -m multiport --dports http,https -s $i -j ACCEPT; done
#添加 cloudflare ips-v6 iptables 白名单的命令
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $i -j ACCEPT; done

这个更加的简单高效,明月采用的 IPSET 主要是为了方便后期运维需要的,毕竟明月是专业干这个的嘛!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 机器学习 基础 之 【实战案例】新闻内容分类实战

Python 机器学习 基础 之 【实战案例】新闻内容分类实战 目录 Python 机器学习 基础 之 【实战案例】新闻内容分类实战 一、简单介绍 二、新闻内容分类实战 三、数据准备 四、分词与清洗工作 1、读取数据 2、使用 jieba 分词器进行分词,使用 Pandas 创建Data…

R语言探索与分析19-CPI的分析和研究

一、选题背景 CPI(居民消费价格指数)作为一个重要的宏观经济指标,扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区,CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

Java——面向对象进阶(一)

前言 面向对象进阶(一):static,继承,this和super关键字 文章目录 一、static1.1 静态变量1.2 静态方法1.3 静态变量和静态方法在内存中 二、继承2.1 概念2.2 继承的特点和能继承什么2.3 继承中的重写2.4 this和super关键字 一、static 在 Jav…

Java学习笔记(六):Array List、学生管理系统、学生管理系统升级版

目录 一、ArrayList 1.1集合和数组的优势对比: 1.2 ArrayList类概述 1.3 ArrayList类常用方法 1.3.1 构造方法 1.3.2 成员方法 1.4 ArrayList存储字符串并遍历 1.5 ArrayList存储学生对象并遍历 1.6 查找用户的索引 1.7 添加手机对象并返回要求的数据 二…

谈AI 时代网站的未来趋势

以大语言模型为代表的AI 技术迅速发展,将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代,主要是通过网站(website)提供信息。网站主要为人类阅读的方式构建的。主要…

数据结构笔记1 绪论,线性表

学习视频: 第01周c--1.2基本概念和术语1_哔哩哔哩_bilibili 01《数据结构》绪论_哔哩哔哩_bilibili 数据: 1.数值型的数据:整数,实数 2.非数值型的数据:文字、图像.. 数据元素:(元素&#xf…

人类语言处理nlp部分笔记——四、GPT3

参考自李宏毅课程-人类语言处理 四、GPT3 1. 介绍 GPT-3是一个language model,它的参数量相当巨大,是ELMO的2000倍。 2. GPT-3的野心 虽然GPT-3和BERT等模型一样,但是GPT-3是不需要针对特定的task做finetune的,也就是说GPT-3…

React 18

创建 React 18 脚手架项目 全局安装 create-react-app npm install -g create-react-app yarn global add create-react-app . 确认是否已安装 create-react-app npm list -g create-react-app yarn global list | grep create-react-app . 如果安装失败 有时&#xff0…

继续引爆!5天连出2个里程碑成果,离子阱量子计算机嗨翻天!

5月30日,清华大学的一项成果被Nature审稿人称为“量子模拟领域的巨大进步”!“值得关注的里程碑”!该成果就是中国科学院院士、清华大学交叉信息研究院教授段路明带领研究组在量子模拟计算领域取得的重要突破。段路明研究组首次实现512离子二…

码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)

1🐋🐋史莱姆融合(钻石;并查集) 时间限制:1秒 占用内存:128M 🐟题目描述 🐟题目思路 这道题目使用并查集,同一集合的所有元素的最顶上的祖父节点是统一的。…

获取当前周周一和周日的日期(格式20240607)

获取当前周周一和周日的日期(格式20240607) function getWeekStartAndEndDate() {const today new Date() // 获取当前日期const dayOfWeek today.getDay() // 获取今天是周几,返回值是0(周日)到6(周六&…

逆波兰表达式

目录 一、定义 二、算法步骤 三、代码实现 一、定义 逆波兰表达式又叫做后缀表达式,是一种没有括号,并严格遵循“从左到右”运算的后缀式表达方法。 二、算法步骤 1、首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 …

20240607每日通信--------VUE3前端引入scoket-io,后端引入Netty-SocketIO,我成功了,希望一起交流沟通

无语 前置: VUE3 前端集成scoket-io socket.io-client Sringboot 3.0JDK17集成Netty-SocketIO Netty-SocketIO 失败原因一: 前期决定要写demo时候,单独了解了,后端引入Netty-SocketIO注意事项,详见我先头写的博客 前…

路径

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时,通常涉及两种路径,一种是相对路径,另一种是绝对…

G5 - Pix2Pix理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 理论知识图像翻译CGANU-NetPix2Pix损失函数模型结构生成器差别器 模型效果总结与心得体会 理论知识 前面已经学习了GAN与CGAN,这节开始学习P…

LeetCode1143最长公共子序列

题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…

大厂真实面试题(一)

滴滴大数据sql 取出累计值与1000差值最小的记录 1.题目 已知有表t_cost_detail包含id和money两列,id为自增,请累加计算money值,并求出累加值与1000差值最小的记录。 2.分析 本题主要是想找到累加值域1000差距最小的记录,也就是我们要对上述按照id进行排序并且累加,并…

【机器学习基础】Python编程06:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

婚恋网源码 相亲交友小程序源码

婚恋网源码 相亲交友小程序源码 1、婚恋相亲交友系统 超大型婚恋社交、相亲、征婚、互动系统,继承了此前O2O、SNS及B2C的优秀特点 2、媒婆推广返利系统 针对广大婚恋网站运营者而推出的一套共享返利婚恋模式,全民红娘,会员裂变式增长 3、…

VBA语言専攻通知20240608

通知20240608 各位学员∶本周MF系列VBA技术资料增加621-625讲,T3学员看到通知后请免费领取,领取时间6月7日晚上19:00-6月8日晚上20:00。本次增加内容: MF621:为组合框添加工作表数据 MF622:在代码中使用π值 MF623:在窗体上使用切换按钮 MF624:删除…