在不绑定域名的情况下,直接通过 IP 和端口号访问 VPS 的后台管理页面,存在一定的安全风险,特别是账户密码可能在传输过程中被窃取或暴露。以下是几种提升账户密码安全性的方式:
1. 使用 HTTPS 加密通信
确保你的 VPS 后台页面使用 HTTPS 而不是 HTTP。HTTPS 会加密数据传输,防止中间人攻击。
如果你没有域名,可以使用 VPS 的 IP 生成自签名证书。虽然浏览器会显示安全警告,但通信依然是加密的。
具体步骤:
生成自签名证书(使用 openssl 生成证书)。
在你的服务配置中启用 HTTPS,并指向生成的证书和密钥。
2. VPN 或 SSH 隧道
另一种更安全的方法是将 VPS 服务隐藏在一个 VPN 或通过 SSH 隧道进行访问,只有连接了 VPN 或通过 SSH 隧道的用户才能访问 VPS 服务。
使用 SSH 隧道:
你也可以通过 SSH 隧道将 Jenkins 或 ISPConfig 后台的服务安全地转发到本地。例如:
在本地机器上执行以下命令:
ssh -L local_port:localhost:remote_port user@vps_ip
- -L:表示本地端口转发。
- local_port:本地机器上要绑定的端口。你可以选择任意空闲端口,比如 8080。
- localhost:表示连接的是远程服务器的 localhost,因为服务在远程服务器上运行。
- remote_port:远程服务器上的端口号,如 Jenkins 的 8080 端口。
- user@vps_ip:你用来登录 VPS 的 SSH 用户和 VPS 的 IP 地址。
然后在本地浏览器中访问 localhost:8080,实际流量会通过 SSH 隧道传输到 VPS 上的 Jenkins 服务。
多个端口转发:
你可以转发多个端口,假设你还要转发 ISPConfig 后台(假设端口是 8443),命令如下:
ssh -L 8080:localhost:8080 -L 8443:localhost:8443 user@your_vps_ip
这样,你可以通过 http://localhost:8080 访问 Jenkins,通过 https://localhost:8443 访问 ISPConfig 后台。
将端口更改为一个不常用的高位端口(例如 49152-65535 范围的端口),减少被扫描的可能性。
后台运行 SSH 隧道
如果你希望 SSH 隧道在后台运行,可以使用 -f 和 -N 参数:
- -f:SSH 会在认证成功后转入后台。
- -N:告诉 SSH 不执行任何命令,仅用于端口转发。
ssh -f -N -L 8080:localhost:8080 user@your_vps_ip
这个命令会将 SSH 隧道转到后台运行,并且不会启动远程命令,仅用于端口转发。
** 自动保持 SSH 隧道连接(autossh)**
为了确保 SSH 隧道在连接断开后自动重连,你可以使用 autossh 工具。
安装 autossh:
sudo apt install autossh
使用 autossh 保持隧道连接:
autossh -M 20000 -f -N -L 8080:localhost:8080 user@your_vps_ip
- f:后台运行。
- N:不执行远程命令,仅进行端口转发。
- L:进行本地端口转发。
- M 20000:指定本地端口 20000 用来监控连接状态。如果 SSH 会话断开,autossh 会自动尝试重连。
启用 Fail2Ban
安装并配置 Fail2Ban,它会自动封禁尝试暴力破解 SSH 或其他服务的 IP。
安装 Fail2Ban:
sudo apt install fail2ban
配置 Fail2Ban:
Fail2Ban 的默认配置已经适用于 SSH,你可以调整其参数来应对更多攻击,具体文件位于 /etc/fail2ban/jail.local。
\[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
重启 Fail2Ban 以应用设置:
sudo systemctl restart fail2ban
在使用 SSH 隧道进行本地端口转发时,即使通过 HTTP 协议(即没有 SSL/TLS 加密),也不会有安全风险。
通过 SSH 隧道进行本地端口转发访问 Jenkins,即使使用 HTTP 而非 HTTPS,登录过程依然是安全的,因为所有流量已经被 SSH 加密。你无需担心通过 http://localhost:9090 输入的用户名和密码会被拦截或泄露。