在不绑定域名的情况下,几种提升账户密码安全性的方式

在不绑定域名的情况下,直接通过 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 输入的用户名和密码会被拦截或泄露。