首页 / 文章 / 行业洞察

等保2.0三级系统建设完全指南

引言

《网络安全法》第21条明确规定:国家实行网络安全等级保护制度。等保2.0(GB/T 22239-2019)于2019年12月1日正式实施,将云计算、移动互联、物联网、工业控制和工控系统纳入保护对象。其中三级系统(安全标记保护级)是广大政企单位最常见的定级级别。本文基于多次参与等保测评和系统建设的实战经验,提供一份从解读到落地的完整指南。

一、等保2.0框架解读

1.1 等保2.0 vs 1.0 核心变化

变化维度 等保1.0 等保2.0
标准体系 GB/T 22239-2008 GB/T 22239-2019
保护对象 传统信息系统 新增:云计算/移动互联/物联网/工控
安全要求结构 10大类 “一个中心、三重防护”
可信验证 未明确要求 各级别均有可信验证要求
密码技术 提及较少 明确要求使用国密算法
测评周期 四级每半年,三级每年 四级每半年,三级每年,二级每两年
定级流程 自主定级 专家评审+主管部门核准

1.2 “一个中心、三重防护"架构

                    ┌──────────────────┐
                    │   安全管理中心    │
                    │  (系统管理/审计管理│
                    │   安全管理/集中管控)│
                    └────────┬─────────┘
                             │
         ┌───────────────────┼───────────────────┐
         │                   │                   │
    ┌────┴────┐        ┌────┴────┐        ┌────┴────┐
    │ 安全计算 │        │ 安全区域 │        │ 安全通信 │
    │  环境    │        │  边界    │        │  网络    │
    │(身份鉴别 │        │(边界防护 │        │(通信加密 │
    │ 访问控制 │        │ 访问控制 │        │ 可信验证)│
    │ 安全审计 │        │ 入侵防范 │        │         │
    │ 入侵防范)│        │ 安全审计)│        │         │
    └─────────┘        └─────────┘        └─────────┘
    
    物理安全 ─── 贯穿所有层面 ─── 基础底座

1.3 三级系统核心指标

三级系统的核心要义是:在遭受攻击后,能保护重要数据不泄露,系统能够恢复基本功能。共 300+ 条安全要求,以下是 10 条三级特别关注的高权重指标:

序号 要求项 关键内容 权重
1 身份鉴别 双因素认证、密码复杂度策略
2 访问控制 最小权限、三权分立
3 安全审计 日志全覆盖、审计记录保护、不可删除
4 入侵防范 WAF/IDS/IPS、APT检测
5 数据保密性 传输加密、存储加密、国密算法
6 数据备份恢复 异地备份、恢复演练
7 剩余信息保护 存储空间释放前清除、内存释放前清除
8 可信验证 引导程序、系统程序可信度量
9 安全管理中心 三权分立审计、集中管控
10 个人信息保护 仅采集必要信息、脱敏处理

二、技术部分建设

2.1 安全物理环境

机房门禁系统配置

# 门禁系统配置要点
机房物理安全:
  出入口控制:
    - 双向刷卡 + 生物识别(指纹/人脸)
    - 进出记录保存 >= 180天
    - 视频监控覆盖所有出入口
  区域划分:
    - 主机房 / 辅助区 / 支持区 / 行政管理区
    - 不同安全等级设备物理隔离
  环境监控:
    - 温湿度传感器(报警阈值:温度 22±3°C,湿度 45%-65%)
    - 漏水检测(空调下方、管线区域)
    - UPS 供电 >= 2小时(三级要求)

2.2 安全通信网络

通信完整性校验实现

#!/usr/bin/env python3
"""通信完整性校验模块 (HMAC-SM3 国密)"""
import hmac
import hashlib
try:
    from gmssl.sm3 import sm3_hash
    USE_GMSSL = True
except ImportError:
    USE_GMSSL = False

class CommunicationIntegrity:
    """等保三级通信完整性校验"""
    
    def __init__(self, secret_key: bytes):
        if len(secret_key) < 32:
            raise ValueError("密钥长度至少 32 字节")
        self.secret_key = secret_key
    
    def compute_hmac_sm3(self, message: bytes) -> str:
        """使用 HMAC-SM3 计算消息认证码"""
        if USE_GMSSL:
            # 使用国密 SM3
            block_size = 64  # SM3 块大小
            if len(self.secret_key) > block_size:
                key = bytes.fromhex(sm3_hash(self.secret_key.hex()))
            else:
                key = self.secret_key.ljust(block_size, b'\x00')
            
            o_key_pad = bytes(x ^ 0x5c for x in key)
            i_key_pad = bytes(x ^ 0x36 for x in key)
            
            inner_hash = sm3_hash((i_key_pad + message).hex())
            return sm3_hash((o_key_pad + bytes.fromhex(inner_hash)).hex())
        else:
            # 回退到 HMAC-SHA256
            return hmac.new(self.secret_key, message, hashlib.sha256).hexdigest()
    
    def verify(self, message: bytes, mac: str) -> bool:
        """验证消息完整性"""
        computed = self.compute_hmac_sm3(message)
        return hmac.compare_digest(computed, mac)

# 使用示例
ci = CommunicationIntegrity(b'my-32-byte-secret-key-here!!')
msg = b'{"user":"admin","action":"delete_record","id":12345}'
mac = ci.compute_hmac_sm3(msg)
assert ci.verify(msg, mac)

通信保密性实现(国密 SM4)

from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT

class CommunicationConfidentiality:
    """等保三级通信加密(国密 SM4-CBC)"""
    
    def __init__(self, key: bytes, iv: bytes = None):
        if len(key) != 16:
            raise ValueError("SM4 密钥 16 字节")
        self.key = key
        self.iv = iv or b'\x00' * 16
        self.crypt_sm4 = CryptSM4()
    
    def encrypt(self, plaintext: str) -> bytes:
        self.crypt_sm4.set_key(self.key, SM4_ENCRYPT)
        data = plaintext.encode('utf-8')
        # PKCS7 填充
        pad_len = 16 - len(data) % 16
        data += bytes([pad_len]) * pad_len
        return self.crypt_sm4.crypt_cbc(self.iv, data)
    
    def decrypt(self, ciphertext: bytes) -> str:
        self.crypt_sm4.set_key(self.key, SM4_DECRYPT)
        plain = self.crypt_sm4.crypt_cbc(self.iv, ciphertext)
        # 去除 PKCS7 填充
        pad_len = plain[-1]
        return plain[:-pad_len].decode('utf-8')

2.3 安全区域边界

边界防护系统部署架构

# 等保三级边界设备推荐清单
边界防护设备:
  下一代防火墙(NGFW):
    - 型号: 华为 USG6600E / 深信服 AF
    - 策略: 默认拒绝 + 业务白名单
    - 功能: IPS/AV/URL过滤/应用识别全线开启
  
  Web应用防火墙(WAF):
    - 型号: 长亭 SafeLine / F5 BIG-IP ASM
    - 策略: OWASP Top-10 全覆盖
    - 部署: 反向代理模式或透明桥接
  
  入侵检测/防御(IDS/IPS):
    - 开源方案: Suricata + Elastic Stack
    - 规则: ET Open + 自定义业务规则
    - 更新频率: 每日自动更新
  
  安全审计:
    - 堡垒机: JumpServer / 齐治
    - 日志审计: Graylog / Splunk
    - 数据库审计: 安恒 DAS

Suricata 自定义规则示例

# suricata-custom.rules — 等保三级边界检测规则

# 1. 检测敏感数据外泄(身份证号)
alert tcp $HOME_NET any -> $EXTERNAL_NET any (
    msg:"等保-敏感数据外泄-身份证号";
    flow:to_server,established;
    content:"|e8 ba ab e4 bb bd e8 af 81|"; nocase;
    pcre:"/[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]/";
    classtype:policy-violation;
    priority:1;
    sid:1000001;
    rev:1;
)

# 2. 检测非工作时段运维操作
alert tcp any any -> $HOME_NET 22 (
    msg:"等保-非工作时段SSH连接";
    flow:to_server,established;
    detect_offset:0;
    threshold:type limit, track by_src, count 1, seconds 60;
    classtype:attempted-admin;
    priority:2;
    sid:1000002;
    rev:1;
)

# 3. 检测暴力破解
alert tcp $EXTERNAL_NET any -> $HOME_NET [22,3389,3306,1433] (
    msg:"等保-暴力破解检测";
    flow:to_server,established;
    threshold:type both, track by_src, count 10, seconds 60;
    classtype:attempted-admin;
    priority:1;
    sid:1000003;
    rev:1;
)

2.4 安全计算环境

操作系统安全加固脚本

#!/bin/bash
# os-hardening-dengbao3.sh — 等保三级操作系统加固

set -euo pipefail

LOG_FILE="/var/log/dengbao-hardening.log"
exec 2> >(tee -a "$LOG_FILE" >&2)

echo "===== 等保三级操作系统加固开始 $(date) =====" | tee -a "$LOG_FILE"

# 1. 身份鉴别 (g)
echo "[+] 配置密码策略..."
cat >> /etc/security/pwquality.conf << 'EOF'
minlen = 10
dcredit = -1          # 至少 1 个数字
ucredit = -1          # 至少 1 个大写字母
lcredit = -1          # 至少 1 个小写字母
ocredit = -1          # 至少 1 个特殊字符
maxrepeat = 3         # 最多连续重复 3 次
difok = 5             # 新密码至少 5 个不同字符
EOF

# 2. 登录失败锁定
echo "[+] 配置登录失败锁定..."
cat >> /etc/pam.d/common-auth << 'EOF'
auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=600
EOF

# 3. 超时自动退出
echo "[+] 配置超时自动退出..."
cat >> /etc/profile << 'EOF'
TMOUT=600
readonly TMOUT
export TMOUT
EOF

# 4. 审计策略(全覆盖)
echo "[+] 配置系统审计..."
cat > /etc/audit/rules.d/dengbao.rules << 'EOF'
# 审计系统管理操作
-w /etc/passwd -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
-w /etc/group -p wa -k identity_changes
-w /etc/sudoers -p wa -k privilege_escalation
-w /etc/crontab -p wa -k scheduled_tasks

# 审计计划任务
-w /var/spool/cron -p wa -k scheduled_tasks

# 审计网络配置
-w /etc/hosts -p wa -k network_config
-w /etc/sysconfig/network -p wa -k network_config

# 审计 SSH 配置
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 审计执行系统调用
-a always,exit -F arch=b64 -S execve -k process_execution
-a always,exit -F arch=b32 -S execve -k process_execution

# 审计权限提升
-a always,exit -F arch=b64 -S setuid -S setreuid -S setresuid -k privilege_escalation
# 设置审计规则不可变
-e 2
EOF

# 5. 最小化安装
echo "[+] 卸载非必要服务..."
for pkg in telnet rsh-server talk-server xinetd; do
    apt-get remove --purge -y "$pkg" 2>/dev/null || yum remove -y "$pkg" 2>/dev/null || true
done

# 6. 关闭非必要端口
echo "[+] 防火墙最小化..."
ufw default deny incoming 2>/dev/null || iptables -P INPUT DROP
ufw default allow outgoing 2>/dev/null || iptables -P OUTPUT ACCEPT
for port in 22 80 443; do
    ufw allow $port 2>/dev/null || iptables -A INPUT -p tcp --dport $port -j ACCEPT
done
ufw enable 2>/dev/null || true

echo "===== 等保三级操作系统加固完成 $(date) =====" | tee -a "$LOG_FILE"

2.5 数据安全实现

数据脱敏中间件

import re
from typing import Any, Dict

class DataMasking:
    """等保三级数据脱敏(支持身份证、手机号、银行卡、邮箱)"""
    
    PATTERNS = {
        'id_card': (r'[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]',
                     lambda m: m.group()[:6] + '********' + m.group()[-4:]),
        'phone':   (r'1[3-9]\d{9}',
                     lambda m: m.group()[:3] + '****' + m.group()[-4:]),
        'bank_card': (r'\d{16,19}',
                       lambda m: m.group()[:4] + ' **** **** ' + m.group()[-4:]),
        'email':   (r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}',
                     lambda m: m.group()[0] + '***@' + m.group().split('@')[1]),
    }
    
    @classmethod
    def mask_data(cls, data: Any) -> Any:
        """递归脱敏"""
        if isinstance(data, str):
            for _, (pattern, replacer) in cls.PATTERNS.items():
                data = re.sub(pattern, replacer, data)
            return data
        elif isinstance(data, dict):
            return {k: cls.mask_data(v) for k, v in data.items()}
        elif isinstance(data, list):
            return [cls.mask_data(item) for item in data]
        return data

# 使用
original = {"user": "张三", "phone": "13812345678", "id_card": "320102199001011234"}
masked = DataMasking.mask_data(original)
print(masked)
# {'user': '张三', 'phone': '138****5678', 'id_card': '320102********1234'}

三、安全管理中心建设

3.1 三权分立

-- 等保三级三权分立数据库配置
-- 系统管理员(仅负责系统配置,不可查看审计日志)
CREATE USER sys_admin WITH PASSWORD 'Sys@Admin#2026';
GRANT CREATE, ALTER, DROP ON DATABASE db_prod TO sys_admin;
REVOKE SELECT ON audit_log FROM sys_admin;

-- 安全管理员(仅负责权限管理)
CREATE USER sec_admin WITH PASSWORD 'Sec@Admin#2026';
GRANT CREATE USER, ALTER USER, DROP USER ON *.* TO sec_admin;
REVOKE ALL ON db_prod.* FROM sec_admin;

-- 审计管理员(仅负责审计日志查看)
CREATE USER aud_admin WITH PASSWORD 'Aud@Admin#2026';
GRANT SELECT ON audit_log TO aud_admin;
REVOKE ALL ON db_prod.* FROM aud_admin;

3.2 集中管控平台

建议实现以下集中管控功能:

集中管控平台功能清单:
  资产管理:
    - 硬件资产自动发现与盘点
    - 软件资产许可管理
    - 资产变更自动审计与告警
  
  安全事件管理:
    - 多源日志聚合 (syslog/snmp/http)
    - 关联分析规则引擎
    - 自动化 SOAR 剧本 (playbooks)
  
  漏洞管理:
    - 定期漏洞扫描(三级要求每周)
    - 漏洞生命周期追踪 (发现→确认→修复→验证)
    - 补丁管理自动化
  
  态势感知:
    - 全网资产态势大屏
    - 威胁情报集成 (TIP)
    - 攻击链可视化

四、建设实施步骤

等保三级建设推荐以下实施路径:

阶段 周期 交付物 要点
1. 系统定级 1-2 周 定级报告、专家评审意见 明确系统边界
2. 差距分析 2-3 周 差距分析报告、整改清单 对标 GB/T 22239
3. 方案设计 3-4 周 建设方案、产品选型 技术+管理并重
4. 实施部署 4-8 周 部署文档、配置基线 最小影响业务
5. 自查整改 2-3 周 自查报告 逐条核验 300+ 项
6. 等级测评 1-2 周 测评报告(70分以上通过) 选择有资质机构
7. 持续运营 长期 年度自查、定期演练 PDCA 循环

五、常见失分项及应对

失分项 扣分 原因 对策
未实现双因素认证 -5 至 -10 三级强制要求 部署堡垒机+MFA
审计日志可删除 -5 审计记录应防篡改 日志写入 WORM 存储/CDN 实时转发
未做异地备份 -5 至 -8 异地 ≥ 30 公里 使用对象存储跨地域复制
未进行应急演练 -3 至 -5 需每年至少 1 次 制定演练方案,保留演练记录
无剩余信息保护 -3 内存/磁盘释放前清除 采购带自毁功能的存储设备

结语

等保三级建设不是单纯的产品堆砌,而是一个系统工程。从定级、备案、整改、测评到持续运营,需要安全团队与业务团队的深度协作。建议将等保要求融入开发生命周期(DevSecOps),从源头解决安全问题;同时在日常运营中贯彻 PDCA 循环,真正做到"持续合规"而非"测评前临时抱佛脚”。