每天都有大量服务器暴露在公网,遭受 SSH 暴力破解、Web 目录探测、RDP 扫描等自动化攻击。即使你改了默认端口、禁用了 root 登录,攻击者仍会持续尝试。手动封 IP 效率低下,且容易遗漏。
本文介绍一套轻量、可自动化、低成本的恶意 IP 封禁方案,适合资源有限的中小企业。
一、识别恶意行为:从系统日志入手
1. SSH 暴力破解
查看 /var/log/auth.log(Ubuntu/Debian)或 /var/log/secure(CentOS):
# 查找失败登录超过 5 次的 IP
awk '/Failed password/ {ip[$11]++} END {for (i in ip) if (ip[i] > 5) print i}' /var/log/auth.log
2. Web 扫描行为
从 Nginx 日志识别高频 404 请求:
# 单 IP 1 小时内 404 超过 20 次
awk -v t=$(date -d '1 hour ago' +"%d/%b/%Y:%H") '$4 > "["t && $9 == 404 {bad[$1]++} END {for (i in bad) if (bad[i] > 20) print i}' /var/log/nginx/access.log
二、自动化封禁:用 iptables + 定时任务
将可疑 IP 自动加入防火墙规则:
#!/bin/bash
# block_malicious.sh
LOG_FILE="/var/log/nginx/access.log"
BLOCK_FILE="/tmp/malicious_ips.txt"
# 提取恶意 IP
awk '$9 == 404 {bad[$1]++} END {for (i in bad) if (bad[i] > 30) print i}' $LOG_FILE > $BLOCK_FILE
# 封禁 IP(跳过已封的)
while read ip; do
if ! iptables -C INPUT -s "$ip" -j DROP 2>/dev/null; then
iptables -A INPUT -s "$ip" -j DROP
echo "$(date): Blocked $ip" >> /var/log/block.log
fi
done < $BLOCK_FILE
设置 cron 每 10 分钟执行一次:
*/10 * * * * /root/block_malicious.sh
⚠️ 注意:iptables 规则重启后会丢失,建议配合
iptables-persistent保存。
三、局限性:自动化脚本的短板
- 无法应对分布式扫描(每个 IP 只试几次)
- 误封风险(如 CDN 回源 IP 被误判)
- 无全局情报(不知道某个 IP 是否在攻击其他客户)
此时,云防护服务的优势就体现出来了。
四、生产级方案:联动云防护实现智能封禁
我们在客户环境中采用 群联AI云防护 + 高防IP 组合:
- 高防IP:在攻击流量到达服务器前清洗 DDoS
- AI云防护:
- 实时分析请求行为,识别扫描、爆破、爬虫
- 共享威胁情报库,自动封禁全网已知恶意 IP
- 支持自定义封禁策略(如“1 分钟内 5 次 404”即拦截)
部署后,客户服务器收到的恶意请求下降 98%,运维不再需要半夜处理告警。
五、总结
- 自动化脚本适合应对低强度、集中式攻击
- 面对分布式、智能化攻击,建议结合云防护
- 关键是:让防护从“被动响应”变为“主动拦截”
如果你也在处理服务器扫描问题,欢迎加入我们的技术交流群,群里有不少运维和安全朋友,经常讨论怎么用低成本方案做好防护,也欢迎分享你的自动化脚本!
2927

被折叠的 条评论
为什么被折叠?



