你的服务器是不是正在“裸奔”?

半夜被短信震醒,打开电脑一看:网站白屏、后台进不去、数据库空了——甚至弹出勒索页面。这不是电影桥段,是上周我帮朋友救火时亲眼见到的。

别急着骂黑客,先问问自己: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;再跑个rkhunterclamav定期扫木马——别嫌麻烦,它真抓出过隐藏的挖矿进程。
  • 数据层:数据库密码、API密钥、第三方服务Token,全部从代码里抠出来,放进环境变量或专门的.env文件(记得加到.gitignore)。备份?必须离线、加密、且每月抽一台恢复测试一次——上次恢复失败的备份,等于没备。

纵深不是堆工具,是让攻击者每前进一步,都要多破一扇门、多花一分钟。

攻击正在发生,你如何第一时间发现并止损?

等收到勒索信才行动?黄花菜都凉了。真正的止损,靠的是日常的“异常敏感”。

  • 盯紧几个关键指标:用htopglances看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分钟):

  1. 立刻加固SSH

    sudo vim /etc/ssh/sshd_config
    

    找到并修改这三行:
    Port 22 → 改成 Port 22222(或其他大于10000的数)
    PermitRootLogin yes → 改成 PermitRootLogin no
    PasswordAuthentication yes → 改成 PasswordAuthentication no

  2. 重启SSH服务

    sudo systemctl restart sshd
    
  3. 建一个新管理员账号(如果你还没用密钥登录)

    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
    
  4. 用新账号+新端口+密钥登录测试成功后,再回到第1步,把PasswordAuthentication彻底关死。

做完这四步,99%的机器人暴力破解会直接放弃你。不是因为你多厉害,只是你把“免费午餐”的招牌摘掉了。