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
的使用方法都将有助于构建更加安全和高效的网络防护体系。