2核1GB轻量服务器安全加固实战: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 分钟过一遍:
sudo fail2ban-client status sshd:看封禁数是否异常暴涨;last -20:确认没有陌生登录;sudo ufw status:确认没有多余的放行端口;df -h与free -h:磁盘和内存余量;- 备份文件是否按计划生成。
结语
三步下来,我的服务器每天的爆破尝试从上千次降到了几乎为零——不是扫描停了,而是它们连密码猜测的入口都没有了,剩下的尝试 5 次就被 fail2ban 封掉。安全加固没有银弹,但对个人小站来说,密钥登录、最小端口、自动封禁这三件套,已经挡住了绝大多数真实风险。剩下的,就是每周 5 分钟的例行检查。
- 点赞
- 收藏
- 关注作者
评论(0)