华为云2核2G ECS加固实战:Swap、UFW、Fail2ban与密钥登录

举报
yd_228191225 发表于 2026/10/27 18:13:02 2026/10/27
【摘要】 一台华为云新加坡2核2G ECS,默认无Swap、SSH允许密码登录。本文记录一次加固:加2G Swap并持久化、开启UFW仅放行22端口、用Fail2ban做暴力破解封禁、把SSH改成仅密钥登录并用新会话验证,最后用Beszel探针做监控兜底。全部改动改前备份、改后新会话验证,避免把自己锁在门外。

背景:先看这台机器的初始状态

一台华为云新加坡的 ECS,Ubuntu 24.04,2 核,内存实测只有 1.7 GiB,而且没有 Swap。首次检查时发现三个问题:

  1. 内存小、无 Swap,重负载下容易 OOM;
  2. sshd 仍允许 root 密码登录,暴露在公网的 22 端口就是 brute force 的靶子;
  3. 没有入侵封禁和集中监控,出问题只能事后翻日志。

加固前先定两条保命原则,后面每一步都按这个来:改任何配置前先备份原文件;改 sshd 时保持一条已登录会话不关,新开会话验证成功才收尾。华为云控制台的 VNC 远程登录不受 SSH 设置影响,可以作应急入口。

第一步:加 2G Swap 并持久化

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

持久化写进 /etc/fstab:

/swapfile none swap sw 0 0

再把 swappiness 调低,避免系统过早用 Swap:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

验证:free -h 能看到 Swap 2.0G,swapon --show 有输出。

第二步:开自动安全更新

装 unattended-upgrades,写一份 20auto-upgrades,让安全更新自动装、其他更新不动:

sudo apt install unattended-upgrades -y
# /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

验证方法:

apt-config dump | grep Periodic
sudo unattended-upgrade --dry-run

以后手动更新如果不想被交互式提示打断,可以用 DEBIAN_FRONTEND=noninteractive 跳过 debconf 询问。

第三步:UFW 只放行 22 端口

顺序很重要:先放行 22,再启用,否则会把自己锁在外面。

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose

这台机器启用后对外只监听 22 端口,华为云的 uniagentd 只监听 127.0.0.1,不用另外处理。

第四步:SSH 改成仅密钥登录

先把自己的公钥加进 root 的 authorized_keys,确认密钥能登录后,再改 sshd 配置。注意一个坑:这台机器主配置本来就是 PasswordAuthentication no,但 sshd_config.d/50-cloud-init.conf 这个 drop-in 把它覆盖成了 yes,所以只改主配置没用,必须改 drop-in 里那一项,同时把 cloud.cfg 的 ssh_pwauth 改成 false,防止 cloud-init 回写。

# sshd_config.d/50-cloud-init.conf 及相关配置
PasswordAuthentication no
PermitRootLogin prohibit-password
MaxAuthTries 3
X11Forwarding no

改完不要关掉当前会话,新开一个会话验证:密钥能登、密码方式被拒(Permission denied (publickey))才算收尾。

第五步:Fail2ban 做暴力破解封禁

sudo apt install fail2ban -y
# /etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h

可以再配递增封禁(最长 1 周),并把本地回环加进 ignoreip。启动后用 fail2ban-client status sshd 确认 jail 在跑,初期 0 封禁是正常的。

第六步:Beszel 探针做监控兜底

探针装到 /opt/beszel-agent/,用 systemd 托管,环境变量文件只给 root 读。Hub 端点「添加」保存该系统后,探针的 WebSocket 就会连上 Hub,连接建立后探针会自动停掉自身的 SSH 监听。注意:探针端口不用在 UFW 或安全组里放行入站,监控走的是探针主动向 Hub 发起的出站连接。

踩过的坑

  • .pem 权限:Windows 上生成的私钥文件 ACL 里有个孤儿 SID,OpenSSH 直接拒用。用 icacls /inheritance:r 收紧成仅自己可读后解决。
  • 端口可达测试误判:有一次 22 端口测试打到的是本地出口代理,不是服务器本身,不能作为服务器可达的证据,一切以 SSH 登录结果为准。
  • 手动 apt 更新的交互提示:keyboard-configuration 会问键盘布局(保持默认 English (US) 即可),openssh-server 会问保留本地改过的 sshd_config 还是装新版默认配置——选高亮默认的 keep the local version currently installed,才能保住前面的 SSH 加固。

验证清单

  • free -h:Swap 2G 已启用
  • ufw status:默认拒绝入站、仅放行 22/tcp
  • 新会话:密钥可登、密码被拒
  • fail2ban-client status sshd:jail 正常运行
  • Beszel 面板:探针在线,WebSocket 已连接

做完这套,2 核 2G 的小机器在“别被扫爆、别 OOM、出了问题能看见”这三点上基本就稳了。后续如果要扩,再考虑把监控告警和备份接进来。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。