温馨提示×

centos lnmp安全防护怎么做

小樊
48
2025-09-22 09:18:45
栏目: 智能运维

CentOS LNMP环境安全防护全指南
LNMP(Linux+ Nginx+ MySQL+ PHP)作为主流Web架构,其安全性需从系统基础、组件配置、访问控制、数据保护、监控审计五大维度综合加固。以下是具体实施步骤:

一、系统基础安全加固

  1. 系统更新与补丁管理
    定期执行sudo yum update -y更新CentOS系统及所有软件包,及时修复内核、Nginx、MySQL、PHP等组件的已知漏洞,避免被恶意利用。
  2. 用户与权限管理
    • 创建专用Web服务用户(如webuser),设置/sbin/nologin作为shell,禁止登录;
    • 禁用root用户SSH远程登录(修改/etc/ssh/sshd_config中的PermitRootLogin no并重启SSH服务);
    • 为Nginx、MySQL、PHP-FPM服务分配最小权限用户(如Nginx用nginx、PHP-FPM用webuser),避免权限滥用。
  3. SSH安全配置
    • 禁用密码登录,启用公钥认证(修改/etc/ssh/sshd_config中的PasswordAuthentication no);
    • 更改SSH默认端口(如改为2222),减少暴力破解尝试;
    • 使用fail2ban监控SSH日志,自动封禁多次登录失败的IP。

二、组件安全配置

1. Nginx安全设置

  • 隐藏版本信息:在Nginx配置中添加server_tokens off;,避免泄露版本号给攻击者;
  • 限制HTTP方法:仅允许GET、HEAD、POST等必要方法(通过if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; });
  • 禁用不必要的HTTP头:移除ServerX-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;

2. MySQL/MariaDB安全设置

  • 运行安全安装脚本:执行sudo mysql_secure_installation,设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库;
  • 权限最小化:为Web应用创建专用数据库用户(如webuser),仅授予SELECTINSERTUPDATEDELETE等必要权限(避免使用root);
  • 配置文件保护:修改/etc/my.cnf,设置skip-name-resolve(禁止DNS反向解析)、local-infile=0(禁用本地文件加载)、secure-file-priv=/var/lib/mysql-files(限制文件导入导出路径)。

3. PHP安全配置

  • 禁用危险函数:在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_fopenallow_url_include(防止远程文件包含)、设置cgi.fix_pathinfo=0(防止路径遍历攻击)、开启session.cookie_httponlysession.cookie_secure(保护会话cookie)。

三、访问控制与网络隔离

  1. 防火墙配置
    使用firewalldiptables限制访问:
    • 仅开放必要端口(HTTP:80、HTTPS:443、SSH:22);
    • 禁止外部直接访问MySQL(3306端口),如firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="3306" protocol="tcp" reject'
    • 限制SSH访问IP(如仅允许公司IP访问)。
  2. Nginx访问限制
    • 使用allow/deny指令限制特定IP访问敏感目录(如location ~ ^/admin { allow 192.168.1.100; deny all; });
    • 启用auth_basic认证(如auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd;),增加访问门槛。

四、数据安全保护

  1. SSL/TLS加密
    使用Let’s Encrypt获取免费SSL证书(通过certbot工具),配置Nginx强制HTTPS(return 301 https://$host$request_uri;),并启用HSTS(add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";),确保数据传输加密。
  2. 文件与目录权限
    • 网站目录权限设置为750(所有者:webuser,组:webuser,其他用户无写权限);
    • 文件权限设置为640(所有者可读写,组可读,其他用户无权限);
    • 配置文件(如/etc/nginx/nginx.conf/etc/php.ini)权限设置为600(仅所有者可读写)。
  3. 数据备份策略
    • 定期备份网站数据(如/var/www/html)和数据库(使用mysqldump),备份文件存储在异地(如云存储);
    • 测试备份恢复流程,确保灾难发生时可快速恢复。

五、监控与持续维护

  1. 日志监控与分析
    • 收集Nginx(access.logerror.log)、MySQL(error.log)、PHP(php_errors.log)日志,使用logwatchELK Stack(Elasticsearch+Logstash+Kibana)进行分析,及时发现异常请求(如大量404、SQL注入尝试);
    • 设置日志轮转(通过/etc/logrotate.d/nginx),避免日志文件过大占用磁盘空间。
  2. 安全审计与更新
    • 定期进行安全审计(如检查系统日志、组件漏洞),使用lynis等工具进行安全基线核查;
    • 关注组件官方安全公告(如Nginx、MySQL、PHP),及时升级到最新稳定版本。
  3. 防DDoS与暴力破解
    • 使用fail2ban监控Nginx、SSH日志,自动封禁多次访问失败的IP(如[nginx-http-auth] jail用于防范暴力破解);
    • 配置Nginx请求速率限制(如limit_req_zone),防止CC攻击;
    • 考虑使用专业DDoS防护服务(如Cloudflare),应对大规模攻击。

0