去年某电商平台被拖库,服范措起因是软件运维图省事,在Nginx配置里开了autoindex on,全防备份目录直接暴露在公网。服范措攻击者没用什么高级漏洞,软件顺着目录列表把数据库导出文件下载走了。全防这种事听起来低级,服范措但每年都在发生。软件Web服务器软件本身的全防安全机制其实不差,问题往往出在人身上——配置疏忽、服范措权限混乱、软件更新滞后。全防
先聊版本。服范措Apache 2.4.49那个路径穿越漏洞(CVE-2021-41773)出来的软件时候,很多团队拖了两周才打补丁。全防两周,够攻击者扫三遍全网了。我的习惯是订阅各家用得上的服务器的安全公告邮件列表,Nginx、Apache、IIS、Tomcat各订一份。不用天天看,但收到高危通知当天就得处理。另外,别用系统包管理器里那个三年前的版本,去官网下稳定版,或者用官方维护的仓库。
配置文件是重灾区。Nginx默认会返回版本号,server_tokens off;一行就能关掉。Apache的ServerSignature Off和ServerTokens Prod同理。这些信息泄露单独看不算致命,但配合其他漏洞就是精准打击的线索。还有目录列表,autoindex默认是关的,可总有人为了调试打开,然后忘了关。我见过一个内部测试服务器,目录列表开着,里面躺着.git文件夹,整个代码仓库的提交历史都能翻出来。
权限这块,Web服务器进程绝对不能用root跑。Nginx的worker进程用www-data或nginx用户,Apache用www-data,这是基本操作。但很多人忽略了文件权限——上传目录给755甚至777,等于给攻击者留了后门。上传目录应该644,而且禁止执行权限,php_flag engine off这类配置要加上。Tomcat的话,webapps目录别放无关文件,manager和host-manager应用要么删掉要么改默认路径加IP白名单。
TLS配置也值得说两句。还在用TLS 1.0/1.1的,赶紧关掉。密码套件里别留RC4和3DES。HSTS头加上,Strict-Transport-Security: max-age=31536000; includeSubDomains。证书用Let's Encrypt自动续期,别等过期了才手忙脚乱。我见过一个政府网站证书过期三个月,浏览器直接拦截,用户根本打不开。
日志得看。不是配了access_log就完事,得定期分析。404错误突然暴增,大概率是有人在扫目录。同一IP短时间内大量POST请求,可能是撞库。用GoAccess或者AWStats跑一下,花不了多少时间。有次我注意到一个IP反复请求/wp-login.php,但服务器根本没装WordPress,直接防火墙拉黑,省事。
WAF不是万能的,但没WAF又不行。ModSecurity规则集能挡掉不少自动化扫描,不过误报率不低,得花时间调。Cloudflare的免费版也能用,至少能过滤掉一批低端攻击。但别指望WAF解决所有问题,它只是多层防御里的一层。
最后说个容易被忽略的——关掉不用的模块。Apache的mod_status、mod_info,Nginx的stub_status,如果不需要就注释掉。IIS里没用的ISAPI扩展和CGI统统禁用。攻击面越小,出事概率越低。服务器安全没有一劳永逸,今天配好了,明天可能又出个新漏洞。保持关注,及时更新,别偷懒。