上一篇
服务器禁止ip段访问
- 云服务器
- 2025-08-04
- 8
器通过配置安全策略,将特定 IP段加入黑名单,实现对该网段 访问请求的拦截与禁止
为何需要设置服务器禁止IP段访问?
在网络安全管理中,限制特定IP地址或网段的访问是常见需求,主要出于以下目的:
- 防御恶意攻破(如分布、暴力免费);
- 合规性要求(屏蔽非法地区或未授权用户);
- 资源保护(避免爬虫占用带宽);
- 内部策略管控(隔离测试环境与生产环境)。
通过配置防火墙规则或Web应用防护系统(WAF),可精准阻断风险流量。

主流服务器系统的实现方法对比
| 操作系统/软件 | 配置方式 | 示例命令/路径 | 生效时机 |
|---|---|---|---|
| Linux(iptables) | 添加DROP规则至INPUT链 | iptables -A INPUT -s 192.168.1.0/24 -j DROP | 立即生效 |
| Windows防火墙 | 通过图形界面创建“阻止规则”,选择“自定义IP范围” | 控制面板 > Windows Defender防火墙 → 高级设置 | 保存后自动应用 |
| Nginx反向代理 | 在server块中使用deny指令 | allow all; deny 10.0.0.0/8; | 重启服务使配置生效 |
| 云服务商安全组 | 登录控制台手动添加黑名单CIDR区块 | 阿里云/西西安全等的安全组管理页面 | 实时同步到底层设备 |
️ 注意:修改前务必备份原始配置!建议先在测试环境验证效果。
操作步骤详解(以Linux+iptables为例)
查看现有规则集
sudo iptables -L -nv --line-numbers
记录当前编号便于后续插入新规则时定位位置。
添加拒绝策略
# 格式:协议目标 + 源地址范围 + 动作类型 sudo iptables -I INPUT <位置序号> -p tcp --dport <端口号> -s <被禁网段CIDR> -j DROP
例:禁止整个私有网络A类地址访问SSH端口

sudo iptables -I INPUT 1 -p tcp --dport 22 -s 10.0.0.0/8 -j DROP
保存持久化配置
不同发行版差异较大:
| CentOS/RHEL | service iptables save |
| Ubuntu/Debian | iptables-persistent save |
| Alpine Linux | 需手动导出至/etc/iptables.conf文件 |
验证有效性
使用工具模拟攻破测试:

curl -v telnet://目标服务器IP:被禁端口 --connect-timeout 5
若返回”Connection refused”则表示成功拦截。
常见问题排查指南
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 规则未生效 | 顺序错误(靠后的规则优先匹配) | 调整规则插入位置(用-I代替-A) |
| 误杀合法请求 | CIDR掩码过短导致覆盖正常用户 | 缩小子网掩码精度(如改用/24替代/16) |
| 性能下降明显 | 大量细碎规则影响匹配效率 | 合并相邻网段为汇总路由 |
| 日志无记录 | 未开启审计功能 | 启用LOG目标并指定syslog设施 |
相关问题与解答
Q1: 如果我只想临时禁用某个IP段几个小时怎么办?
A: 可采用两种方案:
- 方案一(推荐):使用iptables -m time模块设置定时失效规则, sudo iptables -A INPUT -s 恶意网段CIDR -m time --timestart "202X-MM-DD hh:mm" --timeout 3600 -j DROP
- 方案二:通过crontab定时任务自动删除该规则,到期后由系统自动清理。
Q2: 如何批量导入多个需要禁止的IP列表?
A: 推荐使用文本文件配合脚本自动化处理:
- 准备CSV格式文件blacklist.csv,每行包含一个CIDR块;
- 编写Shell脚本循环读取并执行添加操作: while read line; do sudo iptables -A INPUT -s "$line" -j DROP done < blacklist.csv
- 高级玩法:结合Ansible Play