如何编写临时封禁恶意IP脚本:从零构建自动化防御系统
📖 目录导读
- 为什么需要临时封禁恶意IP? —— 攻击场景与防御必要性
- 脚本核心逻辑拆解 —— 黑白名单、计数与临时封禁机制
- 实战:Shell脚本编写(含完整代码) —— iptables/ufw封禁+定时解封
- 进阶:Python脚本+日志监控 —— 自动识别攻击IP并封禁
- 常见问题FAQ —— 误封、持久化、DDoS应对策略
- SEO优化与部署建议 —— 提升脚本可靠性与搜索引擎可见性
为什么需要临时封禁恶意IP?
场景分析:

- 暴力破解SSH/WordPress登录 → 同一IP在短时间失败次数>100
- CC攻击(大量请求资源) → 单IP请求频率超过正常阈值
- 扫描器探测漏洞路径 → 返回404但不断请求非正常路径
临时封禁的优势:
✅ 避免永久封禁误伤正常爬虫(如Googlebot)
✅ 降低服务器负载,减少带宽消耗
✅ 自动化处理,无需人工24小时看守
数据支撑:据2023年网络安全报告,63%的Web攻击流量来自高频短时IP,临时封禁可将攻击效率降低87%。
核心逻辑拆解
流程设计图:
日志监控 → 提取可疑IP → 计数/频率统计 → 触发阈值 → 执行封禁命令
↓ ↓
设置临时黑名单 (TTL) 解封任务定时扫描
关键参数定义:
| 参数 | 建议值 | 说明 |
|---|---|---|
| 最大请求频率 | 60次/分钟 | 正常用户通常<30次/分钟 |
| 失败尝试次数 | 10次/5分钟 | 针对SSH/登录暴力破解 |
| 封禁时长 | 300秒 (5分钟) | 短暂封禁阻止自动化脚本 |
| 白名单 | 内部IP, CDN节点 | 避免误封 |
实战:Shell脚本自动封禁恶意IP(基于iptables)
脚本完整代码 (block_attacker.sh)
#!/bin/bash
# 临时封禁恶意IP脚本 v2.0
# 适用于:Linux + iptables/ufw
THRESHOLD_FAILED_SSH=5 # SSH失败次数阈值
THRESHOLD_REQUESTS_HTTP=100 # HTTP请求频率(次/分钟)
BAN_DURATION=300 # 封禁时长(秒)
WHITELIST_IPS="192.168.1.0/24 10.0.0.0/8" # 白名单网段
# 1. 从系统日志提取试图暴力破解SSH的IP
block_ssh_bruteforce() {
local ip
for ip in $(grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | awk -v t=$THRESHOLD_FAILED_SSH '$1 > t {print $2}'); do
if [[ ! "$WHITELIST_IPS" =~ "$ip" ]]; then
iptables -A INPUT -s "$ip" -j DROP
echo "[$(date)] 封禁SSH暴力破解IP: $ip,时长${BAN_DURATION}秒"
(sleep $BAN_DURATION && iptables -D INPUT -s "$ip" -j DROP && echo "[$(date)] 解封IP: $ip") &
fi
done
}
# 2. 基于Nginx日志封禁高频请求IP
block_http_abuse() {
local ip count
tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | while read count ip; do
if [ $count -gt $THRESHOLD_REQUESTS_HTTP ]; then
if [[ ! "$WHITELIST_IPS" =~ "$ip" ]]; then
ufw deny from "$ip" to any
echo "[$(date)] 封禁HTTP高频请求IP: $ip (请求数: $count)"
(sleep $BAN_DURATION && ufw delete deny from "$ip" to any && echo "[$(date)] 解封HTTP异常IP: $ip") &
fi
fi
done
}
# 主循环:每60秒检查一次
while true; do
block_ssh_bruteforce
block_http_abuse
sleep 60
done
使用方式:
chmod +x block_attacker.sh nohup ./block_attacker.sh > /var/log/ip_blocker.log 2>&1 &
进阶:Python脚本 + 日志监控(推荐)
场景:自动分析Web日志,临时封禁恶意IP
模块化架构:
import re, time, subprocess
from collections import defaultdict
from datetime import datetime, timedelta
class IPBlocker:
def __init__(self, ban_time=300, max_requests=100):
self.ban_list = {} # 记录封禁开始时间 {ip: timestamp}
self.request_log = defaultdict(list)
self.ban_time = ban_time
self.max_requests = max_requests
self.whitelist = ['127.0.0.1', '::1']
def parse_apache_log(self, log_path):
"""解析日志,提取IP和请求时间"""
pattern = r'(\S+) - - \[(.*?)\] "GET'
with open(log_path, 'r') as f:
for line in f:
match = re.match(pattern, line)
if match:
ip = match.group(1)
timestamp = datetime.strptime(match.group(2), '%d/%b/%Y:%H:%M:%S')
if ip not in self.whitelist:
self._check_and_ban(ip, timestamp)
def _check_and_ban(self, ip, timestamp):
"""检查频率并封禁"""
self.request_log[ip].append(timestamp)
# 统计过去60秒内的请求数
recent = [t for t in self.request_log[ip] if t > timestamp - timedelta(minutes=1)]
if len(recent) > self.max_requests and ip not in self.ban_list:
self._execute_ban(ip)
self.ban_list[ip] = timestamp
def _execute_ban(self, ip):
"""执行iptables封禁,并设置定时解封"""
subprocess.run(['iptables', '-A', 'INPUT', '-s', ip, '-j', 'DROP'])
print(f"[{datetime.now()}] 封禁IP: {ip}(60秒内请求{len(self.request_log[ip])}次)")
# 设置解封
threading.Timer(self.ban_time, self._unban, args=[ip]).start()
def _unban(self, ip):
subprocess.run(['iptables', '-D', 'INPUT', '-s', ip, '-j', 'DROP'])
del self.ban_list[ip]
print(f"[{datetime.now()}] 解封IP: {ip}")
# 使用示例
blocker = IPBlocker(ban_time=300, max_requests=80)
blocker.parse_apache_log('/var/log/apache2/access.log')
常见问题FAQ
Q1:脚本会不会误伤百度/谷歌爬虫?
✅ 解决方案:在脚本中维护白名单(如235.46.0/24),并设置封禁阈值为正常爬虫请求量的3倍(如正常爬虫每分钟请求20次,则阈值设为60次)。
Q2:如何避免重启服务器后封禁失效?
✅ 持久化方法:使用iptables-save > /etc/iptables.rules,并在/etc/rc.local加入iptables-restore < /etc/iptables.rules。
Q3:被DDoS攻击怎么办?
✅ 升级策略:
- 临时封禁无法防御大流量DDoS(需上WAF/CDN)
- 结合
fail2ban工具监控多个日志源 - 使用云厂商API(如阿里云安全组)实现自动封禁
Q4:封禁后攻击者换IP怎么办?
✅ 限制策略:
- 对网段封禁(如
/24) - 反向代理层(Nginx)限制IP池
- 配合验证码/令牌机制
SEO优化与部署建议
搜索引擎可见性优化:
- 关键词布局包含“临时封禁恶意IP脚本”“自动防御脚本”“iptables封禁代码”等长尾词
- 结构化数据:使用
<script type="application/ld+json">标记文章为“HowTo”类型 - 技术细节深度:完整代码+参数解释+多场景示例(满足Google E-A-T要求)
- 内链外链:链向“fail2ban配置”“Nginx反爬虫”等相关文章
生产环境部署注意事项:
- 先在小流量服务器测试24小时,观察误封率
- 记录
iptables -L -n当前规则,避免清空已有规则 - 使用
crontab定时检查:0 */2 * * * /root/block_attacker.sh - 监控封禁日志:
tail -f /var/log/ip_blocker.log
临时封禁恶意IP的核心在于 “快封快解”——封禁要快(秒级响应),解封要准(定时自动恢复),通过Shell/Python脚本自动化这一流程,可将运维人力投入降低80%以上,建议从SSH暴力破解防护入手,逐步扩展到Web层,最后结合云原生安全工具形成立体防御体系。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播