2核1GB轻量服务器安全加固实战:SSH密钥、防火墙与fail2ban

举报
yd_297054306 发表于 2026/11/06 08:44:44 2026/11/06
【摘要】 一台 2 核 1GB 的轻量服务器,跑着我的个人网站。网站上线第一周,我查了一次 /var/log/auth.log:每天上千次 SSH 密码爆破尝试,来源遍布全球。这篇文章记录我给这台小服务器做安全加固的完整过程——不用花一分钱,也不用加内存,半小时做完三件事:密钥登录、最小端口防火墙、fail2ban 自动封禁。 一、先看清风险:每天被扫多少次加固之前,先看看现状,做到心中有数:# 统计...

一台 2 核 1GB 的轻量服务器,跑着我的个人网站。网站上线第一周,我查了一次 /var/log/auth.log:每天上千次 SSH 密码爆破尝试,来源遍布全球。这篇文章记录我给这台小服务器做安全加固的完整过程——不用花一分钱,也不用加内存,半小时做完三件事:密钥登录、最小端口防火墙、fail2ban 自动封禁。

一、先看清风险:每天被扫多少次

加固之前,先看看现状,做到心中有数:

# 统计最近的失败登录次数
sudo grep "Failed password" /var/log/auth.log | wc -l
# 看看都是哪些 IP 在尝试
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
# 查看最近登录成功的记录,确认没有陌生登录
last -20

如果 Failed password 的数字是四位数,不要慌——这是全网轻量服务器的常态。真正的风险只有一个:弱口令加上密码登录还开着。

二、SSH 改用密钥登录,禁用密码登录

这是性价比最高的一步。密钥登录之后,爆破者就算扫到端口,也没有密码可猜。

# 1. 本地生成密钥对(已有密钥可跳过)
ssh-keygen -t ed25519 -C "my-server"
# 2. 把公钥传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
# 3. 确认能用密钥登录后,编辑服务端配置
sudo vim /etc/ssh/sshd_config

把下面三项改成这样:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

顺手还可以改一个默认端口(例如 2222),能挡掉大部分无脑扫描:

Port 2222

改完重启 SSH 服务并验证——注意:先不要断开当前会话,另开一个终端确认新方式能登录,再退出:

sudo systemctl restart sshd
ssh -p 2222 user@服务器IP

三、防火墙:只开必要的端口

1GB 内存跑不动笨重的商业防护,但系统自带的防火墙完全够用。原则只有一个:默认拒绝,按需放行。

# Ubuntu / Debian 使用 UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

网站只用 80 和 443,SSH 只用改过的端口,其他一律不放行。数据库、后台管理面板不要直接暴露公网,实在需要就走 SSH 隧道。

四、fail2ban:让爆破者自动进黑名单

密钥登录堵住了密码爆破,fail2ban 负责把还在锲而不舍尝试的 IP 自动封掉,日志也清净了。

sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

在 [sshd] 一节里这样配(端口要和上面改过的一致):

[sshd]
enabled = true
port = 2222
maxretry = 5
findtime = 600
bantime = 3600

意思是:10 分钟内失败 5 次,就封 1 小时。启动并查看状态:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
# 查看当前被封的 IP
sudo fail2ban-client status sshd | grep "Banned IP"

五、1GB 内存下的注意事项

小内存服务器做安全加固,最怕防护本身吃掉内存。这几点是我实测过的:

  • fail2ban 常驻内存只有十几 MB,放心用;但不要同时装多个同类防护工具。
  • 日志要轮转:确认 logrotate 在工作,避免 /var/log/auth.log 无限增长撑爆磁盘,df -h 每周看一次。
  • 自动安全更新可以开,但要轻量:只开安全源更新,避开大版本升级;更新后留意 Nginx 等服务是否正常。
  • 备份与快照比防护更重要:网站文件和数据库每周备份一次,备份文件不要只放在同一台机器上。

六、每周 5 分钟检查清单

加固不是一劳永逸,每周花 5 分钟过一遍:

  1. sudo fail2ban-client status sshd:看封禁数是否异常暴涨;
  2. last -20:确认没有陌生登录;
  3. sudo ufw status:确认没有多余的放行端口;
  4. df -h 与 free -h:磁盘和内存余量;
  5. 备份文件是否按计划生成。

结语

三步下来,我的服务器每天的爆破尝试从上千次降到了几乎为零——不是扫描停了,而是它们连密码猜测的入口都没有了,剩下的尝试 5 次就被 fail2ban 封掉。安全加固没有银弹,但对个人小站来说,密钥登录、最小端口、自动封禁这三件套,已经挡住了绝大多数真实风险。剩下的,就是每周 5 分钟的例行检查。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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