第六十 网络安全
网络安全(Network Security)是保护计算机网络基础设施、传输数据和应用服务免受攻击、损害或未授权访问的实践。互联网的开放性使得网络安全成为数字化社会的基石——从个人隐私到国家安全,从电子商务到工业控制,无处不依赖网络安全。
一、网络安全基础
1.1 网络安全的目标
| 目标 | 说明 | 对应威胁 |
|---|---|---|
| 机密性 | 数据在传输中不被窃听 | 嗅探、中间人攻击 |
| 完整性 | 数据在传输中不被篡改 | 篡改、重放攻击 |
| 可用性 | 网络服务持续可用 | DDoS 攻击 |
| 身份认证 | 确认通信双方身份 | 伪造、冒充 |
| 不可抵赖 | 发送方无法否认已发送的数据 | 否认行为 |
1.2 攻击面与攻击向量
| 概念 | 说明 |
|---|---|
| 攻击面(Attack Surface) | 系统中所有可被攻击者利用的入口点总和 |
| 攻击向量(Attack Vector) | 攻击者利用攻击面的具体手段或路径 |
| 零日漏洞(0-day) | 尚未被公开或修补的漏洞 |
二、网络协议与安全
2.1 OSI 七层模型与安全
| 层 | 协议 | 安全威胁 | 防御手段 |
|---|---|---|---|
| 应用层 | HTTP, DNS, SMTP | SQL 注入、XSS、钓鱼 | WAF、输入验证、安全编码 |
| 表示层 | SSL/TLS | 加密降级、证书伪造 | 强制 TLS 1.2+、HSTS |
| 会话层 | NetBIOS | 会话劫持 | 会话超时、绑定 IP |
| 传输层 | TCP, UDP | SYN Flood、端口扫描 | 防火墙、SYN Cookie |
| 网络层 | IP | IP 欺骗、Smurf 攻击 | 入口过滤、IPSec |
| 数据链路层 | Ethernet, ARP | ARP 欺骗、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 安全网络库
八、总结与练习
本章小结
| 知识点 | 要点 |
|---|---|
| 安全目标 | 机密性、完整性、可用性、认证、不可抵赖 |
| 协议安全 | TCP/IP 固有缺陷,TLS 提供加密与认证 |
| 常见攻击 | DDoS、MITM、DNS 攻击、ARP 欺骗、端口扫描 |
| 防御体系 | 纵深防御、防火墙、IDS/IPS、零信任架构 |
| VPN | WireGuard、IPSec、OpenVPN |
| Web 安全 | HTTPS、HSTS、CSP、CORS、安全 HTTP 头 |
| Rust 实践 | rustls、hyper、固定缓冲区、超时设置 |
练习建议
- TLS 抓包分析:用 Wireshark 抓取一次 HTTPS 连接的握手过程,分析 TLS 1.2 与 1.3 握手的差异。
- DDoS 防御:研究 Cloudflare 的 DDoS 防御架构,理解流量清洗和 Anycast 的工作原理。
- 安全 TCP 服务:用 Rust 实现一个 TCP 服务端,加入读取超时、连接限制和输入验证。
- 零信任分析:选择一个企业网络架构,分析如何将其改造为零信任架构。
- DNS 安全:配置 DNSSEC 或 DoH,理解它们如何防御 DNS 投毒攻击。
- 安全 HTTP 头:检查一个网站的 HTTP 响应头,对照安全最佳实践提出改进建议。