服务器屏蔽IP段的核心方法是通过防火墙规则(如iptables)或Web服务器配置(如Nginx的deny指令)实现,具体操作因操作系统和业务场景而异。
屏蔽IP段比逐一屏蔽单个IP更高效,因为攻击者常使用同一网段发动攻击,在服务器运维中,无论是应对恶意扫描、暴力破解,还是限制地区访问,掌握屏蔽IP段的方法都是基本功,国内服务器屏蔽IP段时,尤其需要关注规则性能和精确度,业内专家指出,相当一部分网络攻击源集中在少数几个C段,精准屏蔽能显著提升安全防护效率。
服务器屏蔽IP段的常见场景
屏蔽IP段通常用于应对以下情况:
- 恶意扫描和暴力破解:大量请求来自同一IP段,尝试登录或利用漏洞,据统计相当一部分暴力破解来源集中在少数几个C段。
- 采集器抓取数据:特定IP段持续抓取网站内容,消耗带宽和服务器资源,影响正常访客体验。
- 地域限制:某些业务不希望来自特定地区的用户访问,例如屏蔽境外IP段以降低恶意攻击风险,或限制特定区域的访问权限。
- 防御DDoS:在攻击发生时,临时屏蔽攻击源IP段,缓解服务器压力,为后续策略争取时间。
在具体操作前,建议先分析日志提取攻击IP段,使用IP库(如IPIP.net)确认归属地,避免误封正常用户。
iptables屏蔽IP段
iptables是Linux服务器上最经典的防火墙工具,用于屏蔽IP段非常灵活,性能损耗小,适用于各种生产环境。
基本命令与示例
要屏蔽一个IP段,使用以下命令:
iptables -A INPUT -s 192.168.1.0/24 -j DROP
-A INPUT:追加规则到INPUT链,处理入站流量。-s:指定源IP段,支持CIDR格式,如168.1.0/24代表256个IP。-j DROP:直接丢弃数据包,不留痕迹,也可用-j REJECT返回拒绝信息。
如果需要屏蔽特定端口,例如仅禁止SSH端口(22):
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP
持久化规则
iptables规则默认临时生效,重启后丢失,需要保存规则:
- CentOS/RHEL系列:
service iptables save - Ubuntu/Debian系列:安装
iptables-persistent,然后执行netfilter-persistent save
使用ipset高效管理大量IP段
当需要屏蔽数百个IP段时,iptables规则链会变长,影响性能,推荐使用ipset,将IP段存储在一个集合中,一条iptables规则引用该集合:
ipset create blocklist hash:net ipset add blocklist 10.0.0.0/8 ipset add blocklist 192.168.0.0/16 iptables -A INPUT -m set --match-set blocklist src -j DROP
ipset支持hash:net类型,高效匹配IP段,可通过脚本动态更新集合,实现自动化封禁。
删除与修改规则
查看规则列表:iptables -L -n --line-numbers
删除指定序号规则:iptables -D INPUT 3
删除完整规则:iptables -D INPUT -s 192.168.1.0/24 -j DROP
清除所有规则(谨慎使用):iptables -F
Nginx限制IP段访问
Nginx作为Web服务器,通过deny指令可以快速限制IP段访问,配置简单,适合需要立即生效的场景,特别适合前端Web防护。
基本配置
在server块或location块中添加:
location / {
deny 192.168.1.0/24;
allow all;
}
deny指令优先于allow all,来自该IP段的请求返回403,如果希望对整个站点生效,将deny放在http块或server块中。
处理CDN真实IP
当网站使用CDN时,Nginx收到的是CDN节点IP,需要配置real_ip模块获取真实客户端IP:
set_real_ip_from 10.0.0.0/8; # CDN节点IP段 real_ip_header X-Forwarded-For; real_ip_recursive on;
然后使用deny指令限制真实IP段,确保屏蔽效果准确。
使用include管理IP段列表
如果IP段较多,可以单独创建一个文件(如block_ip.conf),然后在配置中include:
include /etc/nginx/block_ip.conf;
block_ip.conf内容示例:
deny 192.168.1.0/24; deny 10.0.0.0/8;
这样便于集中管理,修改后重载配置即可生效。
使用geo模块实现动态限制
geo模块可以根据IP段映射变量,实现更灵活的访问控制:
geo $blocked {
default 0;
192.168.1.0/24 1;
10.0.0.0/8 1;
}
server {
if ($blocked) {
return 403;
}
}
Windows服务器防火墙屏蔽IP段
Windows Server通过高级安全防火墙提供图形化和命令行两种方式,适合不同习惯的管理员。
图形化操作步骤
- 打开”高级安全Windows防火墙”。
- 新建入站规则,选择”自定义”。
- “程序”选择”所有程序”。
- “协议和端口”保持默认(所有协议)。
- “作用域”→”远程IP地址”中添加要屏蔽的IP段,如
168.1.0/24。 - “操作”选择”阻止连接”。
- “配置文件”全选(域、专用、公用)。
- 命名规则,如”屏蔽IP段_192.168.1.0/24″。
使用PowerShell命令
对于批量操作,PowerShell更高效:
New-NetFirewallRule -DisplayName "Block IP段" -Direction Inbound -Action Block -RemoteAddress 192.168.1.0/24
删除规则:
Remove-NetFirewallRule -DisplayName "Block IP段"
云服务商安全组屏蔽IP段
如果服务器在简米云、酷番云、AWS等平台,使用安全组控制是最简单的方法,无需登录服务器,规则即时生效,且不占用实例资源。
简米云安全组
在ECS控制台,进入安全组,添加入方向规则:
- 授权策略:拒绝
- 协议类型:全部(或按需,如TCP)
- 端口范围:-1/-1(全部端口)
- 授权对象:IP段,如
168.1.0/24 - 优先级:设置为1(最高优先)
酷番云安全组
操作类似,添加入站规则,来源IP段填168.1.0/24,策略拒绝,云安全组规则数量有限制,一般最多100条,建议合理规划,结合API动态管理,对于频繁变化的IP段,可使用云厂商的API编程添加规则,实现自动化运维。
服务器屏蔽IP段后的验证与优化
验证规则生效
- 使用curl从被屏蔽IP请求:
curl -I http://你的服务器IP,预期返回403或连接超时。 - 对于iptables,使用
iptables -L -v查看匹配计数,确认有数据包被丢弃。 - 查看Nginx访问日志,确认来自该IP段的请求返回403;Windows防火墙可在日志中查看阻止记录。
优化建议
- 定期清理规则:长期不用的IP段规则应删除,保持规则列表简洁,避免影响性能。
- 使用自动化工具:如fail2ban可以自动分析日志并创建iptables规则,临时屏蔽攻击IP段,减少人工干预。
- 备份规则:修改前备份当前规则,以免误操作导致无法访问,iptables可用
iptables-save > backup.txt。 - 注意规则顺序:防火墙规则按顺序匹配,确保拒绝规则在允许规则之前生效,否则可能被跳过。
服务器屏蔽IP段常见问题
Q:屏蔽IP段后,是否影响正常访客?
A:如果IP段筛选准确,只屏蔽恶意IP段,正常访客不会受影响,但需注意,有些云服务商的IP段可能被共享,屏蔽可能导致部分正常用户无法访问,建议先观察一段时间,确认IP段是恶意来源后再封禁,在操作前,可以查询IP段归属地,确认不属于常用服务商,降低误伤风险。
Q:如何临时解除屏蔽?
A:iptables可以使用iptables -D INPUT -s 192.168.1.0/24 -j DROP删除规则;Nginx可以注释或删除deny行,然后nginx -s reload重载配置;安全组可以直接删除规则或修改策略,临时解除后,建议记录原因,以便后续排查。
Q:屏蔽IP段对服务器性能有影响吗?
A:防火墙规则和Nginx deny都是基于数据包头部匹配,对性能影响极小,可忽略不计,但规则数量过多时,可能增加处理延迟,建议定期清理规则,保持总数在数百条以内,云安全组规则由云平台硬件处理,对服务器无性能影响,对于大量IP段,推荐使用ipset或云安全组,避免服务器内部规则链过长,这是行业共识认为的最佳实践。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/519444.html



