centos7 ipset怎么用?配置黑名单白名单的详细步骤是什么?

在CentOS 7系统中,ipset是一个非常强大的工具,用于高效管理IP地址集合,特别适合需要处理大量IP规则的场景,如防火墙规则优化、DDoS防护等,与传统的iptables规则相比,ipset通过将IP地址或端口等信息存储在集合中,显著提升了规则匹配的效率,尤其适用于需要频繁添加、删除或查询大量IP地址的场景。

centos7 ipset怎么用?配置黑名单白名单的详细步骤是什么?

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规则设置为开机自动加载:

centos7 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

集合的查看与清空

查看集合中的元素:

centos7 ipset怎么用?配置黑名单白名单的详细步骤是什么?

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规则进行匹配。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-01 07:39
下一篇 2024-08-02 20:47

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信