Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第六十 网络安全

网络安全(Network Security)是保护计算机网络基础设施、传输数据和应用服务免受攻击、损害或未授权访问的实践。互联网的开放性使得网络安全成为数字化社会的基石——从个人隐私到国家安全,从电子商务到工业控制,无处不依赖网络安全。


一、网络安全基础

1.1 网络安全的目标

目标说明对应威胁
机密性数据在传输中不被窃听嗅探、中间人攻击
完整性数据在传输中不被篡改篡改、重放攻击
可用性网络服务持续可用DDoS 攻击
身份认证确认通信双方身份伪造、冒充
不可抵赖发送方无法否认已发送的数据否认行为

1.2 攻击面与攻击向量

概念说明
攻击面(Attack Surface)系统中所有可被攻击者利用的入口点总和
攻击向量(Attack Vector)攻击者利用攻击面的具体手段或路径
零日漏洞(0-day)尚未被公开或修补的漏洞

二、网络协议与安全

2.1 OSI 七层模型与安全

层协议安全威胁防御手段
应用层HTTP, DNS, SMTPSQL 注入、XSS、钓鱼WAF、输入验证、安全编码
表示层SSL/TLS加密降级、证书伪造强制 TLS 1.2+、HSTS
会话层NetBIOS会话劫持会话超时、绑定 IP
传输层TCP, UDPSYN Flood、端口扫描防火墙、SYN Cookie
网络层IPIP 欺骗、Smurf 攻击入口过滤、IPSec
数据链路层Ethernet, ARPARP 欺骗、MAC 泛洪端口安全、动态 ARP 检测
物理层网线、光纤物理窃听、破坏物理隔离、加密

2.2 TCP/IP 安全问题

TCP/IP 协议在设计之初未考虑安全,存在固有缺陷:

协议安全问题说明
IP无认证任何人可伪造源 IP 地址
TCP序列号可预测可被预测用于会话劫持
ARP无认证ARP 欺骗可劫持流量
DNS无认证DNS 缓存投毒、DNS 劫持
HTTP明文传输数据可被窃听和篡改

2.3 TLS/SSL

TLS(Transport Layer Security)是保障网络通信安全的核心协议,提供加密、认证和完整性保护。

客户端                                     服务器
  |                                          |
  | --- ClientHello (支持的加密套件) -------> |
  | <-- ServerHello (选定加密套件) + 证书 --- |
  | --- 密钥交换(Key Exchange)----------->  |
  | --- Finished (加密验证) --------------->  |
  | <-- Finished (加密验证) ---------------- |
  |                                          |
  | <==== 加密通信通道 (Application Data) ==> |
TLS 版本状态说明
TLS 1.0废弃存在 BEAST 等攻击
TLS 1.1废弃2020 年弃用
TLS 1.2推荐当前主流版本
TLS 1.3最新简化握手、移除不安全算法、前向保密
#![allow(unused)]
fn main() {
// Rust 中使用 rustls 建立 TLS 连接
use rustls::ClientConfig;
use std::sync::Arc;

fn create_tls_config() -> Arc<ClientConfig> {
    let mut root_store = rustls::RootCertStore::empty();
    root_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned());
    
    Arc::new(ClientConfig::builder()
        .with_root_certificates(root_store)
        .with_no_client_auth())
}
}

三、常见网络攻击

3.1 DDoS 攻击(分布式拒绝服务)

攻击者控制大量僵尸网络,向目标发送海量请求,耗尽其资源使其无法正常服务。

类型原理典型攻击
体积型耗尽带宽UDP Flood、ICMP Flood、放大攻击
协议型耗尽连接资源SYN Flood、ACK Flood
应用型耗尽应用资源HTTP Flood、Slowloris

防御措施: 流量清洗、CDN 分散、速率限制、黑洞路由、Anycast。

3.2 中间人攻击(MITM)

攻击者拦截并可能篡改通信双方之间的消息。

Alice  <-->  攻击者  <-->  Bob
         拦截/篡改/窃听

防御: TLS 证书验证、证书锁定(Certificate Pinning)、端到端加密。

3.3 DNS 攻击

攻击说明
DNS 缓存投毒向 DNS 缓存注入虚假记录
DNS 劫持修改 DNS 指向恶意服务器
DNS 隧道利用 DNS 协议传输数据绕过防火墙
DNS 放大攻击利用开放 DNS 服务器放大 DDoS 流量

防御: DNSSEC(DNS 安全扩展)、DNS over HTTPS (DoH)、DNS over TLS (DoT)。

3.4 ARP 欺骗

在局域网中伪造 ARP 响应,将受害者流量重定向到攻击者。

防御: 静态 ARP 绑定、动态 ARP 检测(DAI)、网络分段。

3.5 端口扫描与侦察

扫描类型说明
TCP SYN 扫描半开扫描,不完成三次握手
TCP Connect 扫描完成完整连接,易被日志记录
UDP 扫描探测开放 UDP 端口
FIN/Xmas/Null 扫描利用特殊标志位绕过防火墙

四、网络防御体系

4.1 纵深防御

不依赖单一安全措施,而是构建多层防线:

边界防火墙 → IDS/IPS → WAF → 主机防火墙 → 应用安全 → 数据加密

4.2 防火墙

类型工作层特点
包过滤防火墙网络层基于 IP/端口过滤,速度快
状态检测防火墙传输层跟踪连接状态
应用层防火墙(WAF)应用层深度检测 HTTP 内容
下一代防火墙(NGFW)多层集成 IPS、DPI、身份认证

4.3 IDS 与 IPS

系统说明
IDS(入侵检测系统)被动监测并告警,不阻断
IPS(入侵防御系统)主动检测并阻断攻击

检测方法:

方法说明
特征检测匹配已知攻击特征库(类似杀毒软件)
异常检测建立正常行为基线,检测偏离行为
混合检测结合特征与异常检测

4.4 零信任架构

传统安全模型“内网可信,外网不可信“已不再适用。零信任原则:

原则说明
永不信任,始终验证无论内外网,每次访问都需认证
最小权限仅授予完成任务所需的最小权限
微分段将网络划分为细粒度安全区域
持续监控实时评估访问行为和风险

五、VPN 与隧道技术

5.1 VPN(虚拟专用网络)

在公共网络上建立加密隧道,实现安全通信。

协议特点
IPSec网络层加密,支持站点到站点 VPN
OpenVPN开源,基于 SSL/TLS
WireGuard现代、简洁、高性能,已并入 Linux 内核
L2TP常与 IPSec 配合使用

5.2 隧道与代理

技术层次说明
SSH 隧道传输层通过 SSH 转发端口
SOCKS 代理会话层通用代理协议
Tor应用层洋葱路由,匿名通信
隧道协议多层GRE、VXLAN、Geneve

六、Web 安全

6.1 HTTPS 与 HSTS

HTTPS = HTTP + TLS,保障 Web 通信安全。

HSTS(HTTP Strict Transport Security)强制浏览器使用 HTTPS:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

6.2 CSP(内容安全策略)

限制页面可加载的资源来源,防御 XSS:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'

6.3 CORS(跨域资源共享)

控制浏览器跨域请求策略:

Access-Control-Allow-Origin: https://trusted.example.com
Access-Control-Allow-Methods: GET, POST

6.4 安全 HTTP 头

头部作用
Strict-Transport-Security强制 HTTPS
Content-Security-Policy限制资源来源
X-Frame-Options防止点击劫持
X-Content-Type-Options阻止 MIME 嗅探
Referrer-Policy控制 Referrer 泄露
Permissions-Policy限制浏览器 API 权限

七、Rust 网络安全实践

7.1 安全的 TCP 服务端

#![allow(unused)]
fn main() {
use std::net::TcpListener;
use std::io::{Read, Write};

fn secure_server() -> std::io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080")?;
    
    for stream in listener.incoming() {
        let mut stream = stream?;
        // 设置读取超时,防止 Slowloris 攻击
        stream.set_read_timeout(Some(std::time::Duration::from_secs(10)))?;
        
        let mut buffer = [0u8; 1024]; // 固定大小缓冲区,防止内存问题
        match stream.read(&mut buffer) {
            Ok(0) => continue, // 连接关闭
            Ok(n) => {
                // 处理请求,注意输入验证
                let response = b"HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World!";
                stream.write_all(response)?;
            }
            Err(_) => continue,
        }
    }
    Ok(())
}
}

7.2 Rust 安全网络库

Crate用途
rustls现代 TLS 实现
hyperHTTP 客户端/服务端
axumWeb 框架
tower中间件(限流、超时、认证)
tokio异步运行时

八、总结与练习

本章小结

知识点要点
安全目标机密性、完整性、可用性、认证、不可抵赖
协议安全TCP/IP 固有缺陷,TLS 提供加密与认证
常见攻击DDoS、MITM、DNS 攻击、ARP 欺骗、端口扫描
防御体系纵深防御、防火墙、IDS/IPS、零信任架构
VPNWireGuard、IPSec、OpenVPN
Web 安全HTTPS、HSTS、CSP、CORS、安全 HTTP 头
Rust 实践rustls、hyper、固定缓冲区、超时设置

练习建议

  1. TLS 抓包分析:用 Wireshark 抓取一次 HTTPS 连接的握手过程,分析 TLS 1.2 与 1.3 握手的差异。
  2. DDoS 防御:研究 Cloudflare 的 DDoS 防御架构,理解流量清洗和 Anycast 的工作原理。
  3. 安全 TCP 服务:用 Rust 实现一个 TCP 服务端,加入读取超时、连接限制和输入验证。
  4. 零信任分析:选择一个企业网络架构,分析如何将其改造为零信任架构。
  5. DNS 安全:配置 DNSSEC 或 DoH,理解它们如何防御 DNS 投毒攻击。
  6. 安全 HTTP 头:检查一个网站的 HTTP 响应头,对照安全最佳实践提出改进建议。