服务器防护
去年秋天,服务我帮一个做跨境电商的器防朋友处理过一次服务器被入侵的事。攻击者没用什么高级漏洞,服务就是器防拿一个弱密码,通过SSH直接登进了他的服务测试机。然后那台机器被装上了挖矿程序,器防CPU跑满,服务业务卡到几乎不可用。器防他后来跟我说,服务那台机器密码是器防“admin123”,已经用了两年多。服务这事听起来离谱,器防但真不少见。服务
服务器防护这件事,器防很多人第一反应是服务买防火墙、上WAF、配一堆安全组规则。这些东西有用,但最基础的那一层如果没做好,后面堆再多设备也是白搭。我自己的习惯是,拿到一台新服务器,先做三件事:改SSH端口、禁用密码登录只留密钥、关掉所有不需要的服务和端口。这三步花不了十分钟,但能挡掉大部分自动化扫描和暴力破解。
说到端口,有个细节值得留意。默认的22端口每天会被扫无数次,这是常态。你把SSH换到比如51234这种高位端口,扫描量立刻降下来。这不是什么高深技术,纯粹是减少被盯上的概率。就像你家门牌号如果特别显眼,推销员和踩点的都会先来敲你门。
密钥登录这块,我踩过坑。早期图省事,生成密钥后没设passphrase,私钥文件随便放在本地。后来想想,万一本地机器被入侵,私钥直接泄露,服务器等于没锁。现在我的做法是私钥必须加密,而且不同服务器用不同密钥对。麻烦是麻烦点,但安全本来就是用麻烦换来的。
防火墙配置我推荐用ufw或者firewalld,别直接手写iptables规则。手写容易出错,一条规则写反了可能把自己关在外面。ufw默认拒绝所有入站,然后你按需放行,逻辑清晰。我见过有人图方便直接开全部端口,说是“测试用”,结果测试环境跑了半年还在公网上裸奔。
应用层面的防护,很多人只盯着代码漏洞,忽略了文件权限。比如Web目录,如果权限设成777,攻击者上传一个webshell就能直接执行。正确的做法是目录755、文件644,上传目录单独处理,禁止执行权限。这个细节我在至少三个客户的服务器上纠正过,其中两个已经被上传过试探性脚本,只是没造成实际损害。
日志和监控是另一个容易被忽略的点。服务器被入侵后,攻击者第一件事往往是删日志。所以日志最好实时同步到另一台机器,或者至少用远程syslog。我自己的方案是每台服务器装filebeat,把auth.log和nginx访问日志推到一台专门的日志服务器。有一次就是靠auth.log里的异常登录记录,发现了一个被泄露的运维账号。
补丁管理不用追求最新,但关键安全补丁必须打。我一般设一个每月固定时间窗口,检查内核和主要服务的更新。不要开自动更新,尤其是生产环境,自动更新有时候会引入兼容性问题,反而造成服务中断。手动更新虽然费事,但可控。
最后说一个反直觉的点:备份比防护更重要。防护做得再好,也有被突破的可能。备份策略我坚持3-2-1原则,三份副本、两种介质、一份离线。离线那份最关键, ransomware加密的时候,离线的备份是最后的救命稻草。我见过太多人备份和服务器在同一个网络里,结果一起被加密。
服务器防护没有一劳永逸的方案,它更像是一个持续调整的过程。每次出安全事件,不管是自己的还是别人的,我都会回头检查自己的配置。这个习惯比任何单一工具都管用。
(责任编辑:休闲)
