ipset 是一种用于管理和操作大量 IP 地址或端口的工具,它与 iptables 配合使用可以更高效地处理复杂的防火墙规则。通过将多个 IP 地址组合成一个集合(set),可以在 iptables 中直接引用这些集合,从而简化规则配置并提高性能。
ipset 的查找效率远高于逐条匹配 iptables 规则。iptables 中冗长的规则列表。在大多数 Linux 发行版中,ipset 并未默认安装。可以通过以下命令进行安装:
# 对于基于 Debian 的系统(如 Ubuntu)
sudo apt-get update
sudo apt-get install ipset
# 对于基于 RHEL 的系统(如 CentOS)
sudo yum install ipset
安装完成后,可以通过以下命令验证是否成功安装:
ipset --version
创建一个名为 blacklist 的集合,类型为 hash:ip,最大可容纳 65536 个 IP 地址:
sudo ipset create blacklist hash:ip maxelem 65536
向集合中添加或删除 IP 地址:
# 添加 IP 地址
sudo ipset add blacklist 192.168.1.100
# 删除 IP 地址
sudo ipset del blacklist 192.168.1.100
查看当前所有集合及其内容:
sudo ipset list
查看特定集合的内容:
sudo ipset list blacklist
删除一个集合前,请确保该集合未被 iptables 引用。否则需要先从 iptables 中移除相关规则。
sudo ipset destroy blacklist
如果只想清空集合中的所有成员而不删除集合本身,可以使用以下命令:
sudo ipset flush blacklist
ipset 的强大之处在于它可以与 iptables 协同工作。以下是一个简单的例子,展示如何使用 ipset 来阻止黑名单中的 IP 地址访问服务器。
sudo ipset create blacklist hash:ip maxelem 65536
sudo ipset add blacklist 192.168.1.100
sudo ipset add blacklist 192.168.1.101
添加一条 iptables 规则,拒绝来自 blacklist 集合中所有 IP 地址的流量:
sudo iptables -A INPUT -m set --match-set blacklist src -j DROP
检查 iptables 规则是否生效:
sudo iptables -L -v
为了使规则在系统重启后仍然有效,需要保存 iptables 和 ipset 的配置。
iptables 规则:# 对于基于 Debian 的系统
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
# 对于基于 RHEL 的系统
sudo service iptables save
ipset 配置:sudo ipset save > /etc/ipset.conf
在系统启动时自动加载保存的规则:
# 加载 ipset 配置
sudo ipset restore < /etc/ipset.conf
# 加载 iptables 规则
sudo iptables-restore < /etc/iptables/rules.v4
除了 hash:ip 类型外,ipset 还支持其他多种集合类型,适用于不同的场景。
例如,创建一个包含子网的集合:
sudo ipset create whitelist hash:net
sudo ipset add whitelist 192.168.1.0/24
ipset 是管理大规模 IP 地址或端口的有效工具,结合 iptables 可以显著提高防火墙规则的效率和可维护性。无论是个人用户还是企业环境,掌握 ipset 的使用方法都将有助于构建更加安全和高效的网络防护体系。