第15章 网络安全防护¶
安全是科学上网的核心问题。本章将介绍如何防范各种攻击,保护服务器和隐私安全。
15.1 常见攻击方式¶
15.1.1 主动探测攻击¶
GFW主动探测原理:
探测流程:
1. 流量特征识别
GFW检测到可疑流量特征
↓
2. 记录服务器IP和端口
↓
3. 主动连接探测
GFW主动连接该IP:端口
↓
4. 发送探测包
模拟客户端握手
↓
5. 分析响应
如果响应符合代理协议特征
↓
6. 封锁IP
将IP加入黑名单
典型被探测的协议:
- Shadowsocks(早期版本)
- OpenVPN
- PPTP/L2TP
- 未混淆的V2Ray
防御措施:
1. 使用TLS加密
外层流量完全符合HTTPS标准
GFW无法区分是否为代理
2. 实现回落机制(Fallback)
VLESS配置示例:
{
"fallbacks": [{
"dest": 80 // 非法连接转发到Web服务器
}]
}
探测者看到:正常的网站
真实用户:正确认证后使用代理
3. 密码/密钥认证
Trojan协议:
- 密码错误 → 返回真实网站内容
- 密码正确 → 建立代理连接
4. 时间窗口验证
VMess协议:
- 服务器时间差 > 90秒 → 拒绝连接
- 防止重放探测
5. 流量混淆
使用WebSocket/gRPC等真实协议
完全模仿正常应用流量
15.1.2 DDoS攻击¶
DDoS攻击类型:
1. SYN Flood
大量SYN包耗尽连接资源
2. UDP Flood
大量UDP包占满带宽
3. HTTP Flood
应用层攻击,模拟大量HTTP请求
4. 反射放大攻击
利用DNS/NTP等服务放大流量
防御方案:
# 1. 启用SYN Cookies
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
sysctl -p
# 2. 限制连接数
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 3. 使用Fail2Ban
# 自动封禁异常IP(见第11章)
# 4. CloudFlare CDN
# - DDoS防护
# - 隐藏真实IP
# - 自动防御
# 5. 流量清洗服务
# - 大型DDoS攻击时
# - 使用专业防护服务
CloudFlare防护配置:
安全等级设置:
1. 登录CloudFlare
2. 防火墙 → 设置
3. 安全级别:High
4. 质询通过期:30分钟
5. 启用:
- Browser Integrity Check
- Email Obfuscation
- IP Geolocation Header
- Always Use HTTPS
防火墙规则:
1. 创建规则
2. 条件:
- 威胁分数 > 10
- 或 国家 = 已知攻击来源
3. 动作:质询(Managed Challenge)
15.1.3 暴力破解攻击¶
SSH暴力破解:
# 查看SSH登录失败记录
grep "Failed password" /var/log/auth.log | tail -20
# 统计攻击IP
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
# 防御措施(已在第11章介绍):
# 1. 修改SSH端口
# 2. 禁用密码登录
# 3. 使用密钥认证
# 4. 部署Fail2Ban
代理密码破解:
攻击方式:
- 字典攻击
- 暴力枚举
- 弱密码猜测
防御:
1. 使用强密码
- 至少32位随机字符
- 包含大小写、数字、符号
2. 使用UUID而非密码
V2Ray/Xray:
- UUID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- 极难破解
3. 限制失败次数
某些面板支持:
- 错误3次 → 临时封禁IP
4. 定期更换密码
- 每月更换一次
- 自动化脚本更新
15.1.4 中间人攻击(MITM)¶
攻击原理:
正常通信:
客户端 ←─ 加密通道 ─→ 服务器
中间人攻击:
客户端 ←─ 伪造证书 ─→ 攻击者 ←─ 真实连接 ─→ 服务器
(解密查看)
攻击手段:
1. DNS劫持
返回攻击者的IP地址
2. ARP欺骗
局域网中冒充网关
3. 伪造证书
使用自签名证书
防御措施:
1. 证书固定(Certificate Pinning)
客户端配置:
{
"tlsSettings": {
"serverName": "your-domain.com",
"allowInsecure": false, // 不接受不安全证书
"fingerprint": "sha256:..." // 证书指纹
}
}
2. 使用正规CA证书
- Let's Encrypt
- 验证证书链完整性
3. 启用HSTS
Nginx配置:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
4. 验证域名
确保连接的是正确域名
检查证书CN/SAN字段
5. 使用加密DNS
- DoH(DNS over HTTPS)
- DoT(DNS over TLS)
防止DNS劫持
15.1.5 流量分析攻击¶
威胁模型:
攻击者能力:
1. 观察流量
- 包大小
- 时间间隔
- 传输模式
2. 统计分析
- 流量指纹识别
- 网站指纹识别
- 行为模式分析
即使加密,仍可能推断:
- 访问了哪些网站
- 观看了哪些视频
- 通信模式
防御策略:
1. 填充(Padding)
添加随机数据填充
统一数据包大小
2. 流量混淆
- 发送假流量
- 随机延迟
- 随机包大小
3. 多路复用(Mux)
多个连接共享一个通道
混淆流量模式
4. 使用Tor
多层代理
难以追踪
5. VPN over Tor over VPN
极致隐私保护
但速度很慢
15.2 端口伪装技术¶
15.2.1 端口选择策略¶
常见端口及特点:
标准端口:
22 - SSH(容易被扫描)
80 - HTTP(明文,不推荐)
443 - HTTPS(推荐,最常用)
8080 - 备用HTTP(常被扫描)
推荐端口:
443 - HTTPS标准端口
✓ 最不容易被限制
✓ 流量混在网页中
2053 - CloudFlare CDN
2083 - cPanel HTTPS
2087 - WHM HTTPS
2096 - cPanel Webmail
8443 - HTTPS备用
✓ 常见但不如443安全
随机高端口:
10000-60000
✓ 不易被扫描
✗ 可能被某些防火墙限制
15.2.2 端口复用技术¶
Nginx端口复用:
# 443端口同时服务网站和代理
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 正常网站流量
location / {
root /var/www/html;
index index.html;
}
# 代理流量(特定路径)
location /secret-v2ray-path {
if ($http_upgrade != "websocket") {
return 404;
}
proxy_pass http://127.0.0.1:10000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
VLESS Fallback端口复用:
{
"inbounds": [{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [...],
"decryption": "none",
"fallbacks": [
{
// 默认流量转发到Nginx
"dest": 8080
},
{
// VMess流量
"path": "/vmess",
"dest": 10001,
"xver": 1
},
{
// Trojan流量
"path": "/trojan",
"dest": 10002,
"xver": 1
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [...]
}
}
}]
}
15.2.3 SNI分流¶
原理:
TLS握手时的SNI字段指定域名
根据SNI分流到不同服务
示例场景:
client.example.com → V2Ray
www.example.com → 正常网站
api.example.com → API服务
Nginx stream模块实现:
stream {
map $ssl_preread_server_name $backend {
v2ray.example.com 127.0.0.1:10000;
www.example.com 127.0.0.1:8080;
default 127.0.0.1:8080;
}
server {
listen 443;
ssl_preread on;
proxy_pass $backend;
}
}
15.3 流量特征混淆¶
15.3.1 WebSocket混淆¶
特点:
WebSocket协议特征:
1. HTTP升级请求
GET /path HTTP/1.1
Upgrade: websocket
Connection: Upgrade
2. 双向通信
3. 长连接
4. 广泛应用(聊天、推送等)
优势:
✓ 完全符合标准协议
✓ 防火墙通常放行
✓ 可通过CDN
✓ 难以识别为代理
V2Ray WebSocket配置:
{
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/chat", // 伪装成聊天应用
"headers": {
"Host": "your-domain.com",
"User-Agent": "Mozilla/5.0..." // 真实浏览器UA
}
},
"security": "tls"
}
}
15.3.2 HTTP/2混淆¶
HTTP/2特点:
优势:
✓ 多路复用
✓ 头部压缩
✓ 二进制分帧
✓ 现代网站广泛使用
✓ 流量特征真实
V2Ray HTTP/2配置:
{
"streamSettings": {
"network": "h2",
"httpSettings": {
"host": ["your-domain.com"],
"path": "/api/v1/data"
},
"security": "tls"
}
}
15.3.3 gRPC混淆¶
gRPC特点:
gRPC = Google RPC框架
✓ 基于HTTP/2
✓ 二进制协议
✓ 广泛用于微服务
✓ 流量特征真实
✓ CloudFlare原生支持
配置示例:
{
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "UserService", // 伪装成用户服务
"multiMode": true
},
"security": "tls"
}
}
15.3.4 mKCP伪装¶
mKCP伪装类型:
支持的伪装类型:
none:不伪装
srtp:伪装成SRTP(实时传输协议)
utp:伪装成uTorrent传输
wechat-video:伪装成微信视频通话(推荐)
dtls:伪装成DTLS 1.2
wireguard:伪装成WireGuard
推荐:
- 国内:wechat-video
- 国际:dtls / srtp
15.4 防止DPI深度检测¶
15.4.1 DPI检测原理¶
深度包检测(Deep Packet Inspection):
检测层次:
1. 端口检测
检查目标端口
2. 协议识别
分析协议特征
3. 特征匹配
- 特定字节序列
- TLS握手指纹
- 流量统计特征
4. 行为分析
- 流量模式
- 时序特征
- 包大小分布
5. 主动探测
模拟客户端连接
15.4.2 TLS指纹对抗¶
TLS指纹识别:
TLS握手包含:
- TLS版本
- 加密套件列表
- 扩展字段
- 椭圆曲线类型
不同客户端组合不同:
Chrome TLS指纹 ≠ V2Ray默认指纹
DPI可识别:
"这个TLS握手来自代理工具,不是真实浏览器"
uTLS防指纹:
uTLS = 微型TLS库
模拟真实浏览器指纹
Xray配置:
{
"tlsSettings": {
"fingerprint": "chrome", // 模拟Chrome
// 或 "firefox", "safari", "edge"
"serverName": "your-domain.com"
}
}
效果:
TLS握手完全像Chrome浏览器
DPI无法区分
15.4.3 流量填充¶
Padding技术:
问题:
代理流量有特征:
- 固定包大小
- 特定时序模式
解决:
添加随机填充数据
- 统一包大小
- 随机延迟
- 打乱时序
V2Ray Padding配置:
{
"streamSettings": {
"sockopt": {
"tcpFastOpen": true,
"tproxy": "off"
}
}
}
15.4.4 REALITY协议(新技术)¶
REALITY特点:
REALITY = 真实世界的TLS
✓ 不需要域名
✓ 不需要证书
✓ 完全模拟真实网站TLS
✓ 几乎不可能被识别
工作原理:
1. 选择一个真实大站(如microsoft.com)
2. 客户端TLS握手指向该站点
3. 服务器识别真实用户 vs 探测
4. 真实用户:建立代理连接
5. 探测者:转发到真实网站
配置示例:
{
"security": "reality",
"realitySettings": {
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com"],
"privateKey": "...",
"shortIds": [""]
}
}
15.5 服务器安全加固¶
15.5.1 系统安全配置¶
最小权限原则:
# 不要用root运行代理服务
# 创建专用用户
useradd -r -s /bin/false v2ray
# 修改文件所有权
chown -R v2ray:v2ray /usr/local/etc/v2ray
chown v2ray:v2ray /usr/local/bin/v2ray
# 修改systemd服务
vi /etc/systemd/system/v2ray.service
[Service]
User=v2ray
Group=v2ray
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
禁用不必要服务:
# 查看运行的服务
systemctl list-units --type=service --state=running
# 禁用不需要的服务
systemctl disable bluetooth
systemctl disable cups
systemctl disable avahi-daemon
# 最小化安装:
# 只保留:
# - sshd
# - 代理服务
# - nginx
# - 必要的系统服务
文件权限加固:
# 敏感文件权限
chmod 600 /etc/v2ray/config.json
chmod 600 /etc/ssh/sshd_config
chmod 600 /root/.ssh/authorized_keys
# 日志目录
chmod 755 /var/log/v2ray
chmod 644 /var/log/v2ray/*.log
# 证书文件
chmod 644 /etc/letsencrypt/live/*/fullchain.pem
chmod 600 /etc/letsencrypt/live/*/privkey.pem
15.5.2 入侵检测¶
使用AIDE检测文件篡改:
# 安装AIDE
apt install aide -y
# 初始化数据库
aideinit
# 移动数据库
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 检查文件完整性
aide --check
# 定期检查
crontab -e
0 2 * * * /usr/bin/aide --check | mail -s "AIDE Report" admin@example.com
监控系统调用:
# 安装auditd
apt install auditd -y
# 监控敏感文件
auditctl -w /etc/v2ray/config.json -p wa -k v2ray_config
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
# 查看审计日志
ausearch -k v2ray_config
15.5.3 自动化安全检查¶
定期安全扫描脚本:
#!/bin/bash
# security_check.sh
echo "=== 安全检查报告 $(date) ===" > /tmp/security_report.txt
# 1. 检查开放端口
echo -e "\n[开放端口]" >> /tmp/security_report.txt
netstat -tulnp >> /tmp/security_report.txt
# 2. 检查登录失败
echo -e "\n[登录失败(最近20条)]" >> /tmp/security_report.txt
grep "Failed password" /var/log/auth.log | tail -20 >> /tmp/security_report.txt
# 3. 检查Fail2Ban状态
echo -e "\n[Fail2Ban封禁列表]" >> /tmp/security_report.txt
fail2ban-client status sshd >> /tmp/security_report.txt
# 4. 检查系统更新
echo -e "\n[可用更新]" >> /tmp/security_report.txt
apt list --upgradable >> /tmp/security_report.txt
# 5. 检查磁盘使用
echo -e "\n[磁盘使用]" >> /tmp/security_report.txt
df -h >> /tmp/security_report.txt
# 6. 检查内存使用
echo -e "\n[内存使用]" >> /tmp/security_report.txt
free -h >> /tmp/security_report.txt
# 发送报告
mail -s "服务器安全检查报告" admin@example.com < /tmp/security_report.txt
15.5.4 备份与恢复¶
自动备份脚本:
#!/bin/bash
# backup.sh
BACKUP_DIR="/root/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# 备份配置文件
tar -czf $BACKUP_DIR/config_$DATE.tar.gz \
/etc/v2ray/ \
/etc/nginx/ \
/etc/ssh/ \
/etc/x-ui/ 2>/dev/null
# 备份数据库
if [ -f /etc/x-ui/x-ui.db ]; then
cp /etc/x-ui/x-ui.db $BACKUP_DIR/x-ui_$DATE.db
fi
# 备份证书
tar -czf $BACKUP_DIR/certs_$DATE.tar.gz \
/etc/letsencrypt/ 2>/dev/null
# 删除30天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
find $BACKUP_DIR -name "*.db" -mtime +30 -delete
# 上传到远程(可选)
# rsync -av $BACKUP_DIR/ user@remote:/backups/
echo "备份完成: $DATE"
定时备份:
本章小结¶
本章详细介绍了网络安全防护的各个方面:
核心要点:
-
常见攻击:
- 主动探测:回落机制、密码验证
- DDoS:CloudFlare、流量清洗
- 暴力破解:强密码、限制尝试
- MITM:证书验证、HSTS
- 流量分析:填充、混淆
-
端口伪装:
- 使用443端口
- 端口复用技术
- SNI分流
- Fallback机制
-
流量混淆:
- WebSocket伪装
- HTTP/2混淆
- gRPC传输
- mKCP伪装头
-
防DPI:
- TLS指纹对抗
- uTLS技术
- 流量填充
- REALITY协议
-
服务器加固:
- 最小权限原则
- 入侵检测
- 安全扫描
- 定期备份
安全建议:
必做:
✓ 使用TLS加密
✓ 配置Fallback
✓ 启用CloudFlare CDN
✓ 定期更新系统
✓ 定期备份配置
推荐:
✓ 使用REALITY/Trojan
✓ 配置入侵检测
✓ 监控异常流量
✓ 实施访问控制
高级:
✓ TLS指纹混淆
✓ 多层防护
✓ 流量分析对抗
安全层次:
下一章我们将学习隐私保护的实践技巧。
实践任务:
- 配置Fallback机制
- 启用CloudFlare CDN
- 部署入侵检测
- 创建备份脚本
- 进行安全审计