插件窝 干货文章 LNMP服务器如何安全配置

LNMP服务器如何安全配置

配置 安全 bash Nginx 363    来源:    2025-05-06

LNMP服务器安全配置指南

LNMP (Linux + Nginx + MySQL + PHP) 是一种常见的Web服务器架构。为确保服务器安全,需要进行全面的安全配置。以下是详细的配置建议:

一、操作系统安全

  1. 系统更新

    # 定期更新系统
    apt update && apt upgrade -y  # Debian/Ubuntu
    yum update -y                 # CentOS/RHEL
    
  2. 禁用root远程登录

    # 修改/etc/ssh/sshd_config
    PermitRootLogin no
    # 重启SSH服务
    systemctl restart sshd
    
  3. 创建普通用户并配置sudo权限

    adduser username
    usermod -aG sudo username  # Debian/Ubuntu
    usermod -aG wheel username # CentOS/RHEL
    
  4. 修改SSH端口

    # 修改/etc/ssh/sshd_config
    Port 2222
    # 重启SSH服务
    systemctl restart sshd
    
  5. 配置防火墙

    # 使用UFW (Ubuntu)
    ufw allow 2222/tcp  # SSH新端口
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw enable
    
    # 使用firewalld (CentOS)
    firewall-cmd --permanent --add-port=2222/tcp
    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --permanent --add-port=443/tcp
    firewall-cmd --reload
    

二、Nginx安全配置

  1. 隐藏Nginx版本信息

    # 在nginx.conf的http块中添加
    server_tokens off;
    
  2. 禁用不必要的HTTP方法

    location / {
       limit_except GET POST {
           deny all;
       }
    }
    
  3. 配置SSL/TLS

    server {
       listen 443 ssl http2;
       ssl_certificate /path/to/cert.pem;
       ssl_certificate_key /path/to/key.pem;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
       ssl_prefer_server_ciphers on;
       ssl_session_cache shared:SSL:10m;
       ssl_session_timeout 10m;
    }
    
  4. 防止信息泄露

    location ~ /\. {
       deny all;
    }
    
    location ~* \.(ini|log|conf|bak|sql)$ {
       deny all;
    }
    

三、MySQL安全配置

  1. 运行安全脚本

    mysql_secure_installation
    
  2. 禁用远程root访问

    DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
    FLUSH PRIVILEGES;
    
  3. 创建专用数据库用户

    CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    GRANT SELECT, INSERT, UPDATE, DELETE ON dbname.* TO 'webuser'@'localhost';
    FLUSH PRIVILEGES;
    
  4. 启用二进制日志审计

    # 在my.cnf中添加
    [mysqld]
    log-bin=mysql-bin
    binlog_format=ROW
    

四、PHP安全配置

  1. 禁用危险函数

    # 在php.ini中修改
    disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    
  2. 限制文件访问

    open_basedir = /var/www/html:/tmp
    
  3. 调整错误报告级别

    display_errors = Off
    log_errors = On
    error_log = /var/log/php_errors.log
    
  4. 配置上传限制

    upload_max_filesize = 2M
    post_max_size = 8M
    

五、其他安全措施

  1. 安装Fail2Ban防止暴力破解

    apt install fail2ban -y  # Debian/Ubuntu
    yum install fail2ban -y  # CentOS/RHEL
    
  2. 配置自动安全更新

    apt install unattended-upgrades -y  # Debian/Ubuntu
    yum install yum-cron -y            # CentOS/RHEL
    
  3. 定期备份

    # 使用crontab设置定期备份
    0 3 * * * /usr/bin/mysqldump -u username -p'password' dbname > /backup/dbname-$(date +\%Y\%m\%d).sql
    0 4 * * * tar -zcvf /backup/web-$(date +\%Y\%m\%d).tar.gz /var/www/html
    
  4. 监控和日志分析

    • 安装并配置Logwatch或ELK Stack
    • 设置日志轮转防止日志过大

六、定期安全检查

  1. 漏洞扫描

    # 使用lynis进行系统审计
    lynis audit system
    
  2. 检查可疑进程

    ps aux | grep -E '(nmap|nikto|sqlmap|hydra|john)'
    
  3. 检查异常登录

    last
    grep 'Failed password' /var/log/auth.log
    

通过以上配置,您的LNMP服务器将具备较高的安全性。请记住,安全是一个持续的过程,需要定期更新和维护这些配置。