博客VPS被黑过一次才明白:服务器安全得这么配
记一次被黑经历
说出来不怕你们笑话,我的博客去年被黑了。
那天打开网站发现不对劲,后台进不去,首页被篡改成菠菜页面。整个人都傻了,大半夜的开始排查,最后发现是SSH密码太弱被人爆破了。
数据全丢了,备份是两周前的。两周的文章、评论全部归零,那一刻真想把自己的手剁了。
从那以后我开始认真对待服务器安全,花了一周时间把安全配置全部重新做了一遍。现在把经验分享出来,不希望你们重蹈覆辙。
SSH安全配置:改端口、禁用密码
SSH是服务器的大门,这道门守不住,其他都是白搭。
1. 改SSH默认端口
默认22端口全世界的黑客都在扫,太危险了。改成个冷门端口,比如22998之类的。
```bash
编辑SSH配置文件
sudo vi /etc/ssh/sshd_config
找到 Port 22,把22改成其他数字
Port 22998
重启SSH服务
sudo systemctl restart sshd
```
改完记得先测试新端口能不能连上,确认没问题再关掉22端口!
2. 禁用密码登录,改用密钥
这是最关键的一步。密码登录太容易被爆破了,密钥登录安全得多。
```bash
在本地生成密钥对
ssh-keygen -t ed25519
把公钥上传到服务器
ssh-copy-id -p 22998 -i ~/.ssh/id_ed25519.pub user@your_server_ip
编辑SSH配置禁用密码登录
sudo vi /etc/ssh/sshd_config
确保以下配置
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
重启SSH
sudo systemctl restart sshd
```
生成密钥的时候记得设个强密码,别偷懒用空密码。
3. 安装fail2ban自动封IP
这个软件会自动检测SSH登录失败次数,超过阈值就封IP,非常好用。
```bash
安装
sudo apt install fail2ban -y
启动
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
查看状态
sudo systemctl status fail2ban
```
fail2ban默认配置就够用,有兴趣的可以改配置文件调参数。
防火墙配置:用UFW还是iptables?
推荐用UFW,简单易用。
```bash
安装UFW
sudo apt install ufw -y
设置默认规则
sudo ufw default deny incoming # 拒绝所有入站
sudo ufw default allow outgoing # 允许所有出站
开放必要端口
sudo ufw allow 22998/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
开启防火墙
sudo ufw enable
查看状态
sudo ufw status verbose
```
操作的时候一定要小心!一旦配置错误把自己锁在外面就麻烦了。操作前先开多个SSH连接确认可以连上,配置错了还有个退路。
系统安全:定期更新和最小化安装
自动安全更新
服务器不可能天天手动登录去更新,得靠自动化。
```bash
安装unattended-upgrades
sudo apt install unattended-upgrades -y
启用自动更新
sudo dpkg-reconfigure -plow unattended-upgrades
```
选择"是"就可以了。以后有安全补丁系统会自动安装,不用操心。
最小化安装原则
服务器上只装必要的软件。每个运行的软件都是潜在的入口点,能不装就不装。
比如你用Nginx,就不用装Apache;用MySQL就不装PostgreSQL。选一个就行,别贪多。
数据库安全:别裸奔
MySQL/MariaDB安装完默认配置挺松的,需要加固一下。
```bash
运行安全配置向导
sudo mysql_secure_installation
交互式问答这样回答
设置root密码:选Y,设个强密码
禁止root远程登录:选Y
删除匿名用户:选Y
删除测试数据库:选Y
重载权限表:选Y
```
另外给每个应用创建独立的数据库用户,权限最小化。博客用WordPress就创建wp_user,只给blogdb的读写权限就行,别给ALL PRIVILEGES。
文件权限:配置不当是重灾区
服务器上文件权限配置错误很容易被利用。
Web目录权限
```bash
网站文件目录
chown -R www-data:www-data /var/www/html
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;
上传目录要给写权限
chmod 775 /var/www/html/wp-content/uploads
chown www-data:www-data /var/www/html/wp-content/uploads
```
禁止执行PHP上传文件
上传目录一般不需要执行PHP能力,关掉更安全。
```nginx
Nginx配置
location /wp-content/uploads/ {
location ~ \.php$ {
deny all;
}
}
```
这样即使有人上传了PHP木马,也没法执行。
备份策略:最后的防线
再完善的安全措施也不能保证100%不出问题,备份是最后的防线。
我的备份策略是这样的:
| 备份类型 | 频率 | 保留份数 | 存储位置 |
|---|---|---|---|
| 整站文件 | 每天 | 7份 | 本地+云端 |
| 数据库 | 每天 | 14份 | 本地+云端 |
| 配置快照 | 每次改配置后 | 3份 | 云端 |
数据库和文件分开备份,这样恢复的时候可以灵活选择。
推荐用rclone把备份传到云存储(阿里云OSS、腾讯云COS都行),本地只留最近两份就够了。
监控报警:第一时间知道出事
配置再完善,也得有监控。我用两个东西:
1. Uptime Kuma
一个开源的监控工具,可以监控网站、服务是否在线。挂了会发邮件、微信通知你。
2. 服务器基础监控
CPU、内存、磁盘使用率这些基础指标要监控起来。我用的Prometheus + Grafana,配置一次以后心里有数。
总结
安全这事吧,说一千道一万不如实际行动:
1. SSH改端口、禁用密码、用密钥登录
2. 防火墙只开放必要端口
3. 自动化安全更新
4. 数据库独立用户、最小权限
5. 文件权限配置正确
6. 定期异地备份
7. 监控报警不能少
配置完这套组合拳,被黑的概率会低很多。但说实话,再怎么配置也没有100%的安全,关键是出问题了能快速恢复。
记住:备份永远是最好的安全措施。
有服务器配置问题可以加我微信:15207283116,看到会回复。
标签:服务器安全,VPS配置,博客搭建,技术教程
需要了解更多使用技巧?
扫码加我微信,我来给你详细解答!
微信号:15207283116
(博客来的朋友优先通过!)
—— 本文仅供参考,具体以实际情况为准 ——
还木有评论哦,快来抢沙发吧~