ipset域名如何正确设置?ipset域名设置方法有哪些

ipset域名是运维人员通过ipset工具批量管理域名对应IP地址的高效方法,在CDN加速、防盗链、DDoS防护等场景中广泛使用。 它让你从繁琐的iptables单条规则中解放出来,通过集合操作实现动态、批量管控,配合定时脚本能自动跟上域名解析的变化。

ipset域名配置步骤详解

安装ipset并确认内核支持

ipset是Linux内核模块xt_set的用户态工具,安装前检查内核是否支持,执行lsmod | grep xt_set,若未加载则modprobe ip_set,安装命令随发行版不同:

  • Debian/Ubuntu:sudo apt-get install ipset
  • CentOS/RHEL:sudo yum install ipset
  • 安装后验证:ipset -v,输出版本号即成功。

创建域名IP集合

ipset支持多种类型,管理域名IP最常用的是hash:ip,创建集合时指定名称和最大元素数:

ipset create domain_whitelist hash:ip maxelem 65536

若需存储CIDR网段,使用hash:net类型,集合创建后可用ipset list查看,初始为空。

编写域名解析更新脚本

手动添加IP不现实,推荐脚本化,以下脚本从域名列表文件逐行读取,解析A记录并更新集合:

#!/bin/bash
IPSET_NAME="domain_whitelist"
DOMAIN_FILE="/etc/ipset/domains.txt"
# 清空旧集合,避免累积过期IP
ipset flush $IPSET_NAME
while read domain; do
    # 只取IPv4地址,忽略CNAME
    ips=$(dig +short $domain A | grep -E '^[0-9]+.[0-9]+.[0-9]+.[0-9]+$')
    for ip in $ips; do
        ipset add $IPSET_NAME $ip
    done
done < $DOMAIN_FILE

赋予执行权限,加入crontab,每5分钟执行一次:/5 /usr/local/bin/update_ipset.sh,注意调整dig的超时设置,避免DNS故障时阻塞。

关联iptables规则实现控制

创建集合后,需与iptables联动,白名单集合只允许指定IP访问80端口:

ipset域名如何正确设置?ipset域名设置方法有哪些

iptables -A INPUT -p tcp --dport 80 -m set --match-set domain_whitelist src -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j DROP

黑名单同理,将ACCEPT改为DROP,规则顺序重要,白名单规则应放在DROP之前,若需同时匹配源和目标IP,使用--match-set的src或dst参数。

ipset域名与iptables性能对比

匹配效率的差异

传统iptables规则按顺序匹配,每条规则都需检查五元组,当IP列表达到几百条时,CPU开销明显,ipset基于哈希表,时间复杂度O(1),无论集合有100个还是10万个元素,匹配速度几乎不变,行业共识认为,超过1000个独立IP时,ipset的性能优势是一到两个数量级。

管理便捷性对比

维度 iptables逐条规则 ipset集合
添加/删除IP 需插入或删除整条规则,影响规则编号 直接ipset add/del,不影响其他规则
批量操作 写脚本循环执行iptables,易出错 支持文件导入、集合间swap、flush
持久化 通过iptables-save/restore 通过ipset save/restore,格式更简洁
原子性 多条规则需同时操作时无法保证 集合操作本身原子,脚本可封装事务

内存占用实测参考

在同等IP数量下,ipset哈希表占用内存略高于单条规则,但远低于iptables规则链的元数据开销,据统计,一个包含5000个IP的hash:ip集合,内存占用约3-5MB,而同等数量的iptables规则可能消耗10-15MB,随着规则增长,差距更大。

ipset域名批量封禁场景

攻击IP自动封禁

当网站遭遇DDoS,攻击IP往往来自多个域名,收集恶意域名列表(如从日志、第三方威胁情报),编写脚本定时解析并加入黑名单集合,关键步骤:

ipset域名如何正确设置?ipset域名设置方法有哪些

  • 创建黑名单集合:ipset create blacklist hash:ip maxelem 1000000
  • 编写脚本,解析域名后ipset add blacklist $ip
  • iptables规则:iptables -A INPUT -m set --match-set blacklist src -j DROP
  • 配合conntrack,已建立的连接不受影响,需配合-m state --state NEW。
  • 脚本执行频率建议与恶意域名TTL匹配,通常每5-10分钟。

CDN节点白名单管理

使用CDN服务时,只允许CDN节点IP访问源站,传统做法是手动维护IP段列表,但CDN厂商会动态增减节点,ipset方案:

  • 收集CDN官方域名(如cdn.example.com),解析出所有A记录。
  • 每日或每6小时执行脚本,清空白名单集合后重新添加。
  • iptables规则:iptables -A INPUT -p tcp --dport 443 -m set --match-set cdn_whitelist src -j ACCEPT,其余DROP。
  • 注意:若CDN节点同时使用IPv6,需创建hash:ip6集合并添加对应规则。

多服务器同步方案

当有多台后端服务器,需保持ipset集合一致,常用方法:

  • 主服务器生成集合文件,通过rsync或scp分发到各节点,触发ipset restore。
  • 使用共享存储(如NFS),所有服务器挂载同一文件,但需注意并发写入。
  • 高级方案:使用etcd或consul广播IP变更,各节点监听后调用ipset命令,业内专家指出,此方案适用于大规模集群,但复杂度较高。

ipset域名常见问题与优化

集合大小限制与调整

创建集合时未指定maxelem,默认65536,若需更大,在创建时设置:ipset create big_set hash:ip maxelem 1000000,注意:maxelem太大可能消耗过多内存,建议根据实际IP数量设置,通常10万以内足够。

持久化配置

ipset集合在重启后消失,持久化方法:

  • 导出:ipset save > /etc/ipset/ipset.conf
  • 恢复:

    ipset域名如何正确设置?ipset域名设置方法有哪些

    ipset restore < /etc/ipset/ipset.conf

  • 在系统服务中启用自动恢复,如systemd的ipset.service,或写入rc.local,注意:恢复应在iptables规则加载之前执行,否则规则引用空集合会报错。

更新频率与DNS缓存

域名解析脚本不宜执行太频繁,防止被DNS服务器限速,建议根据域名的TTL设定,取TTL的一半,例如TTL为600秒,每300秒执行一次,若域名解析变化不频繁,可延长至1小时,在脚本中增加日志,监控解析失败或异常,避免清空集合。

与iptables规则的兼容性

ipset规则与普通iptables规则可混用,但注意匹配顺序,若集合为空,--match-set会匹配失败,所以先确保集合有数据再加载规则,ipset不支持-m set的--return-nomatch标志,需注意。

ipset域名方案将域名管理与IP集合深度融合,在日常运维和安全防护中展现出极高效率,无论你是搭建CDN白名单,还是构建自动封禁系统,掌握这套技术栈都能显著提升响应速度。

ipset域名常见问题解答

ipset域名集合如何同时用于多个iptables链? 同一个集合可在多个规则中引用,只需在iptables命令中指定相同的集合名,同时在INPUT和FORWARD链中使用-m set --match-set domain_whitelist src,集合更新后所有规则自动生效。

ipset域名集合在重启后iptables规则报错怎么解决? 确保ipset服务在iptables之前启动,在systemd中,可设置iptables.service的After=ipset.service,若手动恢复,先执行ipset restore,再执行iptables-restore。

ipset域名方案是否支持IPv6域名? 支持,创建集合时指定family inet6,如ipset create ipv6list hash:ip family inet6,解析域名时使用dig AAAA,更新脚本中过滤IPv6地址,iptables规则对应使用ip6tables及-m set --match-set ipv6list src。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/684053.html

赞 (0)
上一篇 2026年8月18日 05:52
下一篇 2026年8月18日 05:54

相关推荐

  • 浏览器怎么解析域名?DNS 解析过程详解

    用户输入网址后,浏览器先检查本地缓存,若无结果则依次查询操作系统缓存、本地 DNS 服务器,最终由根域名服务器、顶级域名服务器和权威域名服务器协同完成 IP 地址获取,整个过程通常在毫秒级内完成,在 2026 年的网络架构下,域名解析已不再是简单的“查字典”,而是融合了边缘计算、智能调度与安全验证的复杂系统工程……

    2026年5月9日
    02183
  • 域名反向解析费用多少,域名反向解析费用

    域名反向解析(PTR记录)本身不收取官方注册费,但通过第三方DNS服务商或云厂商托管时,通常包含在基础套餐中或单独收取少量年费(约10-50元/年),具体取决于服务商定价策略,域名反向解析的核心概念与费用构成在探讨成本之前,必须厘清“反向解析”的技术本质,它并非购买一个独立域名,而是将IP地址映射回域名的过程……

    2026年6月2日
    02252
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 个性英文域名怎么注册,个性英文域名注册

    个性英文域名是提升品牌国际化形象与搜索引擎信任度的核心资产,建议优先选择简短、易拼写且包含核心业务关键词的.com后缀,预算充足时可直接注册品牌词,预算有限则可采用“动词+名词”或“形容词+名词”的组合策略,在2026年的数字营销环境中,域名已不再仅仅是一个技术入口,而是品牌资产的重要组成部分,随着百度算法对用……

    2026年6月5日
    01484
  • 微信小程序需要域名吗,开发小程序必须备案域名吗

    微信小程序不需要域名就能上线,但如果你要绑定合法合规的服务器域名,这一步骤绕不开,很多新手开发者第一次接触小程序时,被“域名”这个词搞懵了,以为和网站一样必须买域名才能用,小程序的前端代码托管在微信平台,你只需要一个已备案的域名来作为后端API的请求地址,我把整个逻辑、操作流程和常见问题拆开讲清楚,小程序与网站……

    2026年8月30日
    01322

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(3条)

  • 影ai577的头像
    影ai577 2026年8月18日 07:14

    读了这篇文章,我深有感触。作者对使用的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!

    • 白冷9483的头像
      白冷9483 2026年8月18日 07:14

      @影ai577:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是使用部分,给了我很多新的思路。感谢分享这么好的内容!

  • 帅草7448的头像
    帅草7448 2026年8月18日 07:14

    这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于使用的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!