开发工具

在配置用于屏蔽恶意IP的脚本时,合理设置**阈值(Threshold)和封锁时间(Ban Time)**是关键。以下是详细说明及配置示例:

一、阈值(Threshold)

1. 定义

阈值:指在指定时间窗口内,单个IP的请求次数上限。超过该值则触发封锁。

作用:用于区分正常用户和恶意攻击(如CC攻击、爬虫高频请求)。


2. 设置方法

在脚本中修改 THRESHOLD 变量:

THRESHOLD=100  # 示例:60秒内超过100次请求则触发封锁


3. 典型场景参考


场景
推荐阈值说明
普通企业站50~100 低频访问场景
高并发API接口 200~500 容忍较高请求,需结合业务逻辑
防御暴力破解(如登录页)10~20  敏感操作需严格限制
应对DDoS攻击 500+需配合CDN和流量清洗



4. 调整依据

日志分析:通过历史日志统计正常用户的平均请求频率。

# 查看过去1小时内IP请求量排名(前10)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

业务类型:动态接口(如搜索)比静态页面(如首页)允许更高阈值。



二、封锁时间(Ban Time)

1. 定义

封锁时间:IP被加入防火墙规则后的屏蔽时长(单位:秒)。

作用:平衡安全性和误封风险,避免永久屏蔽可能变化的动态IP。


2. 设置方法

在脚本中修改 BAN_TIME 变量:

BAN_TIME=3600  # 示例:封锁1小时(3600秒)


3. 典型场景参考

场景推荐封锁时间说明
常规爬虫 3600(1小时)短期阻止试探性攻击
持续CC攻击 86400(24小时) 长期阻止已知恶意源
误封可能性高的场景 600~1800 避免影响正常用户(如公共WiFi出口IP)
高频扫描行为7200(2小时)折中方案,兼顾安全与灵活性

4. 调整依据

IP类型:

动态IP(如家庭宽带):封锁时间不宜过长(建议1~2小时)。

静态IP(如服务器):可长期封锁(24小时以上)。

攻击持续性:持续攻击需延长封锁时间。



三、配置示例

1. 防御爬虫的配置

THRESHOLD=80     # 60秒内超过80次请求
BAN_TIME=7200    # 封锁2小时


2. 保护登录接口的配置

THRESHOLD=15     # 60秒内超过15次登录尝试
BAN_TIME=86400   # 封锁24小时


3. 高流量API网关的配置

THRESHOLD=300    # 容忍较高并发
BAN_TIME=600     # 封锁10分钟(应对突发流量)



四、动态调整技巧

1. 分级封锁

根据超阈值的严重程度动态调整封锁时间:

if [ "$request_count" -gt 500 ]; then
    BAN_TIME=86400  # 严重超限:封24小时
elif [ "$request_count" -gt 200 ]; then
    BAN_TIME=7200   # 中等超限:封2小时
else
    BAN_TIME=3600   # 普通超限:封1小时
fi


2. 自动解封

使用 at 命令实现定时解封:

echo "iptables -D INPUT -s $ip -j DROP" | at now + "$BAN_TIME" minutes


3. 白名单机制

在脚本中配置 WHITELIST 避免误封:

WHITELIST=("192.168.1.100" "10.0.0.2")  # 公司IP或可信来源



五、验证与监控

1. 测试阈值触发

# 模拟高频请求(测试IP: 192.168.1.50)
for i in {1..150}; do
    curl -H "X-Forwarded-For: 192.168.1.50" http://example.com
done


2. 查看封锁日志

tail -f /var/log/iptables_blocker/blocked_ips.log


3. 监控iptables规则

iptables -L INPUT -n --line-numbers  # 查看当前屏蔽规则


六、注意事项

避免误封:

排除CDN和反向代理IP(如Cloudflare)。

使用 WHITELIST 保护搜索引擎IP(如Googlebot)。


性能影响:

高频检测(如每秒一次)可能增加服务器负载,建议间隔不低于1分钟。


日志轮转:

定期清理日志文件,防止磁盘占满。

find /var/log/iptables_blocker -name "*.log" -mtime +7 -delete


通过合理设置阈值和封锁时间,您可以有效平衡安全性和可用性。建议初次部署后观察1~2天,根据日志分析结果进一步优化参数。