Debian上LNMP的安全性概览
在Debian上搭建的LNMP(Linux + Nginx + MySQL/MariaDB + PHP)可以达到较高的安全水平,但安全性并非由“组合本身”决定,而取决于你的配置、补丁策略、最小权限原则与持续运维。采用最新稳定版、及时更新系统与安全补丁、并配合防火墙、SSH密钥登录、数据库加固、Nginx/TLS与PHP安全配置、日志与入侵防护等措施,可显著降低风险;反之,默认安装且暴露管理端口、弱口令或未加密传输,都会带来严重隐患。
关键安全要点清单
系统与软件更新
定期执行apt update && apt full-upgrade,启用安全更新与自动安全通知,及时修补内核与组件漏洞。
防火墙与端口最小化
使用UFW仅开放必要端口:如80/tcp(HTTP)、443/tcp(HTTPS)、22/tcp(SSH);必要时仅允许可信IP访问SSH。
SSH安全
修改默认端口(如2222)、禁用root远程登录、强制SSH密钥认证(可关闭密码登录),并重启sshd生效。
数据库(MySQL/MariaDB)
运行mysql_secure_installation;将bind-address=127.0.0.1限制本地访问;按“最小权限”创建应用账号与授权;必要时启用SSL/TLS连接。
Nginx安全
启用HTTPS/TLS(如Let’s Encrypt/certbot),隐藏版本信息(server_tokens off;),强制HTTP→HTTPS跳转,配置安全响应头(如X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy、Content-Security-Policy、Strict-Transport-Security),并对上传与请求进行限速/限流/大小限制。
PHP安全
关闭expose_php与display_errors,开启log_errors;限制资源(如max_execution_time、memory_limit、upload_max_filesize);禁用危险函数(如exec、shell_exec、system等);使用open_basedir限制脚本可访问目录;合理配置PHP-FPM进程与权限。
权限与用户管理
创建非root运维账号并加入sudo;使用libpam-pwquality实施强密码策略;网站目录建议www-data:www-data与750权限,避免777。
日志、监控与入侵防护
集中收集与定期审计**/var/log/(如nginx/error.log、mysql/error.log、syslog**);部署Fail2ban对SSH/Nginx暴力破解进行自动封禁;可用Logwatch/Auditd做基线审计与告警。
快速加固命令示例
系统与防火墙
SSH
Nginx与TLS
MariaDB
Fail2ban
常见风险与排查要点
安全等级自评表
| 检查项 | 目标状态 | 验证方式 |
|---|---|---|
| 系统与组件更新 | 持续更新至最新稳定版 | apt policy/安全更新日志 |
| 防火墙 | 仅开放80/443/SSH | ufw status / ss -tulpen |
| SSH | 密钥登录、禁用root、改端口 | sshd_config 与连接测试 |
| 数据库 | 本地访问、最小权限、安全脚本 | mysql_secure_installation、GRANT 与 bind-address |
| Nginx | TLS/HSTS、安全头、无版本泄露 | 浏览器开发者工具、curl -I |
| PHP | 禁用危险函数、open_basedir、日志 | phpinfo()、php.ini 与 FPM 池配置 |
| 日志与防护 | Fail2ban 运行、日志集中 | fail2ban-client status、/var/log/ 检查 |