环境准备与安全基线:双平台搭建与SSH加固
说实话,很多人在搭建远程隧道时,第一步就栽了跟头。不是系统没装好,就是防火墙漏了个口子,最后被扫描工具盯上。我见过太多这样的案例了。
这一章,咱们就把地基打牢。Linux和Windows双平台的环境准备、最小化安装、防火墙规则、SSH安全加固——一步到位。
2.1 双平台环境搭建:Linux与Windows
我个人习惯把Linux作为隧道服务端,Windows作为客户端或备用服务端。为什么?Linux在资源占用和稳定性上确实有优势,但Windows在某些企业环境里绕不开。
2.1.1 Linux 环境(以 Ubuntu 22.04 LTS 为例)
最小化安装是关键。别装桌面环境,别装不必要的服务。你想想看,一个跑隧道的机器,装个GUI干嘛?白白增加攻击面。
推荐安装选项:
- 仅安装 OpenSSH server
- 不安装桌面环境、打印服务、蓝牙驱动
- 磁盘分区:/boot 512MB,swap 2GB,其余给 /
安装完成后,第一件事就是更新系统:
sudo apt update && sudo apt upgrade -y
sudo apt install openssh-server ufw curl -y
嗯,这里要注意。安装完成后检查SSH服务状态:
sudo systemctl status ssh
如果没启动,手动拉起来:
sudo systemctl enable --now ssh
2.1.2 Windows 环境(Windows Server 2022 / Windows 10/11)
Windows上我推荐用OpenSSH for Windows,这是微软官方移植的版本,稳定性和兼容性都不错。
安装方式有两种:
| 方式 | 命令/操作 | 说明 |
|---|---|---|
| 图形化安装 | 设置 → 应用 → 可选功能 → 添加OpenSSH服务器 | 适合新手,但批量部署效率低 |
| 命令行安装 | Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 |
适合自动化脚本,我常用这个 |
安装后启动服务:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
小技巧:Windows防火墙默认会放行SSH端口(22),但如果你改了端口,记得手动添加规则。我曾经因为忘了这步,折腾了半小时才连上。
2.2 最小化安装原则:少即是多
这个原则我反复强调。你装的服务越多,漏洞就越多。说白了,隧道服务器只需要三样东西:操作系统内核、SSH服务、网络工具。
我列一个典型的“禁止安装清单”:
- Web服务器(Apache/Nginx)——除非你明确需要
- 数据库(MySQL/PostgreSQL)——隧道服务器不需要
- 图形界面(X11/GNOME/KDE)——纯属浪费资源
- 开发工具链(GCC/Go/Rust)——编译型攻击工具的最爱
- Samba/NFS——文件共享服务,容易成为跳板
警告:我曾经接手过一个项目,前同事在隧道服务器上装了全套LAMP环境,结果被黑客利用phpMyAdmin的漏洞拿下了root权限。记住:隧道服务器不是通用服务器,别当万能工具箱用。
2.3 防火墙规则配置:只开该开的门
防火墙是隧道安全的第一道防线。我的原则是:默认拒绝,按需放行。
2.3.1 Linux 防火墙(UFW)
# 默认拒绝所有入站
sudo ufw default deny incoming
# 默认允许所有出站
sudo ufw default allow outgoing
# 放行SSH(假设你还没改端口)
sudo ufw allow 22/tcp
# 如果改了端口,比如2222
sudo ufw allow 2222/tcp
# 启用防火墙
sudo ufw enable
检查规则:
sudo ufw status verbose
2.3.2 Windows 防火墙(PowerShell)
# 新建入站规则,放行SSH端口(以2222为例)
New-NetFirewallRule -DisplayName "SSH Tunnel" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
# 阻止其他所有入站(默认策略)
Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultInboundAction Block
避坑指南:我曾经在配置Windows防火墙时,忘了设置-Profile参数,结果规则只对Domain网络生效,Public网络下端口还是开放的。建议显式指定所有网络配置文件。
2.4 SSH 服务安全加固:三道锁
SSH是隧道的大门。门锁不牢,隧道再安全也没用。我总结了三道锁:密钥登录、禁用root、修改端口。
2.4.1 密钥登录:告别密码
密码登录太容易被暴力破解了。你想想看,一个8位纯数字密码,用GPU跑字典,几秒钟就出来了。
生成密钥对:
# 客户端执行
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/tunnel_key
为什么用ed25519?它比RSA更安全,性能更好,密钥长度更短。我个人从2019年开始全面转向ed25519,再没用过RSA。
复制公钥到服务器:
ssh-copy-id -i ~/.ssh/tunnel_key.pub user@server_ip
然后修改SSH配置文件/etc/ssh/sshd_config:
# 禁用密码登录
PasswordAuthentication no
# 仅允许密钥登录
PubkeyAuthentication yes
# 指定授权密钥文件路径(默认即可)
AuthorizedKeysFile .ssh/authorized_keys
2.4.2 禁用root登录:降低风险
root账户是黑客的第一目标。禁用root直接登录,改用普通用户+sudo,这是基本操作。
# 在sshd_config中
PermitRootLogin no
创建一个普通用户:
sudo adduser tunneluser
sudo usermod -aG sudo tunneluser
注意:禁用root登录后,确保你创建的普通用户有sudo权限,否则你连提权都做不了。我见过有人把自己锁在服务器外面,最后只能去机房接显示器重置密码。
2.4.3 修改端口:避开扫描器
默认端口22是扫描器的首选。改成一个高位端口,能过滤掉90%的自动化扫描。
# 在sshd_config中
Port 2222
# 或者用多个端口(不推荐,增加攻击面)
# Port 22
# Port 2222
改完端口后,别忘了更新防火墙规则:
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
重启SSH服务:
sudo systemctl restart ssh
2.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个检查清单:
2.6 验证与测试
配置完成后,别急着用。先做一轮验证:
- 本地测试:在服务器上执行
ssh localhost -p 2222,确认能连上 - 远程测试:从客户端用密钥登录,确认密码登录已被禁用
- 防火墙测试:用nmap扫描服务器,确认只有SSH端口开放
- root测试:尝试用root直接登录,确认被拒绝
我的习惯:每次改完SSH配置,我都会开两个终端窗口。一个用来改配置,另一个保持登录状态。改完后先不重启服务,而是用sshd -t检查语法。确认无误再重启。这样就算配错了,也不会把自己踢出去。
好了,环境准备和安全基线就到这里。这些步骤看起来琐碎,但每一条都是用教训换来的。别偷懒,老老实实走一遍,后面搭建隧道的时候你会感谢现在的自己。