温馨提示×

Linux中lnmp安全设置指南

小樊
46
2025-09-20 15:31:21
栏目: 智能运维

Linux中LNMP安全设置指南
LNMP(Linux+Nginx+MySQL+PHP)是常见的Web服务架构,需从系统基础、组件配置、权限管理、监控审计等多维度强化安全。以下是具体安全设置步骤:

1. Linux系统基础安全加固

  • 系统更新与补丁管理:定期更新系统及软件包,修复已知漏洞。Debian/Ubuntu系统执行sudo apt update && sudo apt upgrade -y;CentOS/RHEL系统执行sudo yum update -y
  • 用户与权限管理:创建专用web服务用户(如webuser),避免Nginx/PHP-FPM以root运行;禁用root SSH登录,修改/etc/ssh/sshd_config中的PermitRootLogin no并重启SSH服务(sudo systemctl restart sshd)。
  • 防火墙配置:启用UFW或iptables,仅开放必要端口(SSH:22、HTTP:80、HTTPS:443、MySQL:3306(可选内部访问))。例如UFW命令:sudo ufw allow 22; sudo ufw allow 80; sudo ufw allow 443; sudo ufw enable

2. Nginx Web服务器安全配置

  • 隐藏敏感信息:关闭Nginx版本号显示(server_tokens off;),移除ServerX-Powered-By等HTTP头(more_clear_headers 'Server'; more_clear_headers 'X-Powered-By';)。
  • 限制HTTP方法与访问:仅允许GET、HEAD、POST等必要方法(if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; });使用limit_req_zone限制请求频率(如每秒10个请求),抵御暴力破解。
  • 增强传输安全:配置SSL/TLS(优先使用TLSv1.2/1.3),优化加密套件(如ECDHE-ECDSA-AES256-GCM-SHA384),启用OCSP Stapling提升验证效率。
  • 防范常见Web攻击:添加安全响应头(X-Frame-Options "SAMEORIGIN"防点击劫持、X-XSS-Protection "1; mode=block"启XSS保护、Content-Security-Policy "default-src 'self'"控资源加载、X-Content-Type-Options "nosniff"防MIME混淆)。

3. MySQL数据库安全设置

  • 初始安全配置:运行sudo mysql_secure_installation,设置root强密码,移除匿名用户、测试数据库及远程root登录。
  • 访问控制与权限管理:创建专用数据库用户(如webuser),限制其仅能从localhost访问,并授予最小必要权限(如SELECT, INSERT, UPDATE);修改/etc/mysql/my.cnf,设置bind-address = 127.0.0.1禁止远程访问。
  • 配置文件与功能优化:禁用skip-name-resolve(避免DNS反向解析延迟)、local-infile=0(防止文件读取漏洞)、secure-file-priv=/var/lib/mysql-files(限制文件导入导出路径)。

4. PHP运行环境安全加固

  • php.ini核心配置:禁用高危函数(如exec, passthru, shell_exec),关闭错误显示(display_errors = Off),记录错误到日志(log_errors = On; error_log = /var/log/php_errors.log);禁止URL包含/打开(allow_url_fopen = Off; allow_url_include = Off),启用cgi.fix_pathinfo=0防止路径遍历。
  • PHP-FPM进程配置:以专用用户(如webuser)运行,设置listen.ownerlisten.groupwebuser;调整进程池参数(pm.max_children = 50,根据服务器内存调整),避免资源耗尽。
  • open_basedir限制:在PHP-FPM配置或虚拟主机中设置open_basedir,限制PHP仅能访问网站目录(如/var/www/html:/tmp/),防止目录穿越攻击。

5. 文件与目录权限管理

  • 网站目录权限:将网站目录所有者设为web用户(如sudo chown -R webuser:webuser /var/www/html),目录权限设为750(find /var/www/html -type d -exec chmod 750 {} \;),文件权限设为640(find /var/www/html -type f -exec chmod 640 {} \;),避免PHP直接操作静态文件。
  • 配置文件保护:限制敏感配置文件(如/etc/mysql/my.cnf/etc/php/7.4/fpm/php.ini、Nginx虚拟主机配置)的访问权限为600(chmod 600 /path/to/config)。

6. 日志监控与入侵防御

  • 日志轮转配置:设置Nginx日志轮转(/etc/logrotate.d/nginx),每日归档、保留14天、压缩旧日志,避免日志文件过大。
  • 入侵防御工具:安装Fail2ban(sudo apt install fail2ban),配置针对SSH、Nginx的防护规则(如禁止多次失败登录的IP),实时阻断恶意访问。
  • 定期安全审计:使用rkhunter、chkrootkit检测rootkit(sudo rkhunter --check);定期检查Nginx、MySQL、PHP日志,分析异常请求(如大量404、POST请求)。

7. 数据备份与恢复策略

  • 定期备份:备份数据库(mysqldump -u root -p --all-databases | gzip > /backup/mysql_$(date +%Y%m%d).sql.gz)、网站文件(tar -czvf /backup/website_$(date +%Y%m%d).tar.gz /var/www/html)、配置文件(tar -czvf /backup/config_$(date +%Y%m%d).tar.gz /etc/nginx /etc/mysql /etc/php)。
  • 备份存储与测试:将备份文件存储到异地(如云存储)或离线介质(如移动硬盘),定期测试备份恢复流程,确保数据可还原。

8. 持续维护与安全更新

  • 自动安全更新:安装unattended-upgrades(sudo apt install unattended-upgrades),配置自动安装安全更新(sudo dpkg-reconfigure --priority=low unattended-upgrades),减少手动维护成本。
  • 漏洞扫描与补丁管理:定期使用OpenVAS、Nessus等工具扫描服务器漏洞,及时修复Nginx、MySQL、PHP等组件的安全补丁。

0