1.
准备工作与前提
- 操作系统:建议使用 Debian/Ubuntu LTS 或 CentOS 7/8。
- 账户与权限:需要 root 权限或 sudo。建议先创建非 root 管理账号并配置 sudo。
- 端口与网络:确认 VPS 提供商允许 UDP 500/4500/1701,若被屏蔽需联系商家或改用其他方案(如 WireGuard/SSL VPN)。
2.
安装必要软件(Debian/Ubuntu 示例)
- 更新系统:sudo apt update && sudo apt upgrade -y。
- 安装 strongSwan + xl2tpd + ppp:sudo apt install strongswan xl2tpd ppp -y。
- 安装防护工具:sudo apt install ufw fail2ban tcpdump -y(CentOS 使用 yum/dnf 对应命令)。
3.
配置 IP 转发与内核参数
- 启用转发:编辑 /etc/sysctl.conf,确保 net.ipv4.ip_forward=1。然后 sudo sysctl -p。
- MSS/MTU 调整:为避免分片,添加 iptables 规则(后节展示),并在 /etc/ppp/options.xl2tpd 中添加 +mtu 1400 +mru 1400。
4.
strongSwan(IPsec)基础配置
- /etc/ipsec.conf(示例要点):
conn L2TP-PSK
authby=psk
auto=add
keyexchange=ikev1
type=transport
left=%any
leftsubnet=0.0.0.0/0
right=%any
rightprotoport=17/1701
ike=aes256-sha256-modp2048
esp=aes256-sha256
- /etc/ipsec.secrets 中加入:your.vps.ip : PSK "替换为强预共享密钥"(PSK 至少 32 字符并用随机生成工具)。
5.
使用证书替代 PSK(更高安全性)
- 生成 CA 与服务器证书(strongSwan pki 示例):
ipsec pki --gen --outform pem > ca.key
ipsec pki --self --in ca.key --dn "CN=MyCA" --ca --outform pem > ca.crt
ipsec pki --gen --outform pem > server.key
ipsec pki --pub --in server.key | ipsec pki --issue --cacert ca.crt --cakey ca.key --dn "CN=your.vps.domain" --san your.vps.ip --outform pem > server.crt
- 在 ipsec.conf 用 leftcert=server.crt,leftsendcert=always 替换 PSK 配置;客户端需安装 CA 及客户端证书或使用 EAP 认证。
6.
xl2tpd 与 PPP 配置
- /etc/xl2tpd/xl2tpd.conf 最小配置:
[global]
listen-addr = your.vps.ip
[lns default]
ip range = 10.0.0.10-10.0.0.100
local ip = 10.0.0.1
require chap = yes
- /etc/ppp/chap-secrets 添加用户:username l2tpd "强密码" *
注意:chap-secrets 是明文,尽量使用较长随机密码或考虑使用证书/EAP。并把文件权限设为 600。
7.
iptables/nftables 防护与 NAT
- 基本规则(iptables 示例):
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 1701 -j ACCEPT
sudo iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
- 限制 SSH 登录来源:只允许管理员 IP 访问 22 端口,例如 sudo iptables -A INPUT -p tcp --dport 22 -s 管理IP -j ACCEPT;默认 DROP。
- 保存规则:sudo apt install iptables-persistent 并保存或使用 nftables 并写入启动脚本。
8.
防止 DNS 泄露与强制 DNS
- 指定 VPN 推送 DNS:在 PPP 配置里加入 ms-dns 8.8.8.8 ms-dns 1.1.1.1(或设置内部 dnsmasq)。
- 强制客户端走 VPS DNS:iptables 重定向所有出站 53 到本地 DNS:
sudo iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p udp --dport 53 -j REDIRECT --to-ports 53
- 若使用 systemd-resolved,请配置本地解析并拒绝外部 DNS 直连。
9.
日志与监控:检测暴力与异常流量
- 开启 strongSwan 日志:在 /etc/strongswan.conf 设置 logging,并重载服务。
- 配置 fail2ban:创建 /etc/fail2ban/jail.d/ipsec.conf 监控 ipsec、xl2tpd、ssh 日志,设置短时间多次失败自动封禁。
- 使用 tcpdump/tshark 定期抓包分析可疑连接(仅限白盒审计),避免长时间保存敏感日志。
10.
限速、连接数与会话管理
- 限制单个账号并发:在 ppp 配置中使用 maxsessions 或在管理脚本里检测同一用户的多个会话并断开。
- 使用 conntrack 或 iptables 对每个源 IP 限制新连接速率,防止 SYN/UDP 洪泛:
sudo iptables -A INPUT -p udp --dport 1701 -m limit --limit 10/min --limit-burst 20 -j ACCEPT。
11.
补丁、账户与密钥管理
- 定期更新系统与 strongSwan/xl2tpd,订阅安全公告。
- 管理密钥:PSK 与证书私钥仅保存在受限目录,权限 600,定期更换密钥(例如每 6 个月)。
- 账号管理:使用复杂密码策略,若可能启用 MFA(基于证书或外部认证如 RADIUS/EAP)。
12.
常见故障与排查步骤(简要流程)
- 如果客户端无法建立:检查服务端端口(udp/500,4500,1701)、iptables 是否放行、sysctl ip_forward、IPsec 日志(/var/log/syslog 或 /var/log/auth.log)。
- 若有 DNS 泄露:用在线工具或在客户端运行 nslookup 默认解析,检查是否返回 VPS 内部 DNS。若不是,检查 iptables 重定向与 PPP ms-dns 设置。
13.
问:在香港 VPS 上是否应优先使用 PSK 还是证书?
答:优先使用证书(CA 签发的服务器证书 + 客户端证书或 EAP),因为证书能提供更细粒度认证与更强的抗窃听性。只有在短期、受控环境下可以用强 PSK,且 PSK 必须随机且足够长。
14.
问:如何防止用户侧的 DNS 泄露最可靠?
答:服务端强制推送并拦截客户端对外 DNS 请求:设置 PPP 推送 ms-dns 并在 VPS 上用 iptables 将 10.0.0.0/24 的 53 端口重定向到本地解析器,同时禁止从 VPN 网段直接访问外部 DNS,从而保障解析通过 VPS。
15.
问:被攻击时我应该怎样快速响应?
答:立即禁用受影响服务(systemctl stop ipsec xl2tpd),查看日志定位 IP 并用 iptables 临时封禁(-A INPUT -s 攻击IP -j DROP),保存抓包(tcpdump -w),启用 fail2ban 规则并在修补后更换证书/PSK 与受影响账号密码,随后恢复并持续监控。
来源:安全建议在香港vps搭建l2tp时如何防止常见攻击与泄露