CentOS LNMP环境安全防护全指南
LNMP(Linux+ Nginx+ MySQL+ PHP)作为主流Web架构,其安全性需从系统基础、组件配置、访问控制、数据保护、监控审计五大维度综合加固。以下是具体实施步骤:
sudo yum update -y更新CentOS系统及所有软件包,及时修复内核、Nginx、MySQL、PHP等组件的已知漏洞,避免被恶意利用。webuser),设置/sbin/nologin作为shell,禁止登录;/etc/ssh/sshd_config中的PermitRootLogin no并重启SSH服务);nginx、PHP-FPM用webuser),避免权限滥用。/etc/ssh/sshd_config中的PasswordAuthentication no);fail2ban监控SSH日志,自动封禁多次登录失败的IP。server_tokens off;,避免泄露版本号给攻击者;if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; });Server、X-Powered-By等头部(使用more_clear_headers指令),减少信息暴露;X-Frame-Options "SAMEORIGIN"(防止点击劫持)、X-XSS-Protection "1; mode=block"(启用XSS保护)、Content-Security-Policy "default-src 'self'"(限制资源加载来源)、X-Content-Type-Options "nosniff"(防止MIME类型混淆);limit_req_zone设置请求速率限制(如limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;),并在location中应用limit_req zone=mylimit burst=5;。sudo mysql_secure_installation,设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库;webuser),仅授予SELECT、INSERT、UPDATE、DELETE等必要权限(避免使用root);/etc/my.cnf,设置skip-name-resolve(禁止DNS反向解析)、local-infile=0(禁用本地文件加载)、secure-file-priv=/var/lib/mysql-files(限制文件导入导出路径)。php.ini中设置disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,防止命令执行攻击;display_errors = Off),开启日志记录(log_errors = On),并将日志写入/var/log/php_errors.log(避免泄露敏感信息);open_basedir = /var/www/html:/tmp(限制PHP只能访问指定目录),防止跨目录文件包含;allow_url_fopen和allow_url_include(防止远程文件包含)、设置cgi.fix_pathinfo=0(防止路径遍历攻击)、开启session.cookie_httponly和session.cookie_secure(保护会话cookie)。firewalld或iptables限制访问:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="3306" protocol="tcp" reject';allow/deny指令限制特定IP访问敏感目录(如location ~ ^/admin { allow 192.168.1.100; deny all; });auth_basic认证(如auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd;),增加访问门槛。certbot工具),配置Nginx强制HTTPS(return 301 https://$host$request_uri;),并启用HSTS(add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";),确保数据传输加密。750(所有者:webuser,组:webuser,其他用户无写权限);640(所有者可读写,组可读,其他用户无权限);/etc/nginx/nginx.conf、/etc/php.ini)权限设置为600(仅所有者可读写)。/var/www/html)和数据库(使用mysqldump),备份文件存储在异地(如云存储);access.log、error.log)、MySQL(error.log)、PHP(php_errors.log)日志,使用logwatch或ELK Stack(Elasticsearch+Logstash+Kibana)进行分析,及时发现异常请求(如大量404、SQL注入尝试);/etc/logrotate.d/nginx),避免日志文件过大占用磁盘空间。lynis等工具进行安全基线核查;fail2ban监控Nginx、SSH日志,自动封禁多次访问失败的IP(如[nginx-http-auth] jail用于防范暴力破解);limit_req_zone),防止CC攻击;