摘要:一台新的云服务器联网几分钟,就会开始被自动扫描和暴力破解 SSH 密码。本文给出拿到服务器后 30 分钟内该做的安全设置:新建普通用户、SSH 密钥登录、禁用密码和 root 登录、云安全组加系统防火墙、fail2ban、自动安全更新,命令以 Ubuntu/Debian 为例。

公网上的服务器从上线那一刻起,就会被扫描器不停地尝试登录。下面这套设置按顺序做完,能挡住绝大多数自动化攻击。命令以 Ubuntu / Debian 为例,CentOS 系把 apt 换成 dnf。

操作 SSH 配置前,保持一个已登录的窗口不要关。新配置测试通过之前,万一改错了还能改回来。

1. 更新系统

sudo apt update && sudo apt upgrade -y

2. 新建普通用户,别直接用 root

sudo adduser deploy
sudo usermod -aG sudo deploy

以后用 deploy 登录,需要管理员权限时加 sudo。

3. 改用 SSH 密钥登录

在你自己的电脑上生成密钥(已经有的话跳过):

ssh-keygen -t ed25519 -C "my-laptop"

把公钥传到服务器:

ssh-copy-id deploy@你的服务器IP

然后在新窗口试一下 ssh deploy@你的服务器IP,确认不用输入服务器密码就能登录。很多云厂商也可以在控制台直接创建和绑定密钥对。

4. 禁用密码登录和 root 登录

编辑 /etc/ssh/sshd_config(有的系统还要检查 /etc/ssh/sshd_config.d/ 目录里的配置文件):

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes

检查配置并重启:

sudo sshd -t && sudo systemctl restart ssh

新开一个窗口测试能登录,再关掉旧窗口。

5. 两层防火墙:云安全组加系统防火墙

云安全组(在云厂商控制台设置):入方向只放行需要的端口,常见的是 22(SSH,最好只允许你自己的 IP)、80、443。

系统防火墙(ufw):

sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status

6. 装 fail2ban,自动封禁暴力破解

sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

默认配置下,同一 IP 多次登录失败会被暂时封禁。

7. 打开自动安全更新

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

8. 其他好习惯

  • 数据库不要对公网开放,MySQL 只监听 127.0.0.1。
  • 管理面板(宝塔等)要改默认端口、设强密码,最好限制访问 IP。
  • 定期备份,而且要把备份存到另一台机器或对象存储。很多云厂商的快照功能都能定时自动执行。
  • 用 last 和 sudo journalctl -u ssh 看看登录记录。

自查清单

  • □ 使用普通用户 + sudo
  • □ 只允许密钥登录,禁用了密码和 root 登录
  • □ 安全组和 ufw 只开放必要端口
  • □ fail2ban 运行中
  • □ 自动安全更新已开启
  • □ 有异地备份

相关阅读