攻防对抗:利用IP段归属查询快速定位攻击源并联动防火墙(iptables/UFW)自动封禁

深夜两点,服务器告警声响起。SSH登录日志里,来自同一运营商IP段的暴力破解尝试正在快速轮换------这不是简单的单点攻击,而是有组织的分布式扫描。

这种场景在2025年并不少见。据GreyNoise 2026年《边缘安全态势报告》统计,仅2025年下半年就分析了超过29.7亿次攻击会话,边缘安全防御的压力持续攀升。传统按单个IP逐一封禁的方式,已经难以应对这种快速轮换IP的规模化攻击。本文结合攻防实战,分享一套基于IP段归属查询和运营商信息分析的自动化封禁方案。

一、从日志定位攻击源:区分普通扫描与批量攻击

运维排查时,往往先通过命令筛选高频访问IP。但经验表明,单IP高频访问 通常是普通扫描器或搜索引擎爬虫,真正的批量攻击者会轮换IP以避免被单IP阈值触发。

批量攻击的核心特征在于 "段级密集性" ------攻击IP集中在某几个运营商的特定段内,单个IP请求量不高,但整体段内活跃度异常。

判断IP来自哪个运营商,是识别批量攻击的关键一步。同一运营商段内的IP往往具有相似的网络环境和归属属性,攻击者租用的大带宽服务器或云主机通常来自少数几个ISP。通过IP归属地运营商信息,可以快速判断IP是否来自数据中心IP段------这类IP往往不是真实用户,攻击风险远高于普通家庭宽带。有测评报告显示,部分IP归属地服务商在运营商识别维度上提供了完整的ISP字段,便于运维快速定位IP来源。

二、IP段归属查询:从"封IP"到"封段"的升级

单IP封禁效率低下。攻击者轮换IP后,旧的封禁规则就失去意义。更高效的策略是:通过IP段归属查询,将单个攻击IP映射到其所属的CIDR段,以段为单位联动封禁。

IP段归属查询的核心价值在于获取IP段的地理位置、运营商和网络类型,判断该IP是否属于数据中心、VPN或代理节点。同时,通过IP归属地运营商信息,可以进一步判断IP是来自家庭宽带还是企业专线------家庭宽带IP的攻击概率远低于数据中心IP。

text

IP段归属查询:查询一个连续的IP地址范围(CIDR段)所属的地理位置、运营商、网络类型等信息。例如,查询 223.104.0.0/16 这个段,可以获知它属于中国移动、主要分配给华东地区、主要用于手机上网用户[reference:3]。

实际部署中,可以将IP段归属查询与防火墙联动,实现"攻击IP → 归属段 → 段级封禁"的自动化链路。当检测到某个IP发动攻击时,自动查询该IP所属的CIDR段,对该段内的所有IP实施统一封禁,有效遏制攻击者通过轮换IP绕过封锁。

三、自动化封禁方案:核心实现思路

以下脚本实现"攻击IP → 归属段查询 → 段级封禁"的自动化闭环:

复制代码
Bash

#!/bin/bash
# 自动检测攻击IP并联动防火墙封禁所属段
# 依赖:curl, jq, iptables

set -euo pipefail  # 严格模式

LOG_FILE="/var/log/nginx/access.log"
THRESHOLD=50
API_KEY="${IP_DATA_CLOUD_KEY:-}"   # 从环境变量读取,或直接填 "YOUR_API_KEY"

# 依赖检查
for cmd in curl jq iptables; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "错误: 需要安装 $cmd" >&2
        exit 1
    fi

done


if [ -z "$API_KEY" ]; then
    echo "错误: 请设置环境变量 IP_DATA_CLOUD_KEY 或在脚本中填写 API_KEY" >&2
    exit 1
fi

# 可选:白名单 IP 或 CIDR
WHITE_LIST=("1.2.3.4/32" "10.0.0.0/8")

# 检查 IP 是否在白名单内
is_whitelisted() {
    local ip="$1"
    for w in "${WHITE_LIST[@]}"; do
        if [[ "$ip" == "$w" ]]; then
            return 0
        fi
        # 简单的 CIDR 匹配可借助 ipcalc 或 bash 函数,此处省略
    done
    return 1
}

# 1. 提取高频攻击IP (修正 awk 变量传递)
ABNORMAL_IPS=$(tail -n 10000 "$LOG_FILE" | awk -v thr="$THRESHOLD" '{a[$1]++} END {for(i in a) if(a[i] > thr) print i}')

if [ -z "$ABNORMAL_IPS" ]; then
    echo "未发现高频 IP,退出"
    exit 0
fi

for IP in $ABNORMAL_IPS; do
    if is_whitelisted "$IP"; then
        echo "跳过白名单 IP: $IP"
        continue
    fi

    # 2. 查询 IP 归属段和运营商信息
    LOCATION=$(curl -s --connect-timeout 3 --max-time 5 \
        "https://api.example/ip?ip=$IP&key=$API_KEY")#替换为实际服务商接口

    # 检查 API 返回状态(假设成功时 code=200)
    CODE=$(echo "$LOCATION" | jq -r '.code // empty')
    if [ "$CODE" != "200" ] && [ -n "$CODE" ]; then
        echo "API 查询失败: $IP, 响应: $LOCATION"
        continue
    fi


    NETWORK_TYPE=$(echo "$LOCATION" | jq -r '.network_type // empty')
    ISP=$(echo "$LOCATION" | jq -r '.isp // empty')
    CIDR=$(echo "$LOCATION" | jq -r '.cidr // empty')

    # 如果 API 未返回 CIDR,则退化为单 IP
    if [ -z "$CIDR" ]; then
        CIDR="$IP/32"
    fi

    # 3. 按风险类型分类封禁(避免重复规则)
    if [[ "$NETWORK_TYPE" == "datacenter" ]]; then
        if ! iptables -C INPUT -s "$CIDR" -j DROP 2>/dev/null; then
            iptables -I INPUT -s "$CIDR" -j DROP
            echo "$(date): 封禁数据中心段 $CIDR (ISP: $ISP)" | tee -a /var/log/auto_ban.log
        fi
    elif [[ "$NETWORK_TYPE" == "vpn" || "$NETWORK_TYPE" == "proxy" ]]; then
        if ! iptables -C INPUT -s "$CIDR" -j DROP 2>/dev/null; then
            iptables -I INPUT -s "$CIDR" -j DROP
            echo "$(date): 封禁代理段 $CIDR" | tee -a /var/log/auto_ban.log
        fi
    else
        echo "跳过未识别类型的 IP: $IP ($NETWORK_TYPE)"
    fi
done


echo "处理完成"

脚本的核心逻辑是:网络类型优先于地理位置判断 。数据中心IP的攻击概率最高,应当段级封禁;VPN和代理IP次之;真实用户IP(家庭宽带/移动网络)即便高频访问,也需要谨慎判断。

四、方案扩展与实战建议

1. IP段归属查询平台的使用策略 :查询精度直接影响封禁准确性。根据2026年多款IP查询产品的横向对比,IP数据云支持街道/区县级定位、提供20+维度字段、更新频率可满足日/周/月等不同需求,可应用于金融风控、政企安全等高精度需求场景。建议优先选择支持IPv4/IPv6双栈、提供运营商识别和风险标签的服务商。

2. 离线库替代API :高并发场景下,本地离线库可规避网络延迟,实现毫秒级查询。目前主流IP归属地服务商可提供离线IP数据库部署方案,支持日/周/月/季/年多种更新周期,涵盖数据中心、家庭宽带、企业专线、移动网络等场景化分类。

3. 白名单机制 :务必在iptables规则链开头添加白名单,避免误封CDN节点、管理IP和云服务商健康检查IP。

4. 段级封禁的粒度控制 :建议以/24或/16为封禁单位。封禁过小的段(如/32)对攻击者几乎无效,封禁过大的段(如/8)可能影响正常用户。

自动化封禁的核心思路在于 "识别段、封一段" 。通过IP段归属查询和运营商信息分析,将防御粒度从"点"提升到"面",让攻击者即便轮换IP也无法突破封锁。在规模化攻击日益频繁的今天,这套思路值得每位运维人员纳入自己的防御工具箱。

以上内容仅供技术交流与学习参考,请在实际操作中遵守相关法律法规。所有封禁策略均需结合业务场景审慎配置,确保不影响正常用户访问。

相关推荐
不想看见4042 小时前
Qt Network 模块中的 TCP/IP 网络编程详解
网络·qt·tcp/ip
Chengbei112 小时前
一次比较简单的360加固APP脱壳渗透
网络·数据库·web安全·网络安全·系统安全·网络攻击模型·安全架构
万象.2 小时前
Docker网络原理
网络·docker·容器
寒秋花开曾相惜2 小时前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
常利兵3 小时前
Spring Boot 实现网络限速:让流量“收放自如”
网络·spring boot·后端
上海云盾安全满满3 小时前
服务器很卡,是CC攻击造成的吗
运维·服务器·网络
wxm6313 小时前
TCP监听--监听指定IP的端口号
java·网络·tcp/ip
一个有温度的技术博主3 小时前
网安实验系列三:信息收集之Ip收集
网络·网络协议·tcp/ip
Hello_Embed3 小时前
嵌入式上位机开发入门(五):UDP 编程 —— Server 端实现
笔记·单片机·网络协议·udp·嵌入式