在CentOS 7系统中,ipset是一个非常强大的工具,用于高效管理IP地址集合,特别适合需要处理大量IP规则的场景,如防火墙规则优化、DDoS防护等,与传统的iptables规则相比,ipset通过将IP地址或端口等信息存储在集合中,显著提升了规则匹配的效率,尤其适用于需要频繁添加、删除或查询大量IP地址的场景。
ipset的安装与基本使用
在CentOS 7中,ipset通常需要手动安装,可以通过以下命令安装:
sudo yum install ipset -y
安装完成后,可以通过ipset --help
查看帮助信息,或使用ipset list
查看当前已定义的集合。
创建ipset集合
创建ipset集合的基本语法为:
sudo ipset create <集合名> <集合类型>
常见的集合类型包括:
hash:ip
:存储IP地址或IP段。hash:net
:存储CIDR格式的网络段。hash:port
:存储端口号。set
:存储任意元素的集合。
创建一个存储IP地址的集合:
sudo ipset create blacklist hash:ip
添加与删除元素
向集合中添加IP地址:
sudo ipset add blacklist 192.168.1.100
删除集合中的元素:
sudo ipset del blacklist 192.168.1.100
保存与加载ipset规则
ipset的规则在重启后会丢失,因此需要手动保存或配置为开机自动加载,保存当前规则:
sudo ipset save > /etc/ipset.conf
加载规则:
sudo ipset restore < /etc/ipset.conf
可以通过以下命令将ipset规则设置为开机自动加载:
echo "ipset restore < /etc/ipset.conf" | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local
ipset与iptables的结合使用
ipset的真正威力在于与iptables的结合,通过iptables规则引用ipset集合,可以实现高效的流量过滤,以下是一些常见应用场景:
封禁IP地址
假设有一个名为blacklist
的ipset集合,可以通过以下iptables规则封禁集合中的所有IP:
sudo iptables -I INPUT -m set --match-set blacklist src -j DROP
--match-set blacklist src
表示匹配源IP地址在blacklist
集合中的数据包。
封禁IP段
使用hash:net
类型存储IP段,
sudo ipset create blocknets hash:net sudo ipset add blocknets 10.0.0.0/24
然后通过iptables规则封禁该网段:
sudo iptables -I INPUT -m set --match-set blocknets src -j DROP
端口访问控制
使用hash:port
类型存储端口,例如限制访问特定端口的IP:
sudo ipset create allowed_ports hash:port sudo ipset add allowed_ports tcp:80 sudo ipset add allowed_ports udp:53
通过iptables规则允许访问这些端口的IP:
sudo iptables -I INPUT -p tcp --dport 80 -m set --match-set allowed_ports dst -j ACCEPT sudo iptables -I INPUT -p udp --dport 53 -m set --match-set allowed_ports dst -j ACCEPT
ipset的高级应用
动态更新集合
结合脚本实现动态更新集合,通过日志分析自动封禁恶意IP:
sudo tail -f /var/log/secure | grep "Failed password" | awk '{print $(NF-3)}' | sort -u | while read ip; do sudo ipset add blacklist $ip done
集合的临时性与持久性
ipset集合默认是临时的,重启后会丢失,可以通过-exist
选项避免重复添加错误:
sudo ipset add blacklist 192.168.1.100 -exist
集合的查看与清空
查看集合中的元素:
sudo ipset list blacklist
清空集合中的所有元素:
sudo ipset flush blacklist
删除整个集合:
sudo ipset destroy blacklist
ipset的性能优势
与直接使用iptables规则相比,ipset在处理大量IP时具有显著优势,以下是两者的性能对比:
场景 | iptables规则数量 | ipset集合大小 | 匹配效率 |
---|---|---|---|
封禁1000个IP | 1000条规则 | 1个集合 | 高 |
封禁100个网段 | 100条规则 | 1个集合 | 高 |
端口访问控制 | 多条规则 | 1个集合 | 高 |
从表中可以看出,ipset通过将大量IP或规则存储在集合中,显著减少了iptables规则的复杂度,从而提升了匹配效率。
常见问题与解决方案
ipset集合无法被iptables规则匹配
问题:添加了ipset集合并配置了iptables规则,但规则未生效。
解决方案:
- 检查ipset集合是否为空:
sudo ipset list <集合名>
。 - 确认iptables规则语法正确,特别是
--match-set
参数的拼写。 - 确保iptables模块已加载:
sudo modprobe ip_set_hash_ip
。
重启后ipset规则丢失
问题:重启CentOS 7后,ipset集合未恢复。
解决方案:
- 确保已保存规则:
sudo ipset save > /etc/ipset.conf
。 - 检查
/etc/rc.local
文件是否包含加载规则的命令,并赋予执行权限。 - 对于systemd系统,可通过创建
ipset.service
实现开机自动加载。
FAQs
Q1: 如何在CentOS 7中查看ipset集合的详细信息?
A1: 使用sudo ipset list <集合名>
命令可以查看指定集合的详细信息,包括集合类型、元素数量和具体元素,若需查看所有集合,可使用sudo ipset list
。
Q2: ipset是否支持IPv6地址?
A2: 是的,ipset支持IPv6,创建集合时需指定hash:ip family inet6
类型,
sudo ipset create ipv6_blacklist hash:ip family inet6
然后通过iptables的-6
参数或直接配置ip6tables规则进行匹配。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复