适用场景:新购 Ubuntu 云服务器,初始使用 root 登录,希望新增普通管理员用户 ahui,保留“用户名 + 密码”登录方式,将 SSH 端口从 22 修改为自定义端口,并配置基础防爆破措施。


一、最终配置目标

本次最终配置如下:

系统:Ubuntu 24.04.4 LTS
普通用户:ahui
家目录:/home/ahui
sudo 权限:已启用
SSH 端口:22222
SSH 密码登录:允许
root 直接 SSH 登录:禁止
Fail2ban:已启用
Fail2ban 规则:10 分钟内失败 5 次,封禁 1 小时
UFW:未启用
云平台安全组:开放 TCP 22222,关闭 TCP 22

最终登录方式:

MobaXterm / SSH 客户端
        ↓
服务器IP:22222
        ↓
ahui + 密码
        ↓
sudo
        ↓
root 权限

二、创建 ahui 用户

新服务器最初使用 root 登录:

whoami
id

确认:

root
uid=0(root) gid=0(root) groups=0(root)

创建新用户:

adduser ahui

按照提示设置密码。

其他信息例如:

Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:

可以直接回车跳过。

最后确认:

Is the information correct? [Y/n]

输入:

Y

检查用户:

id ahui

实际结果:

uid=1003(ahui) gid=1003(ahui) groups=1003(ahui),100(users)

检查家目录:

ls -ld /home/ahui

实际结果:

drwxr-x--- 2 ahui ahui ... /home/ahui

三、授予 ahui sudo 权限

使用 root 执行:

usermod -aG sudo ahui

确认用户组:

groups ahui

结果:

ahui : ahui sudo users

切换到 ahui:

su - ahui

确认:

whoami
pwd
groups

预期:

ahui
/home/ahui
ahui sudo users

测试 sudo:

sudo whoami

输入 ahui 的密码后应输出:

root

至此,ahui 已成为可以使用 sudo 的普通管理员用户。


四、确认 SSH 当前配置

检查 SSH 关键配置:

grep -R -E '^[[:space:]]*(PasswordAuthentication|PubkeyAuthentication|PermitRootLogin)' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null

当时服务器配置为:

/etc/ssh/sshd_config:PermitRootLogin yes
/etc/ssh/sshd_config:PasswordAuthentication yes
/etc/ssh/sshd_config.d/50-cloud-init.conf:PasswordAuthentication yes

说明:

root + 密码登录:允许
普通用户 + 密码登录:允许

由于本次希望保留“用户名 + 密码”登录,因此不配置 SSH 私钥。


五、测试 ahui 密码 SSH 登录

在 MobaXterm 新建 SSH Session:

Remote host:服务器公网 IP
Username:ahui
Port:22(修改端口前)

成功登录后测试:

whoami
pwd
sudo whoami

输出:

ahui
/home/ahui
root

说明普通用户 SSH 登录和 sudo 均正常。

重要:在完成后续 SSH 修改并验证之前,不要关闭已有的 SSH 会话,防止配置错误导致自己无法再次登录服务器。


六、修改 SSH 端口为 22222

1. 云平台安全组先开放新端口

修改服务器 SSH 配置之前,先在腾讯云安全组增加:

协议:TCP
端口:22222
来源:0.0.0.0/0

此时先同时保留:

TCP 22
TCP 22222

不要提前删除 22。


2. 修改 sshd_config

执行:

sudo nano /etc/ssh/sshd_config

找到:

#Port 22

修改为:

Port 22222

如果文件中没有明确的 Port 配置,也可以在文件末尾增加:

Port 22222

保存:

Ctrl + O
Enter
Ctrl + X

3. 检查 SSH 配置语法

执行:

sudo sshd -t

如果没有任何输出,说明语法正常。

检查实际解析结果:

sudo sshd -T | grep '^port'

结果:

port 22222

七、Ubuntu 24.04 的 ssh.socket 问题

这是本次配置中非常重要的一点。

最初修改 Port 22222 后,仅执行:

sudo systemctl restart ssh

查看状态发现:

TriggeredBy: ● ssh.socket
Server listening on 0.0.0.0 port 22
Server listening on :: port 22

以及:

sudo ss -lntp | grep ssh

仍然看到:

0.0.0.0:22
[::]:22

原因:Ubuntu 24.04 使用了 systemd 的 ssh.socket socket activation,实际监听端口可能由 ssh.socket 管理。

因此修改 SSH 端口后还需要:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

检查:

sudo systemctl status ssh.socket --no-pager

正确结果:

Listen: 0.0.0.0:22222 (Stream)
        [::]:22222 (Stream)

再次确认:

sudo ss -lntp | grep -E ':22|:22222'

正确结果类似:

LISTEN ... 0.0.0.0:22222 ...
LISTEN ... [::]:22222 ...

此时不应再看到公网 22 端口监听。


八、验证新的 SSH 端口

不要关闭旧 SSH 会话。

新建一个 MobaXterm 会话:

Remote host:服务器公网 IP
Username:ahui
Port:22222

或命令行:

ssh -p 22222 ahui@服务器公网IP

确认可以通过密码成功登录。

登录后:

whoami
sudo whoami

应输出:

ahui
root

确认 22222 登录正常后,云平台安全组中的 TCP 22 可以关闭或删除。


九、禁止 root 直接 SSH 登录

保留:

PasswordAuthentication yes

修改:

PermitRootLogin yes

为:

PermitRootLogin no

最终 /etc/ssh/sshd_config 中的关键设置:

Port 22222
PermitRootLogin no
PasswordAuthentication yes

检查实际生效配置:

sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication)'

实际结果:

port 22222
permitrootlogin no
passwordauthentication yes

含义:

ahui + 密码 + 22222 → 允许
root + 密码 + 22222 → 禁止

需要 root 权限时使用:

sudo <命令>

或者:

sudo -i

十、安装 Fail2ban 防止 SSH 密码爆破

因为仍然保留密码登录,所以安装 Fail2ban。

更新软件源:

sudo apt update

安装:

sudo apt install fail2ban -y

启用并立即启动:

sudo systemctl enable --now fail2ban

检查状态:

sudo systemctl status fail2ban --no-pager

确认:

Active: active (running)

十一、配置 SSH Fail2ban 规则

不要直接修改 /etc/fail2ban/jail.conf,新建本地配置:

sudo nano /etc/fail2ban/jail.d/sshd.local

写入:

[sshd]
enabled = true
port = 22222
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h

含义:

10 分钟内 SSH 登录失败 5 次
        ↓
封禁该 IP 1 小时

保存后重启:

sudo systemctl restart fail2ban

检查:

sudo fail2ban-client status

实际结果:

Number of jail: 1
Jail list: sshd

查看 SSH jail:

sudo fail2ban-client status sshd

正常会显示:

Currently failed
Total failed
Currently banned
Total banned
Banned IP list

十二、确认 Fail2ban 参数

查看配置文件:

sudo cat /etc/fail2ban/jail.d/sshd.local

结果:

[sshd]
enabled = true
port = 22222
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h

检查最大失败次数:

sudo fail2ban-client get sshd maxretry

结果:

5

检查统计时间:

sudo fail2ban-client get sshd findtime

结果:

600

即 600 秒 = 10 分钟。

检查封禁时间:

sudo fail2ban-client get sshd bantime

结果:

3600

即 3600 秒 = 1 小时。

注意:Fail2ban 1.0.2 中以下命令不可用:

sudo fail2ban-client get sshd port

会提示:

Invalid command (no get action or not yet implemented)

这不是配置错误。端口可以直接通过 /etc/fail2ban/jail.d/sshd.local 确认。


十三、检查 Ubuntu 防火墙

查看 UFW:

sudo ufw status verbose

实际状态:

Status: inactive

本次没有启用 UFW。

原因:服务器后续还需要部署 Docker / RustDesk,Docker 会操作 iptables/nftables。当前使用腾讯云安全组作为外围防火墙,可以减少 UFW 与 Docker 网络规则混合后的排查复杂度。


十四、检查服务器监听端口

执行:

sudo ss -lntup

当时公网监听只有:

0.0.0.0:22222
[::]:22222

即 SSH。

其他看到的端口例如:

127.0.0.53:53
127.0.0.54:53
127.0.0.1:323
127.0.0.1:6010
127.0.0.1:6011
127.0.0.1:6012

均不是公网监听。

说明:

  • 127.0.0.53/54:53:systemd-resolved 本地 DNS。

  • 127.0.0.1:323:chronyd 时间同步。

  • 6010/6011/6012:MobaXterm 开启 X11 Forwarding 后 SSH 创建的本地转发端口。

如果不使用 Linux 图形程序,可以在 MobaXterm Session 设置里关闭 X11 Forwarding。


十五、腾讯云安全组最终建议

在只部署 SSH 的阶段,公网入站规则建议只保留:

TCP 22222

删除原来的:

TCP 22

后续部署 Docker / RustDesk 时,再根据需要逐个开放对应端口,不建议提前把大量端口全部暴露到公网。


十六、常用检查命令汇总

当前用户

whoami
id

ahui 用户

id ahui
groups ahui

sudo 测试

sudo whoami

SSH 实际配置

sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication)'

当前预期:

port 22222
permitrootlogin no
passwordauthentication yes

SSH 服务

sudo systemctl status ssh --no-pager

Ubuntu 24.04 SSH socket

sudo systemctl status ssh.socket --no-pager

当前 SSH 监听端口

sudo ss -lntp | grep ssh

或:

sudo ss -lntp | grep -E ':22|:22222'

Fail2ban 服务

sudo systemctl status fail2ban --no-pager

Fail2ban jail

sudo fail2ban-client status
sudo fail2ban-client status sshd

Fail2ban 参数

sudo fail2ban-client get sshd maxretry
sudo fail2ban-client get sshd findtime
sudo fail2ban-client get sshd bantime

当前所有网络监听端口

sudo ss -lntup

UFW 状态

sudo ufw status verbose

十七、以后新服务器可以直接按照这个顺序操作

推荐顺序:

1. root 登录新服务器
       ↓
2. adduser ahui
       ↓
3. usermod -aG sudo ahui
       ↓
4. 测试 ahui + sudo
       ↓
5. 测试 ahui 密码 SSH 登录
       ↓
6. 云安全组先开放 TCP 22222
       ↓
7. 修改 SSH Port 22222
       ↓
8. sshd -t 检查配置
       ↓
9. systemctl daemon-reload
       ↓
10. restart ssh.socket
       ↓
11. 新会话验证 22222 登录
       ↓
12. PermitRootLogin no
       ↓
13. 保留 PasswordAuthentication yes
       ↓
14. 删除云安全组 TCP 22
       ↓
15. 安装 Fail2ban
       ↓
16. 配置 sshd jail
       ↓
17. 检查公网监听端口

十八、最终状态确认

本次配置完成后的服务器状态:

Ubuntu 24.04.4 LTS

用户:
  ahui                         正常
  /home/ahui                   正常
  sudo                         正常

SSH:
  22222/TCP                    正常
  用户名 + 密码               正常
  root SSH                     已禁止
  PasswordAuthentication       yes
  PermitRootLogin              no

Fail2ban:
  服务                         active
  sshd jail                    active
  maxretry                     5
  findtime                     600 秒
  bantime                      3600 秒

防火墙:
  UFW                          inactive
  腾讯云安全组                 负责公网端口控制

公网监听:
  SSH 22222                    正常
  其他异常公网监听             未发现

至此,新服务器的用户创建与 SSH 基础安全配置完成。