首页/安全/应急响应速查/攻击来源 IP 聚合与封禁决策

攻击来源 IP 聚合与封禁决策

把失败来源按 IP 汇总后再决定封禁;注意 NAT 与云出口场景,封 IP 前先评估误伤与共享出口风险。

应急响应速查安全更新于 2026-10-13

为什么要先聚合来源 IP

面对大批失败登录,先按来源 IP 聚合再看分布:计数排名能区分「单点暴力」与「分布式扫描」,也直接决定封禁策略是否有效。但要记住封 IP 只是止血——尤其要警惕 NAT 与云出口,封掉一个地址可能误伤整个网点的正常用户。

基本信息

统计手段grep + awk + sort | uniq -c 计数
常见日志/var/log/auth.log(Debian 系)、/var/log/secure(RHEL 系)
封禁手段fail2ban、firewalld rich rule、iptables、ufw、Nginx deny、上游 WAF
误伤风险NAT 出口、云厂商共享地址、企业代理由此封禁易误伤
根治方向禁用口令认证、仅允许密钥、限制来源网段
IPv6必须一并统计与处置,日志里两类地址同时存在

典型使用场景

  • 失败登录量激增时判断是单点爆破还是分布式扫描
  • 决定封禁名单与封禁粒度:封单个地址还是整个网段
  • 评估现有 fail2ban 等自动封禁机制是否真的生效
  • 长期巡检中识别持续尝试的固定来源
  • 与业务正常来源比对,避免把合作方地址封掉
  • 整理成 IoC 清单交给边界设备统一拦截

聚合来源并查看现有封禁

聚合来源并查看现有封禁
grep -h 'Failed password' /var/log/auth.log* | grep -oE 'from [^ ]+' | awk '{print $2}' | sort | uniq -c | sort -rn | head -n 20
sudo fail2ban-client status sshd 2>/dev/null                    # 自动封禁状态与名单
sudo firewall-cmd --list-rich-rules 2>/dev/null | grep -i drop  # 现有 rich rule
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=203.0.113.0/24 drop'
sudo firewall-cmd --reload                                       # 使规则生效
grep -h 'Failed password' /var/log/auth.log* | grep -c ':'      # 粗看 IPv6 来源占比

聚合结果读法

维度含义判读要点
计数该来源的失败次数数百以上即为自动化爆破
来源 IP尝试来源地址集中在少数地址是单点,离散则是分布式
尝试账号被猜解的账号名root、admin 等通用名说明是字典爆破
时间分布尝试发生的时刻全天持续说明脚本化运行
目标服务被攻击的端口22 最常见,也可能指向 3389 等
分布式爆破里每个 IP 的计数都不高,很容易被阈值型告警漏掉:此时改看账号维度的失败总量,以及有没有出现成功登录。
封禁前先确认不是合作方、监控探针或 NAT 出口:误封共享出口会影响整片区域访问。处置顺序应为先限制来源网段,再逐条封禁。

易错点

  • 直接封大段网段:误伤面巨大,而且并没有解决认证本身的问题
  • 漏掉 IPv6:日志里同时存在 IPv6 来源,必须一并统计与处置
  • 只看失败不看成功:一旦爆破成功,失败统计的价值就大幅下降
  • 把自动封禁当终点:fail2ban 只能拖时间,根本措施是禁用口令认证

数据来源与参考

  • fail2ban 官方文档:jail 与封禁机制
  • OpenSSH 加固:禁用密码认证

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌