这是一个基于 NAT 转发、流量伪装与安全加固的综合方案。本方案用于共享服务器的互联网连接给局域网内其他机器,但同时希望路由信息不被互联网接入点的防火墙监测到。也就是说,不让防火墙检测到有多个终端连接到互联。
一、核心目标与场景需求
隐蔽性要求
- 隐藏内网客户端真实 IP 地址,防止外网直接溯源。
- 通过动态 NAT 和端口混淆降低流量特征,规避网络行为分析。
- 限制非必要协议(如 ICMP 异常类型)的暴露,减少攻击面。
多客户端支持
- 允许内网多设备通过单一公网 IP 访问外网资源。
- 支持流量负载均衡与动态路由优化(如多 ISP 出口场景)。
安全基线
- 防止暴力破解、端口扫描等常见攻击手段。
- 确保配置持久化与规则自动加载。
二、关键技术实现
动态 NAT 伪装与端口混淆
# 动态 SNAT 配置(伪装外网接口)
sudo iptables -t nat -A POSTROUTING -o enp37s0f1 -j MASQUERADE
# 随机化源端口范围(降低流量特征)
sudo sysctl -w net.ipv4.ip_local_port_range="20000 65535"
原理:将内网流量源 IP 和端口动态映射为外网接口地址,避免固定模式暴露。
多客户端路由策略
# 策略路由:按客户端 IP 段分流(需多网卡支持)
ip rule add from 192.168.1.0/24 table 100
ip route add default via 10.0.0.1 dev enp37s0f1 table 100
应用场景:当服务器配备多外网接口时,可实现客户端分流与带宽优化。
协议与流量控制
# 放行基础 ICMP 请求(类型 8/0),阻断其他类型
sudo iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
sudo iptables -A FORWARD -p icmp --icmp-type echo-reply -j ACCEPT
sudo iptables -A FORWARD -p icmp -j DROP
# 强制 DNS 流量通过代理(防止日志泄露)
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 5353
隐蔽性:限制 ICMP 协议暴露,并通过 DNS 重定向防止内网查询日志泄露。
三、安全加固配置(可选)
SSH 服务隐蔽化
# 修改默认端口并限制登录 IP
sudo sed -i 's/#Port 22/Port 58722/g' /etc/ssh/sshd_config
sudo echo "AllowUsers youruser@192.168.1.0/24" >> /etc/ssh/sshd_config
# 启用密钥认证并禁用密码登录
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
防护效果:降低 99% 的暴力破解风险。
防火墙与入侵检测
# UFW 基础规则(隐藏非必要端口)
sudo ufw default deny incoming
sudo ufw allow 58722/tcp comment 'SSH Hidden Port'
# 集成 Fail2Ban 防御扫描
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
日志监控:实时拦截异常登录尝试和端口扫描行为。
四、隐蔽性增强技巧(可选)
流量伪装与协议混淆
- Tor 桥接模式:将部分流量通过 Tor 网络转发(需客户端配合)。
- HTTP 伪装隧道:使用 socat 将 TCP 流量封装为 HTTPS 协议。
内核级优化
# 禁用 ICMP 时间戳响应
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
# 关闭 IPv6 协议(若无需使用)
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
作用:减少协议特征,规避基于 ICMP 的网络探测。
五、持久化与维护
规则固化与自动加载
# 保存 iptables 规则
sudo iptables-save -f /etc/iptables/rules.v4
# 配置 systemd 服务依赖(网络就绪后加载)
sudo systemctl edit netfilter-persistent
添加内容:
[Unit]
After=network-online.target
Wants=network-online.target
验证命令:systemctl status netfilter-persistent
自动化维护脚本
#!/bin/bash
# 每日规则备份与日志清理
cp /etc/iptables/rules.v4 /backup/iptables_$(date +%F).v4
journalctl --vacuum-time=7d
建议:通过 cron 定时任务执行关键配置校验。
六、验证与测试
隐蔽性检测
# 外网视角扫描测试
nmap -Pn -sT -p- --script=default <公网IP>
# 流量特征分析(Wireshark 抓包)
sudo tcpdump -i enp37s0f1 'icmp or tcp port 58722' -w trace.pcap
预期结果:仅开放指定隐蔽端口,ICMP 响应符合白名单规则。
多客户端负载测试
# 模拟并发连接(使用 ApacheBench)
ab -n 1000 -c 50 http://external-site.com/
监控指标:通过 iftop 或 nethogs 观察各客户端带宽分配均衡性。
七、总结与扩展建议
技术方向 | 推荐工具/方法 | 隐蔽性等级 |
---|---|---|
协议混淆 | Shadowsocks + Obfsproxy | ★★★★☆ |
动态路由 | WireGuard VPN + 策略路由 | ★★★★☆ |
日志混淆 | Logrotate + 虚假流量生成器 | ★★★☆☆ |
引用说明
- frp 反向代理实现内网穿透
- Linux 用户权限与口令安全
- 网络性能优化与 TCP 堆栈调整
- iptables 规则持久化方法
- SSH 安全加固与防火墙配置
- 多网卡路由策略与 NAT 配置
- Netplan 静态 IP 配置
- Systemd 服务依赖管理
- Fail2Ban 防御暴力破解
- 防火墙与路由表高级配置