上个月帮朋友处理了一台被挖矿的云服务器。SSH 端口 22 暴露在公网,网安root 密码是互联护内 Admin@123。攻击者用不到两小时就扫到并爆破成功,网安植入了 XMRig。互联护内CPU 跑满,网安账单多了三百多块。互联护内他问我:"我就放了个小网站,网安谁闲得没事搞我?互联护内" 没人专门搞你,但自动化脚本全天候在扫。网安互联网上没有"小到没人注意"的互联护内资产。
安全维护的网安第一件事不是装防火墙,是互联护内摸清自己有什么。 我见过太多人连自己开了哪些端口都说不清。网安一条命令能解决:netstat -tulnp 或者 ss -tulnp。互联护内看到 0.0.0.0 开头的监听,问自己一句:这个服务必须让外网访问吗?Redis 默认 6379 无密码,MongoDB 默认 27017 无认证,这些"默认配置"就是攻击者的快速通道。去年某社交平台数据泄露,根因就是一台暴露的 Elasticsearch,连密码都没设。
端口收窄之后,密码策略得跟上。别用生日、名字拼音、qwerty 这类。暴力破解字典里前一万个密码覆盖了绝大多数人的习惯。更稳妥的做法是密钥登录,把密码认证关掉。改 /etc/ssh/sshd_config 里 PasswordAuthentication no,重启 sshd。刚开始会不习惯,但安全性和便利性往往要取舍。我自己的机器还加了 fail2ban,连续错三次直接封 IP 24 小时。日志里每天能看到几十次来自各地的尝试——俄罗斯、巴西、越南,IP 换得比翻书快。
系统更新这件事,很多人嫌麻烦。但 Log4j2 漏洞爆发那会儿,一个 ${ jndi:ldap://...} 字符串就能让服务器执行任意代码。补丁发布后 48 小时内,全球扫描量翻了十几倍。你不动,攻击者动。自动安全更新可以开,Ubuntu 用 unattended-upgrades,CentOS 用 dnf-automatic。至少把内核和 OpenSSL 的更新跟上。
Web 层面,SQL 注入和 XSS 依然是老问题。别信任任何用户输入。参数化查询是最低要求,WAF 能挡一部分,但绕过手法层出不穷。我习惯在代码里加一层输入过滤,再把数据库账号权限收窄——只给 SELECT、INSERT、UPDATE,不给 DROP。有个做电商的朋友,后台删除接口没做权限校验,任何人改一下 URL 里的 ID 就能删商品。这种逻辑漏洞扫描器扫不出来,得靠人脑过一遍业务流程。
日志和备份是最后的防线。没日志,被入侵了都不知道从哪进来的。没备份,勒索软件一加密就只能交赎金。备份要离线,要定期恢复测试。我见过备份文件跟数据库在同一台机器上的,攻击者一个 rm -rf 全没了。3-2-1 原则不过时:三份副本,两种介质,一份异地。
安全维护不是装个软件就完事。它是一套持续的动作:收窄暴露面、强化认证、及时打补丁、校验输入、留好退路。每一条都不复杂,但组合起来能挡住九成以上的自动化攻击。剩下那一成,靠的是你对自己系统的熟悉程度——知道什么正常,才能发现什么不正常。
# 快速自查清单(非完整)
ss -tulnp | grep LISTEN
grep -i "passwordauth" /etc/ssh/sshd_config
lastb | head -20
crontab -l && ls -la /etc/cron*
find / -name "*.php" -mtime -1 2>/dev/null