ipset
是 Linux 内核提供的一个高效工具,用于管理和存储多个 IP 地址、网络、端口或 MAC 地址等元素的集合。它与 iptables
配合使用,可以显著提高大规模 IP 地址管理的效率,尤其是在需要处理大量规则时。
在仅使用 iptables 的时候我们想封禁多条 IP 需要在 iptables 中配置多条规则,而配合 ipset 我们则只需要配置一条规则就能够与IP集中的多个IP地址进行匹配。并且性能更好。
以下是 ipset
的详细解析:
• 集合(Set):ipset
的核心是集合,它是一个容器,可以存储 IP 地址、网络、端口或 MAC 地址等元素。
• 高性能:ipset
通过哈希表或位图实现,查询和操作的时间复杂度接近 O(1),远优于逐条遍历的 iptables
的 O(n)。
• 高效性:ipset
在内核中实现,查询速度极快,尤其适合大规模规则场景。
• 动态性:无需重新加载 iptables
规则即可动态修改集合内容。
• 灵活性:支持多种数据格式,如单个 IP 地址、子网、IP 与端口组合等。
• 简化规则:一个 iptables
规则可以引用整个集合,减少规则复杂度。
ipset
支持多种集合类型,常见的有:
• hash:ip
:存储单个 IP 地址。
• hash:net
:存储子网。
• hash:ip,port
:存储 IP 和端口组合。
• hash:mac
:存储 MAC 地址。
• list:set
:存储其他 ipset
集合的名称(嵌套集合)。
以下是一些常用的 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
iptables
结合使用ipset
需要与 iptables
配合才能生效。例如,屏蔽特定 IP 地址的访问:
sudo ipset create my_blacklist hash:ip
sudo ipset add my_blacklist 203.0.113.1
iptables
规则: sudo iptables -I INPUT -m set --match-set my_blacklist src -j DROP
• 黑名单管理:快速屏蔽恶意 IP 地址。
• 白名单管理:允许一组 IP 地址访问敏感服务。
• 动态防护:配合工具(如 fail2ban
)动态封禁异常 IP。
• 大规模规则场景:管理上千条规则时,ipset
是必备工具。
• 内核支持:确保内核加载了 ipset
模块,可通过 lsmod | grep ip_set
检查。
• 集合大小:大量 IP 地址时,建议设置合适的哈希大小,避免性能下降。
• 持久化配置:默认情况下,ipset
规则在系统重启后会丢失,可通过以下方式保存和恢复:
sudo ipset save > /etc/ipset.conf
sudo ipset restore < /etc/ipset.conf
sudo apt-get install ipset # Debian/Ubuntu
sudo yum install ipset # CentOS/RHEL
ipset
是一个简单高效的工具,专为解决大规模 IP 地址管理而生。它在性能和易用性上的优势,使其成为服务器运维中不可或缺的一部分。通过动态管理黑白名单、优化 iptables
规则,可以轻松应对复杂的网络管理需求。
如果你在使用过程中遇到问题,可以参考 ipset 官方文档 或查阅相关教程。
[1]
ipset 官方文档: http://ipset.netfilter.org/