对于CentOS 7系统管理员而言,屏蔽国外IP访问是减少恶意扫描和攻击的有效手段。本文将详细介绍几种实用的方法,帮助您构建更加安全的服务器环境。
使用iptables配合IP集高效屏蔽
iptables是Linux系统中最经典的防火墙工具,结合ipset使用可以高效屏蔽大量IP段。ipset是iptables的扩展,它允许你创建匹配整个IP地址集合的规则,能显著提升大量IP段的处理效率。首先需要安装必要的工具:
yum install iptables ipset -y
创建并填充国家IP集:
# 创建名为cnip的规则集
ipset -N cnip hash:net
# 下载中国IP段(以中国为例)
wget -P .ww.ipdeny.com/ipblocks/data/countries/cn.zone
# 将IP段添加到cnip规则中
for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done
应用屏蔽规则:
# 屏蔽所有非中国IP的访问
iptables -I INPUT -p tcp -m set ! --match-set cnip src -j DROP
这种方法适合需要精细控制IP访问的场景,缺点是需要定期更新IP列表以确保准确性。
通过Firewalld富规则实现访问控制
Firewalld是CentOS 7的默认防火墙管理工具,提供了更加灵活和强大的管理功能。使用firewalld的富规则(rich-rule)可以直观地实现访问控制.基本配置步骤:
# 启动并启用firewalld
systemctl start firewalld
systemctl enable firewalld
添加富规则屏蔽特定国家IP:
# 屏蔽特定国外IP段
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="国外IP地址/24" drop'
# 重新加载配置
firewall-cmd --reload
查看当前规则:
# 验证规则是否生效
firewall-cmd --list-all-zones
Firewalld的优势在于规则管理更加系统化,配置永久生效且不需要手动保存,适合长期使用。
借助Nginx geo模块实现应用层控制
对于Web服务器,Nginx的geo模块提供了基于IP的地理位置过滤功能,可以在应用层实现访问控制。
配置步骤:
创建Nginx配置文件:
vi /etc/nginx/conf.d/blockips.conf
添加以下内容:
geo $allowed_country {
default no;
CN yes;
# 在此添加其他允许国家的代码
}
server {
listen 80;
server_name your_domain.com;
if ($allowed_country = no) {
return 403;
}
# 其他服务器配置
}
重新加载Nginx:
systemctl reload nginx
此方法的优点是配置简单,无需调整防火墙规则,特别适合专门的Web服务器环境。
使用Cloudflare防火墙简化管理
如果您的网站已经使用Cloudflare作为CDN提供商,可以利用其强大的防火墙功能来屏蔽国外IP访问。
配置步骤:
1. 登录Cloudflare控制面板,进入"防火墙"选项卡
2. 创建新的防火墙规则
3. 设置条件为"国家"不在"允许国家列表"
4. 操作选择"阻止"
5. 保存并启用规则
这种方法完全在Cloudflare云端实现,不消耗服务器资源,并且可以利用Cloudflare的实时IP数据库,准确度较高。
方法对比与注意事项
在选择合适的方案时,需要考虑以下几个因素:
精确度:所有基于GeoIP的方法都存在一定的误差,IP与国家的对应关系并非绝对准确
性能影响:iptables+ipset方案在大量IP段时性能最佳
管理便利性:Firewalld和Cloudflare方案更易于管理和维护
覆盖范围:应用层方案(Nginx)仅对Web服务有效,而网络层方案对所有服务有效
实际部署时,建议结合使用多种方案形成纵深防御。例如,同时使用firewalld进行基础屏蔽和Nginx进行应用层补充,可以提供双重保障。
无论选择哪种方案,都需要建立定期更新机制,尤其是IP地理数据库需要保持最新,以确保屏蔽效果始终有效。同时,在实施任何屏蔽策略前,务必确保不会影响正常的业务访问,建议先在测试环境验证后再部署到生产环境。通过合理配置和实施这些屏蔽策略,您可以显著提升CentOS 7服务器的安全性,减少不必要的网络暴露面,为业务运行提供更加安全可靠的环境。
相关内容
