插件窝 干货文章 LNMP安全防护措施有哪些

LNMP安全防护措施有哪些

Nginx 使用 安全 限制 79    来源:    2025-05-08

LNMP(Linux + Nginx + MySQL + PHP)作为常见的Web服务架构,其安全防护需要从系统层、服务层、应用层多维度加固。以下是详细的安全防护措施:


一、操作系统(Linux)安全

  1. 系统更新与补丁管理

    • 定期执行 yum updateapt-get upgrade 更新系统和软件包。
    • 启用自动安全更新(如 unattended-upgrades on Debian)。
  2. 用户与权限控制

    • 禁用root远程登录:修改 /etc/ssh/sshd_config 设置 PermitRootLogin no
    • 使用SSH密钥登录,禁用密码认证:PasswordAuthentication no
    • 为Web服务创建专用低权限用户(如 www-data)。
  3. 防火墙配置

    • 启用防火墙(如 ufwfirewalld),仅开放必要端口(80, 443, 22)。
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw allow 22/tcp --limit 3/minute  # 限制SSH暴力破解
    
  4. 入侵检测与日志监控

    • 安装Fail2Ban防御暴力破解:
    apt install fail2ban
    systemctl enable fail2ban
    
    • 配置日志轮转(如 logrotate)和集中监控(如ELK)。

二、Nginx安全加固

  1. 版本隐藏与基础配置

    • 隐藏Nginx版本号:
    server_tokens off;
    
    • 限制HTTP方法:仅允许GET/POST/HEAD。
    if ($request_method !~ ^(GET|POST|HEAD)$) { return 444; }
    
  2. HTTPS加密

    • 使用Let's Encrypt免费证书:
    certbot --nginx -d example.com
    
    • 配置强加密套件:
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    
  3. 防DDoS与请求限制

    • 限制单个IP的连接速率:
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    limit_req zone=one burst=20;
    
  4. 文件目录防护

    • 禁用敏感目录访问:
    location ~* /(\.git|config|backup) { deny all; }
    
    • 关闭目录列表:
    autoindex off;
    

三、MySQL安全配置

  1. 基础加固

    • 运行 mysql_secure_installation 脚本移除测试数据库和匿名用户。
    • 修改默认端口(非3306)并限制监听IP:
    [mysqld]
    bind-address = 127.0.0.1
    port = 3307
    
  2. 权限管理

    • 遵循最小权限原则,为每个应用创建独立数据库用户:
    CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword!';
    GRANT SELECT,INSERT ON appdb.* TO 'appuser'@'localhost';
    
  3. 日志与审计

    • 启用查询日志和慢查询日志(需定期清理):
    [mysqld]
    general_log = 1
    slow_query_log = 1
    

四、PHP安全优化

  1. php.ini关键配置

    • 禁用危险函数:
    disable_functions = exec,passthru,shell_exec,system
    
    • 限制文件上传:
    upload_max_filesize = 2M
    post_max_size = 3M
    
  2. 运行环境隔离

    • 使用PHP-FPM进程池隔离不同网站:
    [www-example.com]
    user = www-example
    group = www-example
    listen = /run/php/php7.4-fpm-example.sock
    
  3. 防护PHP漏洞

    • 定期更新PHP版本(如从PHP 7.x升级到8.x)。
    • 安装Suhosin扩展(针对PHP的加固补丁)。

五、Web应用层防护

  1. 代码安全

    • 对用户输入严格过滤(如使用 filter_var() 或ORM防止SQL注入)。
    • 文件上传验证:检查MIME类型、重命名随机化存储路径。
  2. WAF(Web应用防火墙)

    • 使用Nginx的ModSecurity模块或云WAF(如Cloudflare)。
  3. 定期扫描

    • 使用工具(如Nikto、OpenVAS)扫描漏洞:
    nikto -h https://example.com
    

六、备份与灾备

  1. 自动化备份

    • 数据库每日全量备份:
    mysqldump -u root -p --all-databases | gzip > /backup/mysql_$(date +%F).sql.gz
    
    • 网站文件增量备份(如使用 rsync)。
  2. 异地备份

    • 通过SCP或Rclone同步到远程存储(如AWS S3)。

七、监控与响应

  • 实时监控:Prometheus + Grafana监控服务状态。
  • 应急响应:预先制定入侵处理流程(如隔离服务器、分析日志、重置密钥)。

通过以上措施,LNMP架构的安全性将显著提升,但需注意安全是持续过程,需定期审计和更新策略。