嘿,朋友!如果你以为买了VPS、搭了网站就能高枕无忧,那今天这篇文章可能会吓你一跳。让我告诉你一个事实:我的第一台VPS,在72小时内被尝试登录了2,847次。是的,你没看错,平均每分钟就有0.66个坏蛋在敲你的门。
今天,咱们不聊复杂的理论,就用最接地气的方式,给服务器加上12把“锁”。
🔐 我的第一次“被入侵”经历
那是我拥有第一台VPS的第三天。半夜两点,手机突然收到十几封邮件:“您的服务器有异常登录尝试”。我迷迷糊糊爬起来,手忙脚乱地登录服务器,一看登录记录——好家伙,从俄罗斯、美国、荷兰来的IP,像逛菜市场一样尝试登录我的root账户。
最可怕的是,其中一个IP差点成功了。原因?我用了默认的SSH端口22,密码虽然复杂,但……你猜怎么着?我居然开了密码登录!那一刻我后背发凉,感觉自己像个把家门钥匙放在地毯下的傻瓜。
第一章:理解“黑客”是怎么想的
在开始加固之前,咱们得先站在“坏人”的角度想想。他们不是电影里的那种黑客天才,大部分只是用自动化工具扫描整个互联网的“脚本小子”。
🤖 黑客的日常:
- 用工具扫描全网开放22端口的服务器
- 用常见密码字典暴力破解(admin/123456/root等)
- 寻找未更新的软件漏洞
- 入侵后挖矿、发垃圾邮件、当跳板
🎯 我们的对策:
- 改变默认端口(让他们扫不到)
- 禁用密码登录(让他们破不了)
- 及时更新系统(堵住已知漏洞)
- 设置监控警报(及时发现异常)
第二章:12个必做安全动作(手把手版)
1
动作一:告别默认端口 – SSH的“隐身术”
为什么重要? 全球有数百万台服务器,默认用22端口。黑客的自动化工具第一件事就是扫描所有IP的22端口。改个端口,就能避开90%的自动化攻击。
nano /etc/ssh/sshd_config
Port 35282
systemctl restart sshd
⚠️ 重要提醒:
改端口前,一定要先开另一个终端窗口保持登录!万一改错了,你还有机会修复。重启SSH后,用新端口测试登录,确认OK再关闭旧连接。
选端口时避开常用端口(如80、443、3306等),选个冷门的随机数,比如我常用的35282。
2
动作二:跟root密码登录说再见
血泪教训: root是Linux的超级管理员账号,一旦被破解,你的服务器就彻底沦陷了。禁用root的密码登录,改用密钥登录,安全性提升100倍。
ssh-keygen -t rsa -b 4096
ssh-copy-id -p 你的端口号 root@你的IP
nano /etc/ssh/sshd_config
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
systemctl restart sshd
🔑 密钥登录的好处:
1. 不用记复杂密码(密钥文件本身就很复杂)
2. 几乎无法暴力破解(每次尝试都需要对应的私钥)
3. 可以设置密钥密码再加一层保护
4. 不同服务器可以用不同密钥,一处被破不会殃及其他
3
动作三:请个“看门保安” – Fail2ban
Fail2ban是个智能防火墙,它会监控登录日志,发现多次失败尝试就自动封IP。就像一个严格的保安,看到有人连续输错密码就把他赶走。
apt install fail2ban -y
yum install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 你的SSH端口
maxretry = 3
bantime = 3600
findtime = 600
systemctl start fail2ban
systemctl enable fail2ban
效果: 配置好后,如果有人连续3次输错密码,他的IP会被自动封禁1小时。你可以用 fail2ban-client status sshd 查看被封的IP列表。
第三章:基础但重要的其他动作
4
动作四:系统更新 – 堵住已知漏洞
Linux系统的漏洞被发现后,官方会发布补丁。不更新就像房子有破洞却不修补。
apt update && apt upgrade -y
yum update -y
apt install unattended-upgrades -y
dpkg-reconfigure unattended-upgrades
5
动作五:防火墙配置 – 只开必要的门
默认情况下,很多端口是开放的。用防火墙(UFW或firewalld)只开放你真正需要的端口。
ufw default deny incoming
ufw default allow outgoing
ufw allow 你的SSH端口/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose
6
动作六:创建普通用户 – 别总用root
日常操作使用普通用户,需要root权限时用sudo。这样即使被入侵,破坏也有限。
adduser 你的用户名
usermod -aG sudo 你的用户名
usermod -aG wheel 你的用户名
第四章:进阶安全措施(可选但推荐)
7
动作七:禁用空密码 – 别留后门
PermitEmptyPasswords no
8
动作八:限制SSH监听IP(如果你有固定IP)
ListenAddress 你的服务器IP
9
动作九:设置登录提醒
每次登录时显示警告信息,虽然不能阻止黑客,但有心理威慑作用。
nano /etc/motd
警告:未经授权的访问将被追究法律责任!
所有登录活动均被记录。
10
动作十:定期查看日志
安全不是一劳永逸,要定期检查。
lastb
last
grep “Failed password” /var/log/auth.log
11
动作十一:禁用不必要的服务
用不到的服务就关掉,减少攻击面。
systemctl list-unit-files –type=service | grep enabled
systemctl disable 服务名
12
动作十二:定期备份!备份!备份!
这是最后的安全网。服务器可能被攻破,但有备份就能恢复。
#!/bin/bash
tar -czf /backup/$(date +%Y%m%d).tar.gz /var/www/html /etc /home
# 然后设置cron定时任务
crontab -e
# 添加:0 2 * * * /path/to/backup.sh # 每天凌晨2点备份
最后几句唠叨
我知道,上面这么多步骤看起来有点吓人。但说实话,你不需要一天内全部做完。可以这样安排:
- 今天: 完成动作1-3(改端口、设密钥、装fail2ban)——这是最重要的三道防线
- 本周内: 完成动作4-6(更新、防火墙、创建用户)
- 本月内: 完成剩下的动作,并养成定期检查的习惯
安全不是追求100%不被攻破(那不可能),而是增加攻击成本,让黑客觉得“攻破这台服务器的代价太高,不如去找其他软柿子”。
我的那台被尝试登录2847次的服务器,在做了这些加固后,现在一周只有不到10次尝试,而且都被fail2ban自动封了。我从半夜被警报吵醒,到现在可以安心睡觉——这就是安全加固的意义。
记住,在互联网的世界里,你不是在跟天才黑客赛跑,而是在跟自动化脚本比谁更“麻烦”。只要你比隔壁的服务器更麻烦一点,你就安全了。