
# 自动导入基于威胁情报源的IP黑名单
#### 应用场景
在企业网络安全防护中，及时阻断来自已知恶意源、僵尸网络、攻击者的IP访问是构建纵深防御体系的重要环节。传统的人工维护IP黑名单方式存在以下痛点：
- 威胁情报更新频繁，人工维护成本高且易遗漏；
- 开源威胁情报源分散，难以统一管理和导入；
- 海量IP数据手动导入防火墙处理速度较慢；
- 缺乏自动化机制，无法实现实时或周期性防护更新。
云防火墙提供了一键式流量封堵功能，您只需将恶意IP地址整理后上传至防火墙，则可实现对所有恶意访问的拦截，显著提升拦截效率。
本文介绍如何通过调用云防火墙的"导入IP黑名单用于流量过滤"API接口导入IP黑名单，实现从威胁情报源自动获取恶意IP并批量导入云防火墙黑名单的场景化方案，帮助企业快速建立自动化的IP黑名单防护能力。
#### 方案优势
- 自动化程度高：可结合定时任务触发，无需人工干预即可定期更新黑名单。
- 支持多情报源：可同时配置多个威胁情报URL，综合多个来源的IP数据。
- 高效批量处理：流式逐行读取大文件，按批次导入，避免内存溢出和API超时。
- 智能去重：全局去重机制，避免重复导入相同IP。
- 灵活部署：代码可运行于任意支持Python的环境，如云服务器、容器或函数计算。
 
#### 系统影响
- 将IP地址添加到流量封堵列表后，访问该IP地址的流量以及从该IP地址发起的访问流量都将被直接拦截。
- 配置流量封堵的IP地址时，如果涉及地址转换或者存在代理的场景，需要谨慎评估拦截IP的影响。
 
#### 约束与限制
基础版不支持使用流量封堵功能。
#### 前提条件
- 已获取威胁情报IP列表的下载URL（可使用开源或商业情报源），并获取最新恶意IP列表。
- 使用IAM用户操作时，已授予该IAM用户CFW FullAccess权限，详细操作请参见[通过IAM授予使用CFW的权限](https://support.huaweicloud.com/usermanual-cfw/cfw_01_0049.html)。
 
#### 场景一：自动从开源威胁情报源导入IP黑名单
定期从威胁情报源（如Spamhaus、AbuseIPDB、USOM等）获取最新恶意IP列表，通过云防火墙API自动导入IP黑名单到流量封堵对象中，实现对已知恶意源的自动拦截。
#### 操作步骤
1. 已购买云防火墙，防火墙实例处于开启状态，且已开启流量封堵功能。
   1. 参见[购买云防火墙](https://support.huaweicloud.com/usermanual-cfw/cfw_01_0008.html)选购标准版或专业版防火墙。
   
   2. 开启流量封堵。
      1. 在左侧导航栏中，选择"防护策略 \> 访问控制 \> 流量过滤"，进入流量封堵页面。
      
      2. 单击![](https://support.huaweicloud.com/bestpractice-cfw/zh-cn_image_0000002579733506.png)按钮，并在弹出的确认框中，单击"确定"，开启流量封堵功能。
       
    
2. 获取必要的认证和参数信息。
   - 访问密钥（AK/SK）：获取方式请参见[获取AK/SK](https://support.huaweicloud.com/iam_faq/iam_01_0618.html)。
   
   - 项目ID（PROJECT_ID）：
     1. 登录[华为云控制台](https://console.huaweicloud.com/)，鼠标移动至右上方的用户名，在下拉列表中选择"我的凭证"。
     
     2. 在"API凭证"页面的"项目列表"中，获取"项目ID"。
      
   
   - 防火墙实例ID（FW_INSTANCE_ID）：
     1. [登录云防火墙控制台](https://console.huaweicloud.com/cfw/?locale=zh-cn)。
     
     2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-cfw/zh-cn_image_0000002351970641.png "点击放大")，选择区域。
     
     3. （可选）切换防火墙实例：如果有多个防火墙实例，可以在页面左上角的下拉框中进行切换。
     
     4. 在"总览"页面中，单击右上角的"防火墙列表"，并在弹出的防火墙列表页面中获取目标防火墙实例的实例ID。
      
    
3. 使用[自动导入基于威胁情报源的IP黑名单](https://support.huaweicloud.com/api-cfw/ImportIpBlacklist.html)接口，批量导入IP黑名单。
   调用代码示例如下：
   ```
   # 依赖安装: pip install requests huaweicloudsdkcfw huaweicloudsdkcore
   import requests
   import re
   # 配置参数（AK/SK等信息建议通过环境变量读取）
   AK = "your-access-key"
   SK = "your-secret-key"
   PROJECT_ID = "your-project-id"
   FW_INSTANCE_ID = "your-fw-id"
   REGION = "cn-south-1"
   EFFECT_SCOPE = [1]              # 生效范围：[1]互联网边界, [2]VPC边界
   URL = "https://{your-threat-source}/blacklist.txt"   # 威胁情报URL
   BATCH_SIZE = 2000               # 每批导入的IP数量
   # 初始化认证和客户端
   credentials = BasicCredentials(AK, SK, PROJECT_ID)
   client = CfwClient.new_builder() \
       .with_credentials(credentials) \
       .with_region(CfwRegion.value_of(REGION)) \
       .build()
   def import_ip_batch(client, fw_instance_id, ip_set, effect_scope, add_type=0):
       """批量导入IP到CFW黑名单"""
       if not ip_set:
           return 0
       ip_list_str = "\n".join(ip_set)
       request = ImportIpBlacklistRequest()
       request.fw_instance_id = fw_instance_id
       body = ImportIpBlacklistRequestBody()
       body.add_type = add_type  # 0=增量导入, 1=全量覆盖
       body.ip_blacklist = ip_list_str
       body.effect_scope = effect_scope  # [1]互联网边界, [2]VPC边界, [1,2]同时生效
       request.body = body
       try:
           response = client.import_ip_blacklist(request)
           return len(ip_set)
       except exceptions.ClientRequestException as e:
           print(f"Error: status={e.status_code}, msg={e.error_msg}")
           return 0
   # 下载并提取IP
   batch_ips = set()
   all_unique_ips = set()
   IP_PATTERN = re.compile(
       r'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}'
       r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:/(?:[12]?[0-9]|3[0-2]))?\b'
   )
   with requests.get(URL, timeout=60, stream=True) as response:
       response.raise_for_status()
       for line in response.iter_lines(decode_unicode=True):
           if not line:
               continue
           line = line.strip().lstrip('#')
           if not line:
               continue
           for ip in IP_PATTERN.findall(line):
               if ip not in all_unique_ips:
                   all_unique_ips.add(ip)
                   batch_ips.add(ip)
           if len(batch_ips) >= BATCH_SIZE:
               import_ip_batch(client, FW_INSTANCE_ID, batch_ips, EFFECT_SCOPE)
               batch_ips.clear()
   # 处理剩余IP
   if batch_ips:
       import_ip_batch(client, FW_INSTANCE_ID, batch_ips, EFFECT_SCOPE)
   print(f"Total imported: {len(all_unique_ips)} unique IPs")
   ```
   
 
#### 操作验证
1. 确认执行输出中导入的IP数量符合预期。
2. 检查新增的IP黑名单条目是否添加成功。
   1. [登录云防火墙控制台](https://console.huaweicloud.com/cfw/?locale=zh-cn)。
   
   2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-cfw/zh-cn_image_0000002351970641.png "点击放大")，选择区域。
   
   3. （可选）切换防火墙实例：如果有多个防火墙实例，可以在页面左上角的下拉框中进行切换。
   
   4. 在左侧导航栏中，选择"防护策略 \> 访问控制 \> 流量过滤"，进入流量封堵页面。
   
   5. 检查新增的黑名单信息是否添加成功。
    
 
#### 场景二：通过API调用查询和管理黑名单
除导入黑名单外，还可通过云防火墙API实现流量封堵对象中的IP黑名单的查询、删除等管理操作。
#### API查询示例
以下示例展示如何调用云防火墙API查询当前IP黑名单列表：
```
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcfw.v1.region.cfw_region import CfwRegion
from huaweicloudsdkcfw.v1 import *
from huaweicloudsdkcfw.v1.model import *
# 初始化认证和客户端
credentials = BasicCredentials(AK, SK, PROJECT_ID)
client = CfwClient.new_builder() \
    .with_credentials(credentials) \
    .with_region(CfwRegion.value_of(REGION)) \
    .build()
# 查询IP黑名单列表
request = ListIpBlacklistRequest()
request.fw_instance_id = FW_INSTANCE_ID
request.offset = 0
request.limit = 100
try:
    response = client.list_ip_blacklist(request)
    print(f"Total blacklisted IPs: {response.data.total}")
    for item in response.data.records:
        print(f"  IP: {item.ip}, Type: {item.type}, Created: {item.create_time}")
except Exception as e:
    print(f"Query failed: {str(e)}")
```
#### API调用关键接口说明
表1API调用关键接口说明 
| 接口名称              | 功能描述      | 请求方法   |
|:---|:---|:---|
| ImportIpBlacklist | 批量导入IP黑名单 | POST   |
| ListIpBlacklist   | 查询IP黑名单列表 | GET    |
| DeleteIpBlacklist | 删除IP黑名单条目 | DELETE |
   
#### 相关文档
- [导入IP黑名单用于流量过滤](https://support.huaweicloud.com/api-cfw/ImportIpBlacklist.html)
- [获取导入的IP黑名单列表信息](https://support.huaweicloud.com/api-cfw/ListIpBlacklist.html)
- [删除已经导入的IP黑名单](https://support.huaweicloud.com/api-cfw/DeleteIpBlacklist.html)
 
