ipset 介绍

ipset 是 Linux 内核提供的一个高效工具,用于管理和存储多个 IP 地址、网络、端口或 MAC 地址等元素的集合。它与 iptables 配合使用,可以显著提高大规模 IP 地址管理的效率,尤其是在需要处理大量规则时。

在仅使用 iptables 的时候我们想封禁多条 IP 需要在 iptables 中配置多条规则,而配合 ipset 我们则只需要配置一条规则就能够与IP集中的多个IP地址进行匹配。并且性能更好。

以下是 ipset 的详细解析:

1. 核心概念

集合(Set)ipset 的核心是集合,它是一个容器,可以存储 IP 地址、网络、端口或 MAC 地址等元素。

高性能ipset 通过哈希表或位图实现,查询和操作的时间复杂度接近 O(1),远优于逐条遍历的 iptables 的 O(n)。

2. 主要优势

高效性ipset 在内核中实现,查询速度极快,尤其适合大规模规则场景。

动态性:无需重新加载 iptables 规则即可动态修改集合内容。

灵活性:支持多种数据格式,如单个 IP 地址、子网、IP 与端口组合等。

简化规则:一个 iptables 规则可以引用整个集合,减少规则复杂度。

3. 集合类型

ipset 支持多种集合类型,常见的有:

hash:ip:存储单个 IP 地址。

hash:net:存储子网。

hash:ip,port:存储 IP 和端口组合。

hash:mac:存储 MAC 地址。

list:set:存储其他 ipset 集合的名称(嵌套集合)。

4. 基本操作

以下是一些常用的 ipset 操作:

创建集合

  sudo ipset create my_blacklist hash:ip

添加 IP 地址

  sudo ipset add my_blacklist 192.168.1.100

查看集合内容

  sudo ipset list my_blacklist

删除 IP 地址

  sudo ipset del my_blacklist 192.168.1.100

销毁集合

  sudo ipset destroy my_blacklist

5. 与 iptables 结合使用

ipset 需要与 iptables 配合才能生效。例如,屏蔽特定 IP 地址的访问:

  1. 创建黑名单集合:
   sudo ipset create my_blacklist hash:ip
  1. 添加 IP 到黑名单:
   sudo ipset add my_blacklist 203.0.113.1
  1. 配置 iptables 规则:
   sudo iptables -I INPUT -m set --match-set my_blacklist src -j DROP

6. 适用场景

黑名单管理:快速屏蔽恶意 IP 地址。

白名单管理:允许一组 IP 地址访问敏感服务。

动态防护:配合工具(如 fail2ban)动态封禁异常 IP。

大规模规则场景:管理上千条规则时,ipset 是必备工具。

7. 注意事项

内核支持:确保内核加载了 ipset 模块,可通过 lsmod | grep ip_set 检查。

集合大小:大量 IP 地址时,建议设置合适的哈希大小,避免性能下降。

持久化配置:默认情况下,ipset 规则在系统重启后会丢失,可通过以下方式保存和恢复:

  sudo ipset save > /etc/ipset.conf

  sudo ipset restore < /etc/ipset.conf

8. 安装

sudo apt-get install ipset  # Debian/Ubuntu

sudo yum install ipset      # CentOS/RHEL

总结

ipset 是一个简单高效的工具,专为解决大规模 IP 地址管理而生。它在性能和易用性上的优势,使其成为服务器运维中不可或缺的一部分。通过动态管理黑白名单、优化 iptables 规则,可以轻松应对复杂的网络管理需求。

如果你在使用过程中遇到问题,可以参考 ipset 官方文档 或查阅相关教程。

引用链接

[1] ipset 官方文档: http://ipset.netfilter.org/