新站上线后的安全配置不是装个防火墙或者加个HTTPS就结束了。很多站点被挂黑链、被植入后门、被批量注册垃圾会员,根源都在初始化阶段忽略了几个关键位置。下面直接按配置顺序讲操作,每一步都对应一个真实风险点。

一、先锁定服务器登录入口,别让面板裸奔

拿到一台新服务器或虚拟主机,第一件事是修改默认管理端口和超级管理员账号。无论是宝塔、LNMP一键包还是云主机自带的VNC,默认端口和admin路径都是扫描器最先试探的目标。SSH登录不要使用22端口,后台管理地址不要使用/admin或者/login这种常见路径。修改后自己记住即可,不需要对外公开。

如果使用云服务器,安全组规则要同步收紧。只放行80、443以及你修改后的SSH端口,数据库端口3306、Redis端口6379不要对公网开放。很多人数据库被删库勒索,就是因为安全组默认放行了所有端口,而数据库又设置了弱口令。

二、强制HTTPS并统一域名版本

证书申请完成后,不要只把HTTPS当作“可选访问方式”。要在Web服务器配置中强制301跳转,把所有HTTP请求转到HTTPS,同时把非www域名统一跳转到主域名。否则搜索引擎会收录多个重复版本,后续做排名时权重分散,安全层面也容易被中间人利用HTTP版本注入广告或跳转代码。

Nginx配置示例:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

同时开启HSTS响应头,让浏览器在本地强制走HTTPS,降低首次访问被劫持的概率。配置如下:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

三、文件权限和目录归属要按最小化原则设置

网站根目录下的文件权限常见错误是全部设置为777。这等于把写入权限交给了任何一个能通过Web漏洞执行命令的人。正确做法是:普通PHP文件设置为644,目录设置为755,只有需要运行时写入的目录(如缓存目录、上传目录、日志目录)才设置为755并归属给Web运行用户。

以Nginx+PHP-FPM为例,假设Web运行用户为www,网站根目录为/home/wwwroot/example.com:

find /home/wwwroot/example.com -type f -exec chmod 644 {} \;
find /home/wwwroot/example.com -type d -exec chmod 755 {} \;
chown -R www:www /home/wwwroot/example.com/runtime
chown -R www:www /home/wwwroot/example.com/uploads

上传目录要单独禁止PHP执行。攻击者一旦上传了伪装成图片的PHP木马,如果该目录允许执行PHP,服务器就会被控制。在Nginx中可以对uploads目录单独加location规则:

location ~* ^/uploads/.*\.(php|php5|phtml)$ {
    deny all;
}

四、数据库账号分离,别用root跑业务

安装网站程序时,很多人图省事直接用root账号连接数据库。一旦程序出现SQL注入漏洞,攻击者拿到的不只是当前库的数据,而是整个数据库服务器的控制权。正确做法是为每个站点创建独立数据库账号,只授予该库的增删改查权限,不授予DROP、ALTER、FILE等危险权限。

MySQL示例:

CREATE DATABASE site_db DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'site_user'@'localhost' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON site_db.* TO 'site_user'@'localhost';
FLUSH PRIVILEGES;

数据库监听地址保持127.0.0.1,不要开启远程访问。如果确实需要远程管理,通过SSH隧道连接,而不是直接开放3306端口。

五、后台路径和管理员账户要隐藏与强化

新站上线后,后台登录页是暴力破解的主要目标。不要使用默认管理员用户名admin,密码不要使用与域名相关或常见组合。后台路径能改则改,不能改就用Web服务器规则限制访问IP。比如只允许公司出口IP访问后台:

location /admin {
    allow 1.2.3.4;
    deny all;
}

登录接口增加验证码或限制失败次数。如果使用的CMS不支持这些功能,可以在Web服务器层做基础防护,比如限制单IP每分钟对登录页的请求次数。

六、关闭不必要的服务和端口

新服务器默认可能开启了FTP、邮件服务、测试页面等。每多开一个服务就多一个攻击面。用netstat -tlnp查看当前监听端口,只保留Nginx、PHP-FPM、SSH和你需要的服务。FTP传输密码是明文,建议用SFTP替代。如果必须用FTP,至少限制登录IP并强制使用FTPS。

同时删除Web目录下的默认文件,比如phpinfo.php、test.php、安装目录install、升级目录upgrade等。这些文件往往包含版本信息或直接可执行功能,上线后必须清理。

七、部署基础防火墙和入侵检测

服务器层面的防火墙推荐使用iptables或firewalld,只放行必要端口。应用层面可以安装WAF模块,比如ModSecurity或各面板自带的WAF功能。WAF规则不需要全开,先开启SQL注入、XSS、文件上传、目录遍历这几类核心防护,观察误报情况再逐步调整。

同时设置文件监控,对网站根目录下新增或修改的PHP文件做记录。很多后门是在半夜被写入的,事后排查时如果没有监控记录,很难判断入侵时间点和入口。可以使用inotifywait配合脚本记录,或者使用面板自带的文件变动提醒。

八、备份策略要上线前就定好

安全配置做得再好,也不能保证绝对不被入侵。新站上线前必须确定备份频率和保留份数。数据库建议每天备份一次,保留最近7天;整站文件建议每周备份一次,保留最近4周。备份文件不要放在网站根目录下,否则攻击者拿到Webshell后可以直接下载备份包。备份应存储在独立目录或远程对象存储中。

验证备份可用性同样重要。很多站长等到被黑后才发现备份文件损坏或备份的是空库。上线第一周内至少做一次完整的恢复演练,确认备份流程可执行。

九、日志开启与定期检查

Web访问日志和错误日志必须开启,并设置合理的切割周期。日志不仅能用于分析流量,更是安全事件追溯的核心依据。建议对后台登录页、支付回调、API接口等敏感路径单独记录日志,包含IP、时间、请求参数和返回状态码。

上线后前两周每天查看一次日志,重点排查异常POST请求、大量404请求、带有SQL关键词或脚本标签的请求。这些往往是扫描器或自动化攻击的痕迹。

十、CMS与插件版本管理

如果使用WordPress、织梦、帝国等开源程序,上线前确认核心版本和所有插件均为最新稳定版。不要安装来源不明的破解主题或插件,这类文件是后门重灾区。对于不再维护的插件,尽量寻找替代方案,因为旧插件与新版本核心的兼容性漏洞往往成为攻击入口。

建立版本更新机制,每月至少检查一次官方安全公告。重大漏洞发布后,24小时内完成更新。如果站点有自定义开发代码,更新前先在测试环境验证,避免直接在生产环境操作导致业务中断。

新站安全初始化不是一次性工作,而是一套需要持续维护的基线。把上述配置在上线前全部落实,后续再根据日志和监控数据逐步收紧策略,就能把绝大多数自动化攻击挡在门外。真正需要投入精力的,是上线后对异常行为的持续关注和快速响应。