LNMP服务器安全设置指南
LNMP(Linux+Nginx+MySQL+PHP)架构是当前主流的Web服务组合,其安全性需从系统底层到应用层分层防护。以下是具体安全设置措施:
systemctl disable禁用未使用的服务。/etc/sysctl.conf增强系统抗攻击能力,例如启用地址空间布局随机化(kernel.randomize_va_space=2)、限制SYN洪水攻击(net.ipv4.tcp_syncookies=1),执行sysctl -p使配置生效。nginx.conf中设置server_tokens off;关闭版本号显示;使用more_clear_headers Server;移除响应头中的“Server”标识,避免攻击者通过版本信息针对性攻击。allow/deny指令限制敏感目录(如/admin)的IP访问;禁用自动目录列表(autoindex off;)防止文件泄露;限制HTTP方法(仅允许GET、POST、HEAD),拒绝TRACE、DELETE等危险方法(limit_except GET POST { deny all; })。return 301 https://$host$request_uri;);启用HSTS头部(add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";);配置强加密套件(ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on;)。limit_req_zone限制单IP请求速率(如limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s;),防止DDoS攻击;通过client_max_body_size 2M;限制上传文件大小,避免大文件消耗服务器资源。SELECT、INSERT),禁止授予ALL PRIVILEGES、FILE、SUPER等高危权限;使用GRANT语句精确授权(如GRANT SELECT, INSERT ON appdb.* TO 'appuser'@'localhost';)。mysql_secure_installation工具初始化密码);删除匿名用户(DROP USER ''@'localhost';)和测试数据库(DROP DATABASE IF EXISTS test;);启用SSL加密连接(REQUIRE SSL)保护数据传输。general_log = ON)记录所有查询,或使用MySQL Enterprise Audit插件进行细粒度审计,便于事后追溯异常行为。php.ini中禁用危险函数(如exec、system、eval,disable_functions = exec,system,eval);设置open_basedir限制PHP访问目录(如open_basedir = /var/www/html:/tmp/),防止非法文件访问;关闭错误显示(display_errors = Off),将错误日志记录到指定文件(error_log = /var/log/php_errors.log),避免泄露敏感信息。filter_var()函数验证用户输入(如电子邮件:filter_var($email, FILTER_VALIDATE_EMAIL)),过滤特殊字符(如htmlspecialchars()转义输出,防止XSS攻击)。prepare+bind_param),将SQL结构与数据分离(如$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $username);),彻底杜绝SQL注入。session_start(); $_SESSION['csrf_token'] = bin2hex(random_bytes(32));),提交时验证令牌(if ($_SESSION['csrf_token'] !== $_POST['csrf_token']) die('Invalid token');)。in_array($_FILES['file']['type'], ['image/jpeg', 'image/png']))、大小(如≤2MB);将文件存储在非Web可访问目录(如/var/uploads/),避免直接通过URL访问。apt update && apt upgrade(Ubuntu)或yum update(CentOS)进行更新。access.log、error.log)、MySQL(error.log)、PHP(php_errors.log)日志,使用grep、awk等工具分析异常请求(如大量404错误、SQL错误)。/var/www/html)和数据库(使用mysqldump),将备份文件加密(如gpg -c backup.sql)并存储到异地(如云存储),测试恢复流程确保有效性。/etc/fail2ban/jail.local限制失败次数)。