Linux ipset + iptables高效实现IP白名单,解决海量防火墙规则冗余问题

Linux ipset + iptables高效实现IP白名单,解决海量防火墙规则冗余问题 一、ipset核心原理与优势ipset是Linux内核配套的IP集合管理工具可统一存储IPv4地址、CIDR网段、端口、MAC等对象常与iptables配合完成流量过滤、访问控制。传统iptables的短板十分明显若直接逐条添加IP放行/拦截规则数据包匹配时会线性遍历整条规则链IP数量越多CPU损耗越高上万条地址场景下防火墙转发延迟会显著上升。ipset通过内核哈希表存储地址集防火墙仅需一条规则即可完成集合匹配地址查询效率接近O(1)在大规模内网、服务器集群、虚拟机环境中性能优势突出。日常运维最常用hash:net类型集合同时支持单IP与网段混合存放。二、ipset白名单完整实操流程1.创建白名单集合ipset create allow_whitelist hash:net hashsize 1024 maxelem 65536参数说明hashsize哈希表初始容量适配中小规模内网场景maxelem集合最大存储条目上限可根据业务 IP 总量调大。2.白名单IP/网段日常维护单条添加内网、本地通信地址# 单个业务节点IP ipset add allow_whitelist 10.22.7.19 ipset add allow_whitelist 10.22.7.22 # 整段内网网段 ipset add allow_whitelist 10.22.7.0/24 # 本地回环、链路本地保留地址 ipset add allow_whitelist 127.0.0.1 ipset add allow_whitelist 169.254.0.0/16基础管理命令ipset list allow_whitelist # 查看集合内所有地址 ipset del allow_whitelist 10.22.7.19 # 删除单条IP ipset flush allow_whitelist # 清空集合全部条目批量导入场景将所有放行IP写入文本一行一个地址循环批量添加while read ip; do ipset add allow_whitelist $ip; done ip_whitelist.txt3.联动iptables实现多层白名单策略场景1宿主机整机入站白名单仅名单内IP可访问本机服务逻辑优先放行本地通信、已有连接与ping仅白名单源IP允许入站其余全部拦截。# 放行本地lo网卡 iptables -A INPUT -i lo -j ACCEPT # 放行已建立、关联连接 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 允许ICMP ping探测 iptables -A INPUT -p icmp -j ACCEPT # 匹配ipset白名单源IP全部放行 iptables -A INPUT -m set --match-set allow_whitelist src -j ACCEPT # 非白名单流量全部丢弃 iptables -A INPUT -j DROP场景 2端口精细化白名单仅指定 IP 可访问 SSH 22 端口只限制远程登录端口不影响其他业务流量iptables -A INPUT -p tcp --dport 22 -m set --match-set allow_whitelist src -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP场景 3虚拟机转发流量白名单管控跨主机、虚拟机之间的互通流量仅白名单 IP 可转发访问后端业务iptables -A FORWARD -m set --match-set allow_whitelist src -j ACCEPT iptables -A FORWARD -j DROP三、清理闲置僵尸 ipset 集合当业务下线、防火墙策略删除后ipset集合不会自动销毁会产生无引用的闲置集合。通过References字段可判断集合是否被防火墙调用数值为0代表无规则关联可安全删除。批量清理脚本自动筛选并移除闲置集合# 遍历所有ipset集合清理无引用闲置集合 for name in $(ipset list -n);do ref$(ipset list $name | awk /References:/{print $2}) [ $ref -eq 0 ] ipset destroy $name echo 清理闲置集合: $name done验证集合是否被防火墙引用命令iptables-save | grep --match-set # 无输出说明当前无任何iptables规则调用ipset集合四、配置持久化避免重启失效ipset、iptables 规则均存于内存服务器重启后会全部丢失需配置持久化存储与开机自动加载。导出 ipset 全部集合规则ipset save /etc/ipset.rules配置开机自动恢复集合echo ipset restore /etc/ipset.rules /etc/rc.local chmod x /etc/rc.localiptables 规则同步持久化CentOS 使用service iptables saveDebian/Ubuntu 通过iptables-save写入规则文件。五、落地实践总结性能收益用哈希集合替代成百上千条独立iptables规则大规模IP访问控制场景下显著降低服务器CPU开销运维简化新增/移除可信IP仅操作ipset集合无需反复增删防火墙规则策略维护成本更低日常运维规范定期执行闲置集合清理脚本避免大量无用集合堆积简化防火墙故障排查安全分层设计区分宿主机本机入站、跨主机转发两类流量分别配置独立白名单策略实现精细化访问隔离。