网站安全基线检查不是一个可选项,而是每个运维和开发团队必须定期执行的硬性操作。所谓"基线检查",就是对照一套最低安全标准,逐项排查你的服务器、应用、数据库、网络配置是否达标。很多网站被入侵,不是因为黑客技术多高明,而是因为最基础的安全配置没做好——默认密码没改、端口随意开放、日志从来不看、补丁半年不打。下面我直接给你10个系统加固策略,每个都是实战中验证过的,照着做就能把风险降到最低。

一、关闭不必要的服务和端口,最小化攻击面

每多开一个服务、多暴露一个端口,就多一个被攻击的入口。很多服务器装完系统后,默认跑着几十个服务,其中一半你根本用不上。第一步就是用netstat或ss命令查看当前监听的端口,把不需要的全部关掉。比如你只跑Web服务,那SSH以外的22端口以外,其他如Telnet、FTP、RDP如果不用就必须禁用。具体操作可以用firewalld或iptables做端口白名单,只允许必要的流量进来。

# 查看当前监听端口
ss -tlnp

# 仅开放80、443和22端口(firewalld示例)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --remove-service=ftp
firewall-cmd --reload

二、强化SSH远程登录安全配置

SSH是服务器管理的核心通道,也是暴力破解的重灾区。加固SSH要做三件事:第一,禁止root直接远程登录,改成普通用户登录后再su;第二,把默认22端口改成一个非标准端口,比如22222,能过滤掉大部分自动化扫描脚本;第三,强制使用密钥认证,禁用密码登录。同时设置登录失败锁定策略,比如5次失败就锁定账户30分钟。修改配置文件/etc/ssh/sshd_config,改完重启sshd服务生效。

# /etc/ssh/sshd_config 关键配置项
Port 22222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

三、操作系统和软件补丁及时更新

漏洞补丁是安全加固最基本也最容易被忽视的环节。系统内核、Web服务器、数据库、PHP/Python运行环境,任何一个组件有已知漏洞没打补丁,攻击者就能利用它拿到权限。建议开启自动安全更新,或者至少每周手动检查一次。CentOS用yum update,Ubuntu用apt upgrade,同时关注各软件的官方安全公告。特别注意:不要因为怕影响业务就长期不更新,一个未修补的RCE漏洞远比一次计划内重启风险大。

四、数据库安全加固,防止数据泄露

数据库是网站的核心资产,也是攻击者最想拿到的东西。加固要从几个层面入手:首先,数据库监听地址不要绑定0.0.0.0,只绑定127.0.0.1或内网IP;其次,删除默认的test数据库和匿名账户;第三,给每个应用分配独立的数据库用户,权限遵循最小原则,只给SELECT、INSERT、UPDATE等必要权限,绝不给DROP、GRANT;第四,开启数据库的审计日志,记录所有操作。MySQL的话,执行mysql_secure_installation是最快的初始加固方式。

-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 删除test数据库
DROP DATABASE IF EXISTS test;
-- 创建受限应用用户
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'StrongPass!2024';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'webapp'@'localhost';
FLUSH PRIVILEGES;

五、Web应用防火墙(WAF)部署与规则优化

WAF是抵御应用层攻击的第一道防线,能有效拦截SQL注入、XSS跨站脚本、文件上传漏洞利用等常见攻击。如果你用的是Nginx或Apache,可以部署ModSecurity这样的开源WAF模块,配合OWASP核心规则集使用。云服务商一般也提供WAF服务,开启后要根据自己的业务做规则调优,避免误拦截正常请求。WAF不是装上就完事,规则集要定期更新,日志要定期分析,发现新的攻击模式要及时添加自定义规则。

六、文件权限与目录安全控制

很多入侵是因为文件权限设置过于宽松。Web目录下的文件,属主应该是运行Web服务的用户(比如www-data或nginx),权限一般设为755(目录)和644(文件),绝对不能出现777。上传目录要禁止执行脚本,在Nginx配置中对upload目录关闭PHP解析。同时,禁止目录浏览功能,在配置中加上autoindex off。敏感配置文件如.env、config.php要移到Web根目录之外,或者通过.htaccess禁止直接访问。定期用find命令扫描异常权限文件也是好习惯。

# Nginx禁止上传目录执行PHP
location /uploads/ {
    location ~* \.php$ {
        deny all;
    }
}

# 查找权限异常的文件
find /var/www -type f -perm 777
find /var/www -type d -perm 777

七、启用HTTPS并强制TLS安全配置

全站HTTPS已经是基线要求,不是加分项。用Let's Encrypt可以免费申请证书,但重点不在证书本身,而在TLS配置。要禁用TLS 1.0和1.1这些老旧协议,只允许TLS 1.2和1.3;禁用弱加密套件,比如RC4、DES、3DES;开启HSTS头让浏览器记住你的站点只能用HTTPS访问。证书到期自动续期也要配好,否则证书过期导致网站打不开,比安全问题还麻烦。

# Nginx TLS安全配置示例
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

八、日志监控与入侵检测部署

没有日志就等于没有眼睛。你必须开启系统日志(syslog/journald)、Web访问日志、错误日志、数据库审计日志,并且把日志集中存储到独立的日志服务器上,防止攻击者入侵后删日志。推荐部署OSSEC、Fail2ban或AIDE这类入侵检测工具。Fail2ban可以自动分析日志,对多次登录失败、异常请求的IP进行自动封禁。日志至少保留90天,关键安全事件日志要永久保存。同时设置日志异常告警,比如短时间内大量404、大量登录失败,都应该触发通知。

九、备份策略与灾难恢复演练

安全加固做得再好,也不能保证百分之百不出事。备份是最后一道保险。网站文件、数据库、配置文件要分开备份,执行频率至少每天一次全量备份,数据库用binlog做增量备份。备份文件不能放在同一台服务器上,要传到异地或对象存储。更重要的是,备份要定期做恢复测试,很多人备份了但从来没验证过能不能恢复,真出事才发现备份文件损坏或者不完整。建议每季度做一次完整的灾难恢复演练,记录恢复时间和流程,持续优化。

十、定期安全基线扫描与合规审计

前面九项是具体操作,第十项是制度保障。你需要建立定期扫描机制,用自动化工具做基线检查。比如用OpenSCAP、Lynis、CIS-CAT等工具对服务器做合规扫描,对照CIS Benchmark或等保要求逐项打分。扫描结果要形成报告,不合规项要限期整改并复检。安全不是一次性工程,是持续运营的过程。建议每月做一次自动化扫描,每季度做一次人工渗透测试,每年做一次全面安全评估。把安全基线检查纳入运维SOP,新人入职、新服务上线都要过一遍安全检查清单。

总结一下,这10个策略覆盖了从网络层、系统层、应用层到数据层的完整防护链条。不需要你一次性全部做到完美,但至少要把前五项作为最低标准立刻执行。安全加固的核心逻辑就是:减少攻击面、提高攻击成本、增强发现能力、确保恢复能力。把这四点想明白,你的网站安全基线就不会太差。