ipset管理防火墙IP集合

2025-04发布6次浏览

ipset管理防火墙IP集合

一、ipset简介

ipset 是一种用于管理和操作大量 IP 地址或端口的工具,它与 iptables 配合使用可以更高效地处理复杂的防火墙规则。通过将多个 IP 地址组合成一个集合(set),可以在 iptables 中直接引用这些集合,从而简化规则配置并提高性能。

1.1 为什么使用 ipset?

  • 性能提升:当需要匹配大量 IP 地址时,ipset 的查找效率远高于逐条匹配 iptables 规则。
  • 规则简化:通过将多个 IP 地址归类到一个集合中,可以减少 iptables 中冗长的规则列表。
  • 灵活性强:支持多种数据类型,如哈希表、位图等,并且可以动态更新集合内容。

二、安装 ipset

在大多数 Linux 发行版中,ipset 并未默认安装。可以通过以下命令进行安装:

# 对于基于 Debian 的系统(如 Ubuntu)
sudo apt-get update
sudo apt-get install ipset

# 对于基于 RHEL 的系统(如 CentOS)
sudo yum install ipset

安装完成后,可以通过以下命令验证是否成功安装:

ipset --version

三、ipset 基本操作

3.1 创建集合

创建一个名为 blacklist 的集合,类型为 hash:ip,最大可容纳 65536 个 IP 地址:

sudo ipset create blacklist hash:ip maxelem 65536

3.2 添加/删除 IP 地址

向集合中添加或删除 IP 地址:

# 添加 IP 地址
sudo ipset add blacklist 192.168.1.100

# 删除 IP 地址
sudo ipset del blacklist 192.168.1.100

3.3 查看集合信息

查看当前所有集合及其内容:

sudo ipset list

查看特定集合的内容:

sudo ipset list blacklist

3.4 删除集合

删除一个集合前,请确保该集合未被 iptables 引用。否则需要先从 iptables 中移除相关规则。

sudo ipset destroy blacklist

如果只想清空集合中的所有成员而不删除集合本身,可以使用以下命令:

sudo ipset flush blacklist

四、与 iptables 结合使用

ipset 的强大之处在于它可以与 iptables 协同工作。以下是一个简单的例子,展示如何使用 ipset 来阻止黑名单中的 IP 地址访问服务器。

4.1 创建黑名单集合

sudo ipset create blacklist hash:ip maxelem 65536
sudo ipset add blacklist 192.168.1.100
sudo ipset add blacklist 192.168.1.101

4.2 配置 iptables 规则

添加一条 iptables 规则,拒绝来自 blacklist 集合中所有 IP 地址的流量:

sudo iptables -A INPUT -m set --match-set blacklist src -j DROP

检查 iptables 规则是否生效:

sudo iptables -L -v

4.3 保存规则

为了使规则在系统重启后仍然有效,需要保存 iptablesipset 的配置。

保存 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 还支持其他多种集合类型,适用于不同的场景。

  • hash:net:存储 CIDR 表示法的网络地址段。
  • bitmap:ip:使用位图来表示连续的 IP 地址范围。
  • list:set:包含其他集合的集合,用于分组和组织。

例如,创建一个包含子网的集合:

sudo ipset create whitelist hash:net
sudo ipset add whitelist 192.168.1.0/24

六、总结

ipset 是管理大规模 IP 地址或端口的有效工具,结合 iptables 可以显著提高防火墙规则的效率和可维护性。无论是个人用户还是企业环境,掌握 ipset 的使用方法都将有助于构建更加安全和高效的网络防护体系。