你的服务器是不是正在“裸奔”?
半夜被短信震醒,打开电脑一看:网站白屏、后台进不去、数据库空了——甚至弹出勒索页面。这不是电影桥段,是上周我帮朋友救火时亲眼见到的。
别急着骂黑客,先问问自己:SSH还开着22端口?Redis密码是不是空的?上一次更新Nginx补丁是什么时候?
为什么你的服务器总被盯上?
攻击者根本懒得挑人。他们用脚本全网扫,专找那些“门没锁、灯还亮着”的服务器。
比如默认密码、老版本漏洞、或者随手开在公网的管理端口——这些不是隐患,是邀请函。
真实案例就发生在上个月:一家做企业服务的公司,测试环境Redis没设密码,又绑定了0.0.0.0。攻击者5分钟内连上、写入公钥、拿到root权限。整个过程你服务器日志里可能只留下几行Accepted publickey。
你不需要被特别针对,只要出现在扫描列表里,就已经算“中奖”。
守住大门:基础安全加固必须做扎实
别一上来就研究零信任或AI检测。先把最该做的三件事干完:
- 改掉所有默认密码:SSH、MySQL、phpMyAdmin、后台登录页……一个都不能留。密码要长、要乱、要每个系统都不一样。
- 关掉不用的端口:执行
netstat -tuln | grep LISTEN看一眼。除了80、443(和你确认过必须开放的端口),其他暴露在公网的端口,现在就关。 - 补丁不是可选项:Linux系统、Nginx/Apache、PHP/Python运行时、MySQL、WordPress插件……所有能自动更新的,都打开自动安全更新;不能自动的,定个每周五下午15分钟的更新雷打不动。
地基塌了,再炫的WAF也拦不住人从地下室钻进来。
你的网站应用是最大的漏洞来源吗?
现实很扎心:70%以上的入侵,不是从系统层突破的,而是从你写的代码、装的插件、配的CMS里溜进来的。
SQL注入?XSS?文件上传绕过?命令执行?这些词听起来像教科书里的概念,但真发生时,就是用户表被拖走、首页被挂黑链、服务器变矿机。
我处理过一个外贸站,就因为搜索框没过滤输入,攻击者直接把' OR 1=1--打进去了,顺手导出了全部客户邮箱,还用数据库权限往服务器写了个后门脚本。
防御其实就一条铁律:所有用户输入,一律当毒药处理。
- 查询数据库?用PDO预处理或ORM,别拼SQL。
- 允许上传文件?限制后缀、检查MIME类型、重命名存储、放非Web目录。
- 后台地址别叫
/admin或/wp-admin,哪怕改成/dashboard-2024也比默认强。
再加一道WAF,不是为了替代代码规范,而是给粗心留条后路。
如何构建纵深的防御体系?
指望一个防火墙挡住所有攻击,就像指望一把挂锁防贼——有用,但远远不够。
分三层来布防:
- 网络层:云厂商自带的安全组/防火墙,只放行80/443(HTTPS优先),SSH严格限制来源IP(比如只允许公司出口IP或跳板机)。
- 主机层:装个Fail2ban,5次输错密码就封IP;再跑个
rkhunter或clamav定期扫木马——别嫌麻烦,它真抓出过隐藏的挖矿进程。 - 数据层:数据库密码、API密钥、第三方服务Token,全部从代码里抠出来,放进环境变量或专门的
.env文件(记得加到.gitignore)。备份?必须离线、加密、且每月抽一台恢复测试一次——上次恢复失败的备份,等于没备。
纵深不是堆工具,是让攻击者每前进一步,都要多破一扇门、多花一分钟。
攻击正在发生,你如何第一时间发现并止损?
等收到勒索信才行动?黄花菜都凉了。真正的止损,靠的是日常的“异常敏感”。
- 盯紧几个关键指标:用
htop或glances看CPU是否长期飙高;iftop看有没有陌生IP疯狂往外传数据;df -h查磁盘突然爆满(可能是日志刷爆或勒索病毒占位)。 - 日志不是摆设:
/var/log/auth.log里连续几十条Failed password?/var/log/nginx/access.log里一堆访问/phpmyadmin/index.php或/wp-config.php?这些都是敲门声。 - 预案不是文档:把你写的《应急响应SOP》打印出来,找个周末,用一台测试机模拟被黑:断网→查进程→删后门→换密钥→恢复备份。练过和没练过,差别是3小时vs3天。
很多损失不是黑客造成的,是你慌乱中rm -rf /手抖了。
今天下班前就能做的具体操作
现在,打开你的终端,按顺序做完这四步(全程5分钟):
立刻加固SSH:
sudo vim /etc/ssh/sshd_config找到并修改这三行:
Port 22→ 改成Port 22222(或其他大于10000的数)PermitRootLogin yes→ 改成PermitRootLogin noPasswordAuthentication yes→ 改成PasswordAuthentication no重启SSH服务:
sudo systemctl restart sshd建一个新管理员账号(如果你还没用密钥登录):
sudo adduser deploy sudo usermod -aG sudo deploy sudo mkdir -p /home/deploy/.ssh sudo nano /home/deploy/.ssh/authorized_keys # 把你本地的 `~/.ssh/id_rsa.pub` 内容粘贴进去 sudo chown -R deploy:deploy /home/deploy/.ssh sudo chmod 700 /home/deploy/.ssh sudo chmod 600 /home/deploy/.ssh/authorized_keys用新账号+新端口+密钥登录测试成功后,再回到第1步,把
PasswordAuthentication彻底关死。
做完这四步,99%的机器人暴力破解会直接放弃你。不是因为你多厉害,只是你把“免费午餐”的招牌摘掉了。