1. 升级TigerVNC至最新版本
确保系统安装最新版TigerVNC(≥1.12),旧版本可能存在未修复的安全漏洞。使用以下命令更新:
sudo apt update && sudo apt install tigervnc-standalone-server tigervnc-common -y
2. 设置强密码并管理访问权限
使用vncpasswd命令创建复杂VNC密码(避免弱密码如123456、password),并定期更换(建议每3个月更换一次)。为减少攻击面,避免使用root用户直接登录,新建普通用户并加入sudo组:
sudo adduser your_username # 新建用户
sudo usermod -aG sudo your_username # 加入sudo组
再为用户设置VNC密码:
su - your_username
vncpasswd
3. 配置SSH隧道加密传输
通过SSH隧道将VNC流量加密,避免直接暴露VNC端口(默认5901)到公网。在本地计算机执行以下命令创建隧道:
ssh -L 5901:localhost:5901 your_username@your_server_ip
然后在VNC客户端连接localhost:5901,无需修改VNC服务器配置即可实现端到端加密。
4. 配置防火墙限制访问
使用ufw(Ubuntu默认防火墙)仅允许信任IP访问VNC端口(如5901)。若未安装ufw,先执行sudo apt install ufw,然后运行:
sudo ufw allow from trusted_ip to any port 5901/tcp # 替换trusted_ip为信任的IP地址
sudo ufw enable # 启用防火墙
sudo ufw reload # 重新加载规则
5. 启用TLS/SSL加密(可选但推荐)
为进一步提升传输安全性,可配置TigerVNC使用TLS加密。首先生成自签名证书(需OpenSSL):
mkdir -p ~/.vnc/x509
cp /etc/ssl/openssl.cnf ~/.vnc/x509/
echo "[subject_alt_name]" >> ~/.vnc/x509/openssl.cnf
echo "subjectAltName=IP:your_server_ip" >> ~/.vnc/x509/openssl.cnf # 替换为服务器IP
openssl req -x509 -newkey rsa:2048 -days 365 -nodes -config ~/.vnc/x509/openssl.cnf -keyout ~/.vnc/x509/vnc-server.key -out ~/.vnc/x509/vnc-server.crt
编辑VNC配置文件(~/.vnc/config),添加以下内容启用TLS:
SecurityTypes TLSVnc,X509Vnc
X509KeyFile ~/.vnc/x509/vnc-server.key
X509CertFile ~/.vnc/x509/vnc-server.crt
重启VNC服务使配置生效:
vncserver -kill :1 # 杀死现有会话
vncserver :1 # 重启服务
6. 禁用图形加速(可选)
若使用环境对显卡支持要求低,可禁用图形加速以减少潜在漏洞。编辑~/.vnc/xstartup文件,在启动桌面环境前添加:
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
保存后赋予执行权限:
chmod +x ~/.vnc/xstartup
7. 限制用户访问权限
通过系统用户组控制VNC访问,仅允许授权用户使用。创建vncusers组并将授权用户加入:
sudo groupadd vncusers
sudo usermod -aG vncusers your_username # 替换为授权用户
修改VNC服务配置文件(/etc/systemd/system/vncserver@:1.service),将运行用户改为普通用户及vncusers组:
User your_username
Group vncusers
重启服务应用更改:
sudo systemctl daemon-reload
sudo systemctl restart vncserver@:1.service
8. 监控与日志审计
定期检查VNC日志(通常位于/var/log/syslog或journalctl -u vncserver@:1.service),监控异常连接(如频繁失败的登录尝试)。可使用fail2ban工具自动封禁恶意IP:
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local,启用VNC jail:
[vnc]
enabled = true
port = 5901
filter = vnc
logpath = /var/log/syslog
maxretry = 3
bantime = 3600
重启fail2ban服务:
sudo systemctl restart fail2ban