CentOS服务器在公网环境中运行时,经常会遇到恶意IP发起的暴力破解、端口扫描、DDoS攻击等异常请求,这些请求不仅会消耗服务器带宽和计算资源,还可能带来数据泄露等安全隐患。配置IP黑名单是拦截这类恶意访问的高效手段,可根据服务器使用的防火墙管理工具选择不同的实现方案。

基于iptables配置IP黑名单
iptables是CentOS 6及更早版本默认使用的防火墙工具,也支持在CentOS 7及以上版本中手动安装使用,适合习惯传统防火墙配置逻辑的用户。
单个恶意IP拦截
直接添加拒绝规则即可拦截指定IP的所有访问请求,执行以下命令:
# 拒绝192.168.1.100的所有入站请求 iptables -A INPUT -s 192.168.1.100 -j DROP # 查看当前iptables规则,确认拦截规则已添加 iptables -L INPUT -n --line-numbers
批量导入恶意IP列表
如果有大量恶意IP需要拦截,可以先将IP列表保存到文本文件,再通过脚本批量添加规则:
# 创建恶意IP列表文件,每行一个IP
cat > /root/black_ip.txt << EOF
192.168.1.101
192.168.1.102
10.0.0.50
EOF
# 批量添加拦截规则
while read ip; do
iptables -A INPUT -s $ip -j DROP
done < /root/black_ip.txt
规则持久化保存
iptables规则默认重启后会丢失,需要安装持久化工具保存规则:
# 安装iptables持久化服务 yum install -y iptables-services # 保存当前规则 service iptables save # 设置开机自启 systemctl enable iptables
基于firewalld配置IP黑名单
firewalld是CentOS 7及以上版本默认自带的防火墙管理工具,支持动态更新规则,无需重启服务即可生效,操作更灵活。
添加单个IP到黑名单
firewalld通过富规则实现IP拦截,执行以下命令:
# 拒绝192.168.1.100的所有访问 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop' # 重载规则使配置生效 firewall-cmd --reload # 查看已配置的富规则 firewall-cmd --list-rich-rules
批量添加恶意IP
同样可以通过脚本批量处理IP列表:
# 读取IP列表批量添加规则
while read ip; do
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="$ip" drop"
done < /root/black_ip.txt
# 重载规则
firewall-cmd --reload
基于ipset优化大量IP黑名单
当需要拦截的恶意IP数量超过几百个时,直接使用iptables或firewalld逐条添加规则会导致防火墙性能下降,此时可以结合ipset工具使用哈希集合存储IP列表,大幅提升匹配效率。
创建IP黑名单集合
首先创建存储恶意IP的ipset集合:
# 安装ipset工具 yum install -y ipset # 创建名为black_ip_set的哈希集合,存储ipv4地址 ipset create black_ip_set hash:ip # 向集合中添加恶意IP ipset add black_ip_set 192.168.1.100 ipset add black_ip_set 192.168.1.101 # 查看集合中的IP列表 ipset list black_ip_set
关联防火墙规则
将ipset集合与iptables或firewalld规则关联,实现批量拦截:
与iptables关联
# 添加规则,匹配black_ip_set集合中的IP则拒绝访问 iptables -A INPUT -m set --match-set black_ip_set src -j DROP # 保存iptables规则 service iptables save
与firewalld关联
# 创建firewalld的ipset配置 firewall-cmd --permanent --new-ipset=black_ip_set --type=hash:ip # 向firewalld的ipset中添加IP firewall-cmd --permanent --ipset-add=192.168.1.100 --ipset=black_ip_set # 添加富规则关联ipset firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source ipset="black_ip_set" drop' # 重载规则 firewall-cmd --reload
ipset规则持久化
ipset规则同样需要持久化保存,避免重启后丢失:
# 保存ipset配置到文件 ipset save black_ip_set -f /etc/ipset_black_ip.conf # 设置开机自动加载,编辑/etc/rc.d/rc.local添加以下内容 ipset restore -f /etc/ipset_black_ip.conf # 给rc.local添加执行权限 chmod +x /etc/rc.d/rc.local
黑名单规则验证与排查
配置完成后需要验证规则是否生效,可以通过以下方式排查:
- 使用
iptables -L INPUT -n或firewall-cmd --list-rich-rules查看规则是否已正确添加 - 从被拦截的恶意IP对应的机器尝试访问服务器,确认请求被拒绝
- 查看服务器访问日志,确认对应IP的请求不再出现
- 如果需要临时放行某个IP,可删除对应规则,例如
iptables -D INPUT -s 192.168.1.100 -j DROP
实际运维中还可以结合fail2ban等工具自动识别恶意IP并自动添加到黑名单,进一步提升服务器安全防护的自动化水平。