
核心要点(TL;DR)
很多站点不是被高手攻破的,而是被扫描器顺手拿下的:默认口令没改、8080端口对外、备份文件躺在Web目录、HTTPS配了但没强制跳转。上线前的窗口期最危险,因为此时目录结构、错误页、调试接口都还是“开发态”。本文给出一份可直接照着执行的网站防护清单,按网络层、主机层、应用层、数据层四步推进,每条都带命令或核对动作,做完再放流量进来。
第一步:网络层——先缩小暴露面
先回答一个问题:这台机器真的需要让全网访问这么多端口吗?用一条命令看清现状:
ss -tulnp | grep LISTEN对照结果逐项确认,只保留80/443与必要的运维端口。数据库3306、Redis 6379、管理后台端口一律只监听内网或绑定127.0.0.1。云主机还要在安全组再收一层,形成“系统防火墙+安全组”双保险:
ufw default deny incoming
ufw allow 80,443/tcp
ufw allow from 203.0.113.10 to any port 22 proto tcp
ufw enable管理后台加来源IP白名单或走VPN,别把/admin直接暴露在公网。这一步做完,扫描器能看到的入口会少一大半。
第二步:主机层——基线、口令与权限
弱口令是上线初期最常见的失分点。检查是否存在空口令与可登录的系统账号:
awk -F: '(==""){print }' /etc/shadow
awk -F: '(==0){print }' /etc/passwd只允许root与必要账号UID为0;SSH关闭密码登录,改用密钥并禁用root直连:
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3Web目录权限同样要收敛:站点文件属主为运行用户,目录755、文件644,禁止777;上传目录关闭PHP解析。顺手清理版本泄露与目录列举:Nginx加server_tokens off;,并确认autoindex off;。检查是否存在可被直接下载的敏感文件:
find /var/www -name ".git" -o -name "*.sql" -o -name ".env" -o -name "*.bak"命中即移出Web根目录。补丁方面,先跑一次系统更新,再核对Web中间件与框架版本,别让已知漏洞带着上线。
第三步:应用层——HTTPS、响应头与WAF
HTTPS要“配了”更要“配严”。确认HTTP强制跳转、HSTS开启、仅启用TLS 1.2/1.3:
server {
listen 80;
return 301 https://$host$request_uri;
}
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;用openssl s_client -connect 你的域名:443 -tls1_1确认老协议已被拒绝,并检查证书链与到期时间。应用侧关闭生产环境调试模式与详细报错,错误页统一返回自定义页面,避免堆栈信息外泄。
接着接入WAF。WAF不能替代补丁与权限收敛,但能低成本拦住批量扫描、常见注入与CC攻击。以AegisX为例,可在域名解析层接入并开启观察模式跑1至2天,确认无误拦后切拦截;同时配置管理后台路径与上传接口的自定义规则,并保留访问日志用于回溯。上线首周重点看拦截日志,误拦往往集中在上传与富文本接口。
第四步:数据层——备份与恢复演练
备份的关键不是“有没有”,而是“能不能恢复”。上线前至少完成一次真实还原:在测试环境用最近备份还原数据库与站点文件,确认数据完整、权限正确、页面可访问,并记录耗时。备份文件不要与源站同机存放,建议异地或对象存储并开启版本控制;数据库导出加时间戳并校验大小:
mysqldump --single-transaction -u root -p 库名 | gzip > /backup/db_$(date +%F).sql.gz
ls -lh /backup/上线前勾选表
| 层级 | 核对项 | 通过标准 |
|---|---|---|
| 网络 | 端口暴露 | 仅80/443与白名单运维端口 |
| 主机 | 弱口令与SSH | 无空口令,禁用密码登录 |
| 主机 | 目录权限 | 无777,无敏感文件残留 |
| 应用 | HTTPS与响应头 | 强制跳转、HSTS、安全头齐全 |
| 应用 | WAF | 已接入并验证拦截与日志 |
| 数据 | 备份恢复 | 完成一次真实还原演练 |
行动建议:把这份网站防护清单固化为上线流程的必过项,指定一人复核并留痕;上线后72小时内每天查看WAF拦截日志与异常登录记录,发现异常先拦截再修复。清单不是一次性动作,每次发版前重跑一遍网络与权限两项,成本最低、收益最高。
常见问题(FAQ)
网站上线前最低限度要做哪些安全检查?
最低限度做四件事:关闭不必要端口并限制管理后台来源IP、修改所有默认口令并启用强密码策略、配置HTTPS强制跳转与基础安全响应头、完成一次数据库与站点文件的备份恢复演练。这四项覆盖了绝大多数自动化扫描器能直接利用的入口,成本低、收益高,建议作为上线前的硬性门槛。
小站没有专职安全人员,需要上WAF吗?
建议上。WAF的价值在于用较低成本拦住批量扫描、常见SQL注入与路径穿越请求,为补丁和代码修复争取时间。选择时优先看是否支持自定义规则、CC防护与日志留存,接入后先用观察模式跑几天,确认没有误拦正常业务再切拦截模式。
HTTPS配置好就安全了吗?
不够。HTTPS只解决传输加密,还要强制HTTP跳转HTTPS、开启HSTS、禁用TLS 1.0/1.1与弱加密套件,并检查证书链完整性与到期时间。同时补齐X-Content-Type-Options、X-Frame-Options、Referrer-Policy等响应头,降低点击劫持与内容嗅探风险。
备份做了就万无一失吗?
不是。未验证的备份等于没有备份。要定期做真实恢复演练:在测试环境用备份文件还原站点与数据库,确认数据完整、权限正确、站点可正常访问,并记录恢复耗时。同时确保备份文件不与源站放在同一台机器或同一账号下,避免勒索软件一并加密。
上线后发现漏洞应该先修还是先下线?
看可利用性。若存在可远程直接利用的高危漏洞,优先临时下线或通过WAF拦截该路径,再修复;若只是信息泄露类低危问题,可在监控下按计划修复。无论哪种,都要保留变更记录与回滚方案,避免修复过程引入新的可用性问题。