插件窝 干货文章 LNMP环境下如何防止攻击

LNMP环境下如何防止攻击

安全 使用 配置 备份    来源:    2025-05-06

LNMP环境安全防护指南

LNMP(Linux + Nginx + MySQL + PHP)环境是常见的Web服务器架构,以下是针对LNMP环境的全面安全防护措施:

一、操作系统(Linux)安全

  1. 系统更新与补丁管理

    • 定期执行:yum update 或 apt-get update && apt-get upgrade
    • 启用自动安全更新
  2. 用户与权限管理

    • 禁用root远程登录:修改/etc/ssh/sshd_config中PermitRootLogin no
    • 使用SSH密钥认证替代密码登录
    • 创建专用Web用户(如www-data)并限制权限
  3. 防火墙配置

    # 启用防火墙
    systemctl start firewalld  # CentOS
    systemctl start ufw        # Ubuntu
    
    # 只开放必要端口(如80,443,22)
    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --permanent --add-port=443/tcp
    firewall-cmd --permanent --add-port=22/tcp
    firewall-cmd --reload
    
  4. SELinux/AppArmor

    • 启用并配置SELinux或AppArmor进行强制访问控制

二、Nginx安全配置

  1. 基础安全设置

    server_tokens off;  # 隐藏Nginx版本信息
    client_max_body_size 10m;  # 限制上传文件大小
    
  2. SSL/TLS配置

    • 使用Let's Encrypt等免费证书
    • 禁用不安全的协议和加密套件:
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
    ssl_prefer_server_ciphers on;
    
  3. 防止常见Web攻击

    # 防止点击劫持
    add_header X-Frame-Options "SAMEORIGIN";
    
    # XSS防护
    add_header X-XSS-Protection "1; mode=block";
    
    # 内容安全策略
    add_header Content-Security-Policy "default-src 'self'";
    
  4. 限制访问

    # 限制HTTP方法
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
       return 405;
    }
    
    # 禁止访问敏感文件
    location ~* \.(ini|conf|sql|bak|swp)$ {
       deny all;
    }
    

三、MySQL安全配置

  1. 基础安全设置

    -- 删除匿名用户
    DELETE FROM mysql.user WHERE User='';
    
    -- 修改root用户名
    RENAME USER 'root'@'localhost' TO 'admin'@'localhost';
    
    -- 为每个应用创建独立数据库用户
    CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
    FLUSH PRIVILEGES;
    
  2. 配置文件优化

    [mysqld]
    skip-networking  # 如果不需远程访问
    bind-address = 127.0.0.1
    local-infile=0
    symbolic-links=0
    
  3. 定期维护

    • 定期备份数据库
    • 使用mysql_secure_installation脚本加固

四、PHP安全配置

  1. php.ini安全设置

    expose_php = Off
    disable_functions = exec,passthru,shell_exec,system,proc_open,popen
    open_basedir = /var/www/html:/tmp
    allow_url_fopen = Off
    allow_url_include = Off
    display_errors = Off
    log_errors = On
    
  2. PHP版本管理

    • 使用最新稳定版PHP
    • 移除不使用的PHP模块
  3. 应用层防护

    • 对所有用户输入进行过滤和验证
    • 使用预处理语句防止SQL注入
    • 设置合适的文件权限(通常644/755)

五、其他安全措施

  1. Web应用防火墙(WAF)

    • 安装ModSecurity或Naxsi
    • 使用Cloudflare等CDN提供的WAF
  2. 入侵检测系统

    • 安装OSSEC或AIDE
    • 配置日志监控和报警
  3. 定期安全审计

    • 使用lynis进行系统审计
    • 使用OpenVAS或Nessus进行漏洞扫描
  4. 备份策略

    • 实施3-2-1备份策略(3份备份,2种介质,1份离线)
    • 定期测试备份恢复流程

六、应急响应

  1. 建立安全事件响应计划
  2. 监控系统日志和Web访问日志
  3. 准备隔离和恢复方案

通过以上多层次的防护措施,可以显著提高LNMP环境的安全性,有效抵御各类网络攻击。