插件窝 干货文章 LNMP安全设置有哪些要点

LNMP安全设置有哪些要点

Nginx 安全 MySQL 使用 559    来源:    2025-05-04

LNMP(Linux + Nginx + MySQL + PHP)作为常见的Web服务架构,其安全设置需要从系统层、服务层和应用层多维度加固。以下是关键安全要点及实施建议:


一、操作系统层安全

  1. 最小化安装与更新

    • 仅安装必要软件包:yum --setopt=install_weak_deps=False install package(CentOS)
    • 定期更新系统:apt update && apt upgrade -y(Debian/Ubuntu)
  2. 用户与权限控制

    • 禁用root远程登录:修改/etc/ssh/sshd_configPermitRootLogin no
    • 创建专用低权限用户运行服务:useradd -r -s /sbin/nologin www-service
  3. 防火墙配置

    • 仅开放必要端口(如80/443/22): bash ufw allow 22/tcp ufw allow 80,443/tcp ufw enable
  4. 文件系统防护

    • 关键目录设置不可变属性:chattr +i /etc/passwd /etc/shadow
    • 使用SELinux/AppArmor限制进程权限(如Nginx的SELinux策略)

二、Nginx安全加固

  1. 隐藏版本信息

    server_tokens off;
    more_clear_headers 'Server';
    
  2. 限制HTTP方法

    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
       return 405;
    }
    
  3. 防目录遍历与敏感文件访问

    location ~* \.(env|log|htaccess)$ { deny all; }
    location ~ /\. { deny all; access_log off; log_not_found off; }
    
  4. SSL/TLS强化

    • 使用TLS 1.2/1.3并禁用弱加密套件: nginx ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
  5. 防DDoS基础

    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    location / { limit_req zone=one burst=20; }
    

三、MySQL安全配置

  1. 运行账户隔离

    chown -R mysql:mysql /var/lib/mysql
    
  2. 安全初始化

    • 执行mysql_secure_installation移除测试数据库、匿名用户等
  3. 权限最小化

    CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!';
    GRANT SELECT,INSERT ON appdb.* TO 'appuser'@'localhost';
    
  4. 日志审计

    # my.cnf
    [mysqld]
    log-error=/var/log/mysql/mysql-error.log
    log-queries-not-using-indexes=1
    

四、PHP安全优化

  1. 禁用危险函数

    disable_functions = exec,passthru,shell_exec,system,proc_open,popen
    
  2. 文件权限控制

    open_basedir = /var/www/html:/tmp
    
  3. 防信息泄露

    expose_php = Off
    display_errors = Off
    log_errors = On
    
  4. Session安全

    session.cookie_httponly = 1
    session.cookie_secure = 1  # 启用HTTPS时使用
    

五、应用层防护

  1. 代码安全

    • 使用预处理语句防SQL注入(PDO/mysqli)
    • 输入输出过滤(如htmlspecialchars()防XSS)
  2. 文件上传限制

    • Nginx限制上传大小:client_max_body_size 10M;
    • PHP配置:upload_max_filesize = 10M
  3. 定期备份

    # 数据库备份
    mysqldump -u root -p --opt --routines appdb > /backups/appdb_$(date +%F).sql
    # 网站文件备份
    tar czf /backups/web_$(date +%F).tar.gz /var/www/html
    

六、监控与维护

  1. 日志集中分析

    • 使用Fail2ban防暴力破解: ini [nginx-http-auth] enabled = true filter = nginx-auth action = iptables[name=nginx, port=http, protocol=tcp]
  2. 定期漏洞扫描

    • 使用OpenVAS或Trivy扫描系统漏洞
    • 检查Web应用漏洞(如WPScan针对WordPress)
  3. 服务隔离

    • 将MySQL与Nginx部署在不同容器/主机
    • 使用Docker时启用只读文件系统:docker run --read-only

典型加固流程示例

# 1. 系统更新
apt update && apt upgrade -y

# 2. 防火墙设置
ufw allow 22/tcp && ufw allow 80,443/tcp && ufw enable

# 3. 创建专用用户
useradd -r -s /sbin/nologin webuser
chown -R webuser:webuser /var/www/html

# 4. 一键安全MySQL
mysql_secure_installation

# 5. 部署Let's Encrypt证书
certbot --nginx -d example.com

通过以上分层防护策略,可显著提升LNMP环境的安全性。建议结合具体业务需求调整配置,并定期进行安全审计。