7Computer Networks: A Systems Approach(第6版)

网络安全

安全基础

加密认证TLS防火墙DDoS防御

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第7章:网络安全(Network Security)

一、导读

1.1 本章学习目标

第7章讲解网络安全的基础知识——从密码学原理到安全协议,从防火墙到 DDoS 防御。网络安全是互联网面临的最大挑战之一,理解其基本原理是每个网络工程师的必修课。

本章核心学习目标:

  • 掌握对称加密和公钥加密:AES、RSA 的基本原理
  • 理解数字签名和证书:如何验证身份和完整性?
  • 掌握 TLS 协议:HTTPS 的安全基础
  • 理解防火墙和 IDS:网络防御的基本工具
  • 了解 DDoS 攻击与防御

1.2 为什么本章如此重要

网络安全威胁日益严峻,从数据泄露到 DDoS 攻击,从中间人攻击到供应链攻击。理解安全原理是保护系统的基础。

1.3 核心问题引导

为什么对称加密需要密钥分发,而公钥加密不需要?

TLS 握手过程中,如何防止中间人攻击?

DDoS 攻击为什么难以防御?


二、核心概念详解

2.1 密码学基础

对称加密:
- 加密和解密使用相同的密钥
- 算法: AES-256, ChaCha20
- 优势: 速度快
- 劣势: 密钥分发困难
- 应用: 数据加密、VPN

公钥加密 (非对称加密):
- 公钥加密,私钥解密
- 算法: RSA, ECC
- 优势: 解决密钥分发问题
- 劣势: 速度慢(比对称加密慢 100-1000 倍)
- 应用: 密钥交换、数字签名

混合加密 (TLS 使用):
1. 使用公钥加密协商会话密钥
2. 使用对称加密加密实际数据
→ 兼顾安全性和性能

2.2 TLS 协议

TLS 1.3 握手 (1-RTT):
Client                              Server
|---ClientHello--------------------->|
|   (支持的密码套件, key_share,      |
|    supported_versions, ...)        |
|                                    |
|<---ServerHello--------------------|
|   (选择的密码套件, key_share,      |
|    encrypted_extensions)           |
|                                    |
|<---Certificate--------------------|
|   (服务器证书)                     |
|                                    |
|<---CertificateVerify--------------|
|   (用私钥签名握手消息)             |
|                                    |
|<---Finished----------------------|
|   (握手消息 MAC)                   |
|                                    |
|---Finished----------------------->|
|                                    |
|======== 加密数据传输 =============|

TLS 1.3 改进:
- 1-RTT 握手 (TLS 1.2 需要 2-RTT)
- 0-RTT 恢复 (之前连接过的服务器)
- 移除不安全的密码套件 (RSA 密钥传输, CBC, RC4)
- 前向保密成为强制要求

证书链验证:
根 CA → 中间 CA → 服务器证书
每一级用上一级的私钥签名
客户端内置根 CA 的公钥

2.3 防火墙与 IDS

防火墙类型:
1. 包过滤防火墙:
   - 基于 IP、端口、协议过滤
   - 快速但粗糙
   
2. 状态检测防火墙:
   - 跟踪连接状态
   - 只允许已建立连接的返回流量
   
3. 应用层防火墙 (代理):
   - 理解应用协议
   - 可以过滤 HTTP 请求内容

IDS (入侵检测系统):
- 基于签名: 匹配已知攻击模式
- 基于异常: 检测偏离正常行为的活动
- IPS: 入侵防御系统(检测 + 自动阻断)

2.4 DDoS 攻击与防御

DDoS 攻击类型:
1. 容量耗尽型:
   - UDP 洪水: 发送大量 UDP 包
   - DNS 放大: 利用 DNS 响应放大流量
   - NTP 放大: 利用 NTP monlist 命令
   
2. 协议型:
   - SYN Flood: 大量半开连接耗尽资源
   - Ping of Death: 超大 ICMP 包
   
3. 应用层:
   - HTTP Flood: 大量 HTTP 请求
   - Slowloris: 慢速连接占用资源

防御措施:
- 流量清洗: 识别并丢弃恶意流量
- 速率限制: 限制单 IP 的请求速率
- Anycast: 分散流量到多个数据中心
- CDN: 利用边缘节点吸收攻击流量
- BGP 黑洞路由: 丢弃指向目标的流量(最后手段)

三、实战案例

3.1 案例一:TLS 证书验证

python
import ssl
import socket
import datetime

def check_tls_cert(hostname, port=443):
    """检查网站的 TLS 证书"""
    context = ssl.create_default_context()
    
    with socket.create_connection((hostname, port)) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            cert = ssock.getpeercert()
            
            print(f"主机: {hostname}")
            print(f"TLS 版本: {ssock.version()}")
            print(f"密码套件: {ssock.cipher()}")
            print(f"证书主题: {dict(x[0] for x in cert['subject'])}")
            print(f"颁发者: {dict(x[0] for x in cert['issuer'])}")
            print(f"有效期: {cert['notBefore']} - {cert['notAfter']}")
            print(f"SAN: {[x[1] for x in cert['subjectAltName']]}")
            
            # 检查过期
            not_after = datetime.datetime.strptime(
                cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
            days_left = (not_after - datetime.datetime.utcnow()).days
            print(f"剩余天数: {days_left}")

check_tls_cert("www.google.com")

四、本章小结

对称加密速度快但密钥分发困难,公钥加密解决密钥分发但速度慢

TLS 结合两者优势,通过证书验证防止中间人攻击

防火墙和 IDS 是网络防御的基本工具

DDoS 攻击通过流量淹没或资源耗尽使服务不可用


五、思考与练习

思考题

为什么 TLS 1.3 要求前向保密?

DDoS 反射放大攻击的原理是什么?如何防御?

编程练习

实现一个简单的 TLS 客户端,验证服务器证书。

实现基于速率限制的 DDoS 防御模块。


7/7网络安全
0%