LNMP环境下如何确保服务器安全
小樊
34
2025-11-30 06:56:43
LNMP环境服务器安全加固清单
一 系统与账户安全
- 保持系统、内核与组件持续更新:执行apt update && apt upgrade -y或yum update -y,及时修补漏洞。
- 最小权限与专用账户:创建非root的web服务用户(如 webuser),禁止 root 远程登录(修改**/etc/ssh/sshd_config中的PermitRootLogin no**并重启 sshd)。
- 强化密码与密钥:使用强密码/SSH密钥,禁用密码登录(可选PasswordAuthentication no),限制sudo使用范围。
- 基础防护:开启自动安全更新(如 unattended-upgrades),定期运行rkhunter/chkrootkit进行 rootkit 检查。
二 网络与防火墙
- 仅开放必要端口:对公网仅放行22/80/443;数据库端口3306默认仅127.0.0.1监听,禁止从公网直连。
- 防火墙工具选择:
- Ubuntu/Debian:使用UFW,如ufw allow ‘Nginx Full’;
- CentOS/RHEL:使用firewalld,如firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload;
- 如需精细控制可用iptables设置默认策略并仅放行必要端口。
- 数据库访问控制:在MySQL中创建最小权限账户,来源限制为localhost或内网网段。
三 Nginx与PHP-FPM安全
- Nginx加固:关闭版本暴露(server_tokens off;),限制可用方法(仅GET/HEAD/POST返回405),隐藏不必要的响应头;启用安全头(X-Frame-Options SAMEORIGIN、X-XSS-Protection “1; mode=block”、X-Content-Type-Options nosniff、合理的Content-Security-Policy);禁用目录浏览;将HTTP→HTTPS 301跳转。
- SSL/TLS:仅启用TLSv1.2/TLSv1.3,使用ECDHE与AEAD套件,开启HSTS(如add_header Strict-Transport-Security “max-age=63072000” always;),启用OCSP Stapling。
- PHP-FPM与PHP:运行最小权限的 FPM 池(如user/group webuser),进程数按内存调优;在php.ini中关闭expose_php、禁用危险函数(如exec/passthru/shell_exec/system/proc_open等)、关闭allow_url_fopen/allow_url_include、关闭display_errors、开启log_errors;使用open_basedir限制脚本访问范围。
四 数据库与文件权限
- MySQL安全:运行mysql_secure_installation;删除匿名账户与测试库;设置强root密码;创建最小权限业务账户并限制来源;如跨主机访问,启用TLS加密连接。
- 文件与目录:网站根目录属主为webuser,目录权限750、文件权限640;禁止执行上传目录脚本;保护敏感配置(如**/etc/mysql/my.cnf、/etc/php/)权限为600**;上传目录单独设置,禁止解析**.php**。
- 备份与恢复:定期备份数据库与网站文件(如mysqldump与tar),并进行恢复演练验证可用性。
五 日志监控与合规
- 日志与审计:集中收集并轮转Nginx、PHP-FPM、MySQL日志(如logrotate),保留至少14天;监控**/var/log/auth.log与fail2ban**日志,关注暴力破解与异常登录。
- 入侵防护:部署fail2ban对SSH/Nginx进行封禁;可选WAF(如基于ngx_lua_waf)缓解SQLi/XSS/CC等常见攻击。
- 监控告警与合规:使用Prometheus/Grafana等监控CPU/内存/连接数/错误率,设置阈值告警;定期进行安全审计与渗透测试,持续加固。