InfrawireInfrawire 标志文档

保护 SSH 连接

保护 SSH 连接以防止暴力破解攻击

默认的 SSH 端口 (22) 经常成为自动化暴力破解攻击的目标。本指南将教您如何更改 SSH 端口并配置其他安全选项以保护您的服务器。

📋 先决条件

  • 具有 root 或 sudo 访问权限的 VPS 服务器
  • 活动的 SSH 连接
  • 已安装并配置 UFW(请参阅教程 安装 UFW

⚠️ 重要:保持 SSH 会话打开

并行打开 两个 SSH 终端

  • 终端 1:工作会话(用于进行修改)
  • 终端 2:备份会话(以防万一)

🔧 更改 SSH 端口

步骤 1:选择新端口

选择一个介于 1024 和 65535 之间的端口。要避免的常用端口:

  • 22(默认 SSH 端口,经常被攻击)
  • 80, 443 (HTTP/HTTPS)
  • 3306, 5432 (数据库)

安全端口示例:2222, 2200, 1022, 5000

步骤 2:修改 SSH 配置

Bash
# 编辑 SSH 配置文件 sudo nano /etc/ssh/sshd_config

步骤 3:更改端口

找到 #Port 22 行并修改:

# 之前
#Port 22

# 之后(将 2222 替换为您选择的端口)
Port 2222

提示: 在 nano 中使用 Ctrl + W 搜索 "Port 22"

步骤 4:保存并退出

在 nano 中:

  • Ctrl + X 退出
  • Y 确认
  • Enter 保存

步骤 5:验证语法

Bash
# 验证配置是否有效 sudo sshd -t

如果此命令不返回任何错误,则您的配置是正确的。

步骤 6:在 UFW 中允许新端口

Bash
1# 允许新的 SSH 端口(将 2222 替换为您的端口) 2sudo ufw allow 2222/tcp 3 4# 可选:如果不再使用旧端口 22,则删除它 5sudo ufw delete allow 22/tcp 6 7# 重新加载 UFW 8sudo ufw reload 9 10# 验证规则是否激活 11sudo ufw status | grep 2222

步骤 7:重启 SSH 服务

Bash
1# 使用新配置重启 SSH 2sudo systemctl restart sshd 3 4# 验证 SSH 是否仍在工作 5sudo systemctl status sshd

步骤 8:测试新连接

新终端 中,使用新端口测试连接:

Bash
# 将 2222 替换为您的端口,将 user@your-ip 替换为您的凭据 ssh -p 2222 user@your-ip

如果连接有效,您可以关闭端口 22 上的旧会话。

🔒 其他安全选项

禁用 root 登录

Bash
1# 编辑 SSH 配置 2sudo nano /etc/ssh/sshd_config 3 4# 找到并修改此行 5PermitRootLogin no 6 7# 保存并重启 8sudo sshd -t 9sudo systemctl restart sshd

限制连接尝试

Bash
1sudo nano /etc/ssh/sshd_config 2 3# 添加或修改这些行 4MaxAuthTries 3 # 最多 3 次连接尝试 5LoginGraceTime 30 # 30 秒连接超时

禁用密码身份验证(仅使用 SSH 密钥)

Bash
1sudo nano /etc/ssh/sshd_config 2 3# 修改此行 4PasswordAuthentication no 5PubkeyAuthentication yes

仅使用 SSH 协议版本 2

Bash
sudo nano /etc/ssh/sshd_config # 添加此行(如果不存在) Protocol 2

禁用 X11 隧道(如果您不需要)

Bash
sudo nano /etc/ssh/sshd_config # 修改此行 X11Forwarding no

推荐的完整配置

以下是在 /etc/ssh/sshd_config 中添加的完整安全 SSH 配置:

# 自定义 SSH 端口
Port 2222

# 禁用 root 登录
PermitRootLogin no

# 连接限制
MaxAuthTries 3
LoginGraceTime 30

# 禁用密码身份验证(如果您使用 SSH 密钥)
# PasswordAuthentication no
# PubkeyAuthentication yes

# 仅 SSH 协议版本 2
Protocol 2

# 禁用 X11 转发
X11Forwarding no

# 禁用 TCP 隧道
AllowTcpForwarding no

# 断开连接前的非活动超时
ClientAliveInterval 300
ClientAliveCountMax 2

每次修改后,不要忘记:

Bash
1# 验证语法 2sudo sshd -t 3 4# 重启 SSH 5sudo systemctl restart sshd

🔄 创建具有 sudo 的用户(如果需要)

如果您已禁用 root 登录,请确保您有一个具有 sudo 权限的用户:

Bash
1# 创建新用户 2sudo adduser myuser 3 4# 将用户添加到 sudo 组 5sudo usermod -aG sudo myuser 6 7# 测试用户是否可以使用 sudo 8su - myuser 9sudo whoami 10# 应该显示 "root"

✅ 最终验证

验证 SSH 是否工作

Bash
1# 检查服务状态 2sudo systemctl status sshd 3 4# 验证 SSH 是否在正确的端口上监听 5sudo netstat -tlnp | grep ssh 6# 或 7sudo ss -tlnp | grep ssh 8 9# 验证配置 10sudo sshd -T | grep port

验证 SSH 日志

Bash
1# 查看连接尝试 2sudo tail -f /var/log/auth.log 3 4# 查看成功连接 5sudo grep "Accepted" /var/log/auth.log 6 7# 查看失败尝试 8sudo grep "Failed" /var/log/auth.log

🛡️ 使用 fail2ban 提供额外保护

fail2ban 是一个自动阻止尝试暴力破解攻击的 IP 的工具。

安装 fail2ban

Bash
sudo apt update sudo apt install fail2ban -y

基本配置

Bash
1# 复制配置文件 2sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 3 4# 编辑配置 5sudo nano /etc/fail2ban/jail.local

SSH 的推荐配置:

INI
1[sshd] 2enabled = true 3port = 2222 # 您的新 SSH 端口 4maxretry = 3 # 封禁前的尝试次数 5bantime = 3600 # 封禁时间(秒)(1 小时) 6findtime = 600 # 计算尝试的时间窗口(10 分钟)

启用 fail2ban

Bash
1# 启动 fail2ban 2sudo systemctl start fail2ban 3 4# 开机自启 5sudo systemctl enable fail2ban 6 7# 检查状态 8sudo systemctl status fail2ban 9 10# 查看被封禁的 IP 11sudo fail2ban-client status sshd

🆘 故障排除

无法再通过 SSH 连接

如果您被锁定在服务器之外:

  1. 使用您的备份会话(您保持打开的终端 2)

  2. 如果您没有备份会话

    • 使用您的凭据联系 Infrawire 支持
    • 从控制面板使用 VNC/KVM 控制台
    • 直接连接并恢复旧配置:
      Bash
      sudo nano /etc/ssh/sshd_config # 将 Port 22 放回 sudo systemctl restart sshd

SSH 端口无响应

Bash
1# 验证 SSH 是否在端口上监听 2sudo netstat -tlnp | grep ssh 3 4# 验证端口是否在 UFW 中打开 5sudo ufw status | grep 2222 6 7# 检查 SSH 日志 8sudo journalctl -u sshd -n 50

需要临时使用旧端口连接

如果您需要在删除旧端口 (22) 之前连接到它:

Bash
1# 临时允许端口 22 2sudo ufw allow 22/tcp 3 4# 连接 5ssh -p 22 user@your-ip 6 7# 连接后,删除规则 8sudo ufw delete allow 22/tcp

📚 其他资源

❓ 常见问题

问:我应该为 SSH 选择什么端口?
答:选择一个介于 1024 和 65535 之间的端口。避免常用端口(80, 443, 3306 等)。端口如 2222, 2200 或 1022 是不错的选择。

问:我可以为多个服务使用同一个端口吗?
答:不可以,每个服务必须有自己的唯一端口。

问:我真的需要更改 SSH 端口吗?
答:强烈推荐。这大大减少了自动化暴力破解攻击。

问:如果我更改了端口,fail2ban 是否必要?
答:不是,但这是一个推荐的额外安全层。

问:如何从 SSH 客户端使用新端口连接?
答:使用 -p 选项:ssh -p 2222 user@your-ip


安全配置顺利!🚀