跳转至

第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伪装类型:

{
  "kcpSettings": {
    "header": {
      "type": "wechat-video"  // 伪装类型
    }
  }
}

支持的伪装类型:

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"

定时备份:

crontab -e
# 每天凌晨2点备份
0 2 * * * /root/scripts/backup.sh >> /var/log/backup.log 2>&1

本章小结

本章详细介绍了网络安全防护的各个方面:

核心要点:

  1. 常见攻击

    • 主动探测:回落机制、密码验证
    • DDoS:CloudFlare、流量清洗
    • 暴力破解:强密码、限制尝试
    • MITM:证书验证、HSTS
    • 流量分析:填充、混淆
  2. 端口伪装

    • 使用443端口
    • 端口复用技术
    • SNI分流
    • Fallback机制
  3. 流量混淆

    • WebSocket伪装
    • HTTP/2混淆
    • gRPC传输
    • mKCP伪装头
  4. 防DPI

    • TLS指纹对抗
    • uTLS技术
    • 流量填充
    • REALITY协议
  5. 服务器加固

    • 最小权限原则
    • 入侵检测
    • 安全扫描
    • 定期备份

安全建议:

必做:
✓ 使用TLS加密
✓ 配置Fallback
✓ 启用CloudFlare CDN
✓ 定期更新系统
✓ 定期备份配置

推荐:
✓ 使用REALITY/Trojan
✓ 配置入侵检测
✓ 监控异常流量
✓ 实施访问控制

高级:
✓ TLS指纹混淆
✓ 多层防护
✓ 流量分析对抗

安全层次:

基础安全(必须):
- TLS加密
- 强密码
- 防火墙

中级安全(推荐):
- 流量伪装
- 回落机制
- CDN保护

高级安全(进阶):
- DPI对抗
- 指纹混淆
- 多层代理

下一章我们将学习隐私保护的实践技巧。


实践任务:

  1. 配置Fallback机制
  2. 启用CloudFlare CDN
  3. 部署入侵检测
  4. 创建备份脚本
  5. 进行安全审计