前几天一个朋友打电话给我,语气都变了:‘我网站打不开了,首页变成了一张奇怪的图片。’我问他最近有没有改过密码,他说‘没啊,一直用的同一个,这么多年不也没事?’
你以为没事,其实是还没出事
很多运维人员和他一样,总觉得服务器在机房里,没人碰物理设备就安全。可现实是,攻击者坐在千里之外,敲几行命令就能拿到管理员权限。你不用复杂的密码,别人分分钟爆破登录。你不定期更新系统,已知漏洞就成了后门入口。
去年有个案例,某小型电商服务器因为用了默认的 MySQL 端口和简单密码,半夜被扫到,数据全被加密,勒索 0.5 个比特币。老板急得睡不着,最后花的钱比请专业维护还贵。
最小权限原则不是摆设
别让所有服务都用 root 跑。比如 Nginx,完全可以用 www-data 用户运行。哪怕被突破,攻击者也无法直接修改系统文件。
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
}
同样,数据库账号也要按需分配权限。读写分离的业务,就别给前端接口账号 DROP 表的权限。
防火墙不是摆设,该关的端口别开着
检查一下你的服务器是不是还在开放 23(Telnet)、1433(SQL Server)这种明文传输的端口?现在都 2024 年了,SSH 也建议改成非标准端口,配合 fail2ban 自动封 IP。
一条简单的 iptables 规则,能挡住大部分扫描流量:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -P INPUT DROP
再配合 cron 定时任务,每天自动拉取一次最新黑名单 IP,比啥都不做强太多。
备份不能只靠嘴说
有人跟我说‘我有备份’,结果一问频率,是‘大概一个月搞一次’。等出事那天,一个月的数据没了,客户订单全丢,哭都来不及。
真正的备份是自动化的、异地的、可验证的。哪怕是小站点,也该每天凌晨跑个脚本:
#!/bin/bash
mysqldump -u root -p'password' mydb > /backup/db_$(date +\%Y\%m\%d).sql
tar -czf /backup/site_$(date +\%Y\%m\%d).tar.gz /var/www/html
rsync -avz /backup/ user@backup-server:/remote/backup/
然后每周手动恢复一次测试库,确保真出事时能顶上。
安全不是花钱买套件就完事,它是日常习惯的总和。改掉偷懒的配置,把防护做到前头,才能睡得踏实。