温馨提示×

Debian上LNMP安全吗

小樊
44
2026-01-03 09:22:00
栏目: 智能运维

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_phpdisplay_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-data750权限,避免777

  • 日志、监控与入侵防护
    集中收集与定期审计**/var/log/(如nginx/error.log、mysql/error.log、syslog**);部署Fail2ban对SSH/Nginx暴力破解进行自动封禁;可用Logwatch/Auditd做基线审计与告警。

快速加固命令示例

  • 系统与防火墙

    • sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y
    • sudo apt install ufw -y
    • sudo ufw default deny incoming
    • sudo ufw default allow outgoing
    • sudo ufw allow OpenSSH
    • sudo ufw allow 80/tcp
    • sudo ufw allow 443/tcp
    • sudo ufw enable
  • SSH

    • sudo nano /etc/ssh/sshd_config
      Port 2222
      PermitRootLogin no
      PasswordAuthentication no
      PubkeyAuthentication yes
    • sudo systemctl restart ssh
  • Nginx与TLS

    • sudo apt install certbot python3-certbot-nginx -y
    • sudo certbot --nginx --redirect --hsts --staple-ocsp -d yourdomain.com
  • MariaDB

    • sudo mysql_secure_installation
    • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
      bind-address = 127.0.0.1
    • sudo systemctl restart mariadb
  • Fail2ban

    • sudo apt install fail2ban -y
    • sudo systemctl enable --now fail2ban

常见风险与排查要点

  • 暴露管理端口与弱口令:确认仅开放22/80/443,SSH仅密钥登录,禁用root远程与密码认证。
  • 未加密传输:全站启用HTTPS/TLS并开启HSTS,避免明文凭据与会话劫持。
  • 目录遍历与上传漏洞:关闭autoindex,限制上传类型/大小,正确配置PHP-FPMopen_basedir,禁止脚本在上传目录执行。
  • 信息泄露:隐藏Nginx/PHP版本,生产环境关闭display_errors,错误写入日志。
  • 资源耗尽与DoS:设置client_max_body_size、limit_req/limit_connPHP-FPM进程上限。
  • 数据库过度授权:仅授予应用所需权限,默认本地访问,必要时启用SSL
  • 缺少入侵防护:部署Fail2ban并定期审计**/var/log/**异常。

安全等级自评表

检查项 目标状态 验证方式
系统与组件更新 持续更新至最新稳定版 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/ 检查

0