当前位置: 首页 > news >正文

使用 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 主要是为了方便后期运维需要的,毕竟明月是专业干这个的嘛!

相关文章:

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

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

oracle trim 函数很慢,加trim以后执行超慢,执行计划求解

RT,该字段未建立索引,以下贴出SQL,及执行计划,不加trim走hash join,求解释! ----------------------语句如下,标红的字段加trim() EXPLAIN PLAN FOR select a.楼盘id, a.监测明细id, a.报告日期, a.广告位名称, …...

【Leetcode Python】

偷某间房屋时,累积金额等于间隔前两间房的金额加上当前房的金额数;不偷时,累计金额就等于前一间房的金额数。 状态转移方程:dp[i] max(dp[i-2]nums[i], dp[i-1]) 并且注意错误点:dp[1]有两间房时,初始值为…...

Ubuntu系统的k8s常见的错误和解决的问题

K8s配置的时候出现的常见问题 Q1: master节点kubectl get nodes 出现的错误 或者 解决方法&#xff1a; cat <<EOF >> /root/.bashrc export KUBECONFIG/etc/kubernetes/admin.conf EOFsource /root/.bashrc重新执行 kubectl get nodes 记得需要查看一下自己的…...

Scala学习笔记7: 对象

目录 第七章 对象1- 单例对象2- 伴生对象3- 扩展类或特质的对象4- apply方法5- 应用程序对象6- 枚举end 第七章 对象 在Scala中, 对象(Obiect) 是一个单例实例, 类似于 Java中的单例模式 ; Scala中的对象使用 object 关键字定义, 它可以包含字段、方法、初始化代码和嵌套的类…...

【Linux】进程切换环境变量

目录 一.进程切换 1.进程特性 2.进程切换 1.进程切换的现象 2.如何实现 3.现实例子 2.环境变量 一.基本概念 二.常见环境变量 三.查询常见环境变量的方法 四.和环境变量相关的命令 五.环境变量表的组织方式 六.使用系统调用接口方式查询环境变量 1.getenv 2.反思 …...

嵌入式学习记录6.6(拷贝构造/友元函数/常成员函数)

一.拷贝构造函数和拷贝赋值函数 1.1拷贝构造函数功能,格式 拷贝构造函数是一种特殊的构造函数&#xff0c;用来将一个类对象给另一个类对象初始化使用的。 1> 用一个类对象给另一个类对象初始化时&#xff0c;会自动调用拷贝构造函数。 2> 当一个类对作为函数的实参&…...

宝塔 nginx 配置负载均衡 upstream

nginx 主配置文件加入 upstream myapp1 {server 192.168.124.101:5051;server 192.168.124.102:5052;server 192.168.124.111:5050;}站点配置文件中加入 location / {proxy_pass http://myapp1;}80端口映射到外网域名配置方法 加入红框中的代码 upstream myapp3 {server 192.16…...

idea 插件推荐

idea 插件推荐 RESTFul-Tool 接口搜索Show Comment 代码注释展示translation 翻译(注释翻译)MyBatisCodeHelperPro 日志封装sql xml跳转GitToolBox 展示GIT提交Jenkins Control idea jenkins 集成Gitmoji Plus: Commit Button GIT提交moji表情 RESTFul-Tool 接口搜索 https://…...

【Linux】Linux环境基础开发工具_5

文章目录 四、Linux环境基础开发工具Linux小程序---进度条git 未完待续 四、Linux环境基础开发工具 Linux小程序—进度条 上篇我们实现了一个简易的进度条&#xff0c;不过那仅仅是测试&#xff0c;接下来我们真正的正式实现一个进度条。 接着编写 processbar.c 文件 然…...

Java Web学习笔记15——DOM对象

DOM&#xff1a; 概念&#xff1a;Document Object Model&#xff1a; 文档对象模型 将标记语言的各个组成部分封装为对应的对象&#xff1a; Document: 整个文档对象 Element&#xff1a;元素对象 Attribute&#xff1a; 属性对象 Text&#xff1a;文本对象 Comment&a…...

中电联系列一:rocket手把手教你理解中电联协议!

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 第1部分&#xff1a;总则 Charging and battery swap service information exchange for electric vehicles Part 1:General 前 言 T/CEC102—2016《 电动汽车充换电服务信息交换》分为四…...

(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

微服务架构 正常的小项目就是所有的功能集成在一个模块中&#xff0c;这样代码之间不仅非常耦合&#xff0c;而且修改处理的时候也非常的麻烦&#xff0c;应对高并发时也不好处理&#xff0c;所以 我们可以使用微服务架构&#xff0c;对项目进行模块之间的拆分&#xff0c;每一…...

冯喜运:6.7今日黄金原油行情分析及独家操作策略

【黄金消息面分析】&#xff1a;周三&#xff08;6月5日&#xff09;&#xff0c;金价回升逾1.2%&#xff0c;收盘报每盎司2,355.49美元&#xff0c;全面收复前一交易日的跌幅。周三当天前公布的美国民间就业数据弱于预期&#xff0c;增强了美联储将在今年晚些时候降息的预期&a…...

Android 蓝牙概述

一、什么是蓝牙 蓝牙是一种短距离&#xff08;一般10m内&#xff09;无线通信技术。蓝牙技术允许固定和移动设备在不需要电缆的情况下进行通信和数据传输。 “蓝牙”这名称来自10世纪的丹麦国王哈拉尔德(Harald Gormsson)的外号。出身海盗家庭的哈拉尔德统一了北欧四分五裂的国…...

Python3 笔记:字符串的 find()、rfind()、index()、rindex()

1、find() 方法检测字符串中是否包含子字符串 str &#xff0c;如果指定 beg&#xff08;开始&#xff09; 和 end&#xff08;结束&#xff09; 范围&#xff0c;则检查是否包含在指定范围内&#xff0c;如果指定范围内如果包含指定索引值&#xff0c;返回的是索引值在字符串中…...

【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法

文章目录 前言 背景介绍 初始代码 优化代码 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 背景介绍 在一个嵌入式软件开发项目中&#xff0c;需要设计一个ECU节点的CAN网路数据发送&#xff0c;需求是在500k的通信波特率上&a…...

Python 设计模式(行为型)

文章目录 策略模式场景示例 迭代器模式场景示例 访问者模式场景示例 观察者模式场景示例 命令模式场景示例 模板方法模式场景示例 模板方法模式场景示例 事件驱动模式场景示例 责任链模式场景示例 中介者模式场景示例 状态模式场景示例 策略模式 策略模式&#xff08;Strategy…...

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…...

Day34 事件聚合器实现消息过滤功能

​ 当前章节,实现了消息事件过滤功能 在上一章节中,我们发现在Login视图页和Main视图页都使用了同一个事件聚合器,导致在Login视图页发送的消息也被Main 视图主页所接收,这违反了事件传递的意图和模块化设计的原则。为了解决这个问题,我们需要为事件聚合器引入消息过滤的…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...