Computer NetworkNotes

第 23 章:网络安全

zjc 于 2026-01-23 发布

这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 网络安全的目标不是安装一个防火墙,而是控制访问面、保护传输链路、识别异常流量、减少爆炸半径并让所有动作可审计。云原生环境下,安全边界从机房网络延伸到 VPC、子网、安全组、容器策略、服务间认证和 API 授权。

23.1 安全边界模型

传统边界模型:

Internet
  -> Firewall
     -> DMZ
        -> Internal Network

现代零信任思路:

任何访问默认不信任
  -> 身份认证
     -> 设备与环境评估
        -> 最小授权
           -> 持续校验
              -> 审计

网络分区示例:

Public Subnet:LB / 堡垒机
App Subnet:无状态服务
Data Subnet:MySQL / Redis / Kafka
Mgmt Subnet:运维与监控

原则:

  1. 数据层不暴露公网;
  2. 按职责划分子网;
  3. 安全组最小放行;
  4. 入口统一治理;
  5. 内部服务也认证;
  6. 权限和链路可审计。

23.2 防火墙与安全组

Linux 防火墙工具:

iptables -L -n
nft list ruleset
firewall-cmd --list-all
ufw status verbose

状态策略:

  1. 默认拒绝入站;
  2. 明确放行业务端口;
  3. 管理端口只允许堡垒网段;
  4. 出站也按需限制;
  5. 记录拒绝日志;
  6. 定期审计规则;
  7. 变更走自动化。

云安全组:

入站:TCP 443 from 0.0.0.0/0
入站:TCP 22 from 10.10.0.0/16
出站:按业务目标限制

安全组应该是角色模板,而不是每台机器随机复制。

23.3 加密与传输安全

场景 建议
公网 HTTP 强制 HTTPS
内部敏感通信 TLS 或 mTLS
数据库 TLS 按安全等级启用
消息队列 TLS 和认证
VPN 使用现代协议和强认证
证书 自动轮换和监控

内部网络不等于可信网络。跨机房、跨云、容器平台和服务间通信都应评估加密需求。

23.4 认证与授权

网络层:

  1. VPN 认证;
  2. 堡垒机;
  3. IP 白名单;
  4. mTLS。

应用层:

  1. OAuth2 / OIDC;
  2. JWT;
  3. API Key;
  4. 签名;
  5. RBAC / ABAC;
  6. 服务身份。

建议:

  1. 身份代替 IP 作为主要信任依据;
  2. token 短有效期;
  3. 刷新令牌安全存储;
  4. 服务账户独立;
  5. 最小授权;
  6. 权限审计;
  7. 高危操作二次确认。

23.5 常见攻击与防护

SYN Flood

利用大量半连接耗尽队列。

防护:

  1. SYN Cookie;
  2. 增大队列;
  3. 限速;
  4. 上游清洗;
  5. 监控 SYN_RECV。
sysctl net.ipv4.tcp_syncookies

DDoS

类型:

类型 特征
流量型 带宽被打满
协议型 TCP / UDP / ICMP 异常
应用层 HTTP 慢速或高频请求

防护:

  1. CDN / Anti-DDoS;
  2. 限流;
  3. 黑白名单;
  4. 验证码或挑战;
  5. 弹性扩容;
  6. 降级非核心功能;
  7. 与云厂商联动。

ARP 欺骗

同二层网络中伪造 ARP Reply。通过 VLAN、端口安全、DAI 和 TLS 降低风险。

DNS 劫持与污染

防护:

  1. DNSSEC;
  2. DoH / DoT;
  3. 多 resolver;
  4. 关键域名监控;
  5. 解析结果校验。

中间人攻击

防护:

  1. 强制 HTTPS;
  2. mTLS;
  3. HSTS;
  4. 不忽略证书错误;
  5. 关键客户端谨慎评估证书固定。

23.6 Web 安全与网络层配合

WAF 可以处理:

  1. SQL 注入特征;
  2. XSS 特征;
  3. 路径穿越;
  4. 扫描器;
  5. 恶意 UA;
  6. 高频访问;
  7. 大包异常。

WAF 不能替代应用安全:

  1. 参数化查询;
  2. 输出编码;
  3. CSRF token;
  4. 权限校验;
  5. 文件上传治理;
  6. 依赖升级;
  7. 安全开发流程。

Nginx 基础防护:

limit_req_zone $binary_remote_addr zone=api:10m rate=100r/s;

location /api/ {
    limit_req zone=api burst=200 nodelay;
    proxy_pass http://app;
}

23.7 容器与 Kubernetes 网络安全

要点:

  1. NetworkPolicy 默认拒绝;
  2. 命名空间隔离;
  3. Pod 只访问必要服务;
  4. 服务间 mTLS;
  5. Ingress TLS;
  6. 出口流量治理;
  7. NodePort 不随意暴露;
  8. 镜像仓库私有化;
  9. API Server 安全组限制;
  10. 审计网络策略变更。

NetworkPolicy 思路:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-api-to-order
spec:
  podSelector:
    matchLabels:
      app: order
  policyTypes: [Ingress]
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: api
      ports:
        - protocol: TCP
          port: 8080

23.8 VPN 与堡垒机

VPN:

  1. 使用强认证;
  2. 按用户授权子网;
  3. 会话超时;
  4. 双因素认证;
  5. 审计访问;
  6. 拆分隧道策略明确;
  7. 及时回收账号。

堡垒机:

  1. 统一入口;
  2. 身份认证;
  3. 授权目标;
  4. 命令审计;
  5. 录屏或会话日志;
  6. 高危命令拦截;
  7. 密钥不落个人机器。

23.9 网络安全监控

必须采集:

数据 用途
VPC Flow Log 内外流量审计
防火墙日志 拒绝和放行
WAF 日志 攻击和误拦
DNS 日志 异常域名
LB 日志 状态码和来源
TLS 监控 证书和协议版本
连接指标 SYN、新建、并发
带宽指标 DDoS 和异常外发

告警:

  1. 单 IP 高频请求;
  2. 异常 User-Agent;
  3. 源站直接访问;
  4. 新增防火墙规则;
  5. 安全组大规模变更;
  6. 证书临近过期;
  7. 出口流量突增;
  8. 内网横向扫描;
  9. 管理端口公网暴露;
  10. 未知服务监听。

23.10 安全审计清单

[ ] 数据库 / Redis / Kafka 不暴露公网
[ ] 管理端口仅堡垒网段可访问
[ ] 安全组按角色最小授权
[ ] HTTPS 强制并开启 HSTS
[ ] 证书自动轮换
[ ] 内部高敏链路启用 TLS / mTLS
[ ] VPN 和堡垒机双因素认证
[ ] WAF 和限流策略有效
[ ] NetworkPolicy 默认拒绝
[ ] VPC Flow Log / WAF / DNS 日志留存
[ ] 高危网络变更有审批和回滚

本章小结

网络安全要从边界控制走向零信任:网络分区和安全组缩小访问面,TLS 和 mTLS 保护传输,身份认证和最小授权控制访问,WAF、Anti-DDoS 和限流抵御攻击,VPC Flow Log、LB 日志和 DNS 日志支撑审计。云原生环境还必须治理 NetworkPolicy、服务间身份和出口流量。

思考题

  1. 为什么内部网络不应默认可信?
  2. 安全组和应用层授权分别解决什么问题?
  3. SYN Flood 的原理和防护是什么?
  4. WAF 为什么不能替代参数化查询?
  5. 设计一套生产 VPC 的网络分区和安全组策略。