摘要:一台新的云服务器联网几分钟,就会开始被自动扫描和暴力破解 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 运行中
- □ 自动安全更新已开启
- □ 有异地备份
相关阅读
- 轻量应用服务器搭建 WordPress
- Cloudflare 免费 CDN 与 SSL 接入
- 交易所 API Key 安全设置(自己跑量化程序的服务器,也要按本文加固)