在Linux系统中,ipset 是一个非常强大但常被忽视的工具。它允许你创建和管理IP地址、端口、MAC地址等的集合,并与 iptables 配合使用,从而大幅提升防火墙规则的效率和可维护性。本教程将从零开始,手把手教你掌握 ipset 的基本用法,即使你是Linux新手也能轻松上手。
一、什么是 ipset?
传统的 iptables 规则是逐条匹配的。如果你需要阻止成百上千个IP地址,就需要写成百上千条规则,这不仅繁琐,还会严重拖慢系统性能。
而 ipset 允许你将这些IP地址放入一个“集合”(set)中,然后在 iptables 中只用一条规则引用这个集合。这样,无论集合中有10个还是10万个IP,匹配速度几乎不变!这就是 Linux网络管理 中的性能优化利器。
二、安装 ipset
大多数现代Linux发行版默认不安装 ipset,但安装非常简单:
# Ubuntu/Debiansudo apt updatesudo apt install ipset# CentOS/RHEL/Fedorasudo yum install ipset# 或者(较新版本)sudo dnf install ipset
三、基本用法
1. 创建一个IP集合
首先,我们创建一个名为 blacklist 的集合,用于存储要禁止的IP地址:
sudo ipset create blacklist hash:ip
这里 hash:ip 表示这是一个基于哈希表的IP地址集合,查询效率极高。
2. 向集合中添加IP
sudo ipset add blacklist 192.168.1.100sudo ipset add blacklist 10.0.0.50
3. 查看集合内容
sudo ipset list blacklist
输出将显示集合中的所有IP。
4. 与 iptables 联动
现在,我们可以用一条 iptables 规则拒绝整个集合中的IP:
sudo iptables -A INPUT -m set --match-set blacklist src -j DROP
这条规则的意思是:如果数据包的源IP(src)在 blacklist 集合中,就丢弃(DROP)它。
四、高级技巧:支持网段和端口
ipset 不仅支持单个IP,还支持网段、端口甚至IP+端口组合:
- 网段集合:
hash:net—— 用于添加如192.168.0.0/24 - IP+端口集合:
hash:ip,port—— 可精确控制某个IP访问特定端口
例如,创建一个阻止特定IP访问SSH端口的集合:
sudo ipset create ssh_blacklist hash:ip,portsudo ipset add ssh_blacklist 203.0.113.5,22sudo iptables -A INPUT -m set --match-set ssh_blacklist src,dst -j DROP
五、持久化保存规则
默认情况下,重启后 ipset 集合会丢失。为了持久化,可以导出并恢复:
# 保存当前所有集合到文件sudo ipset save > /etc/ipset.rules# 开机时恢复(可加入 /etc/rc.local 或 systemd 服务)sudo ipset restore < /etc/ipset.rules
六、总结
通过本教程,你应该已经掌握了 ipset教程 的核心内容。使用 ipset,你可以轻松实现大规模IP地址的高效管理,显著提升 防火墙优化 效果。无论是搭建安全网关、防止DDoS攻击,还是精细化流量控制,ipset 都是你不可或缺的工具。
记住:合理使用 IP地址集合,不仅能简化配置,还能让系统更安全、更高效!
