secure-lnmp

Secure-LNMP 项目

Secure-LNMP 是我正在维护的 Linux 运维 / SRE 方向实践项目。项目基于 Ubuntu 24.04 云服务器,从源码编译部署 Nginx、MySQL、PHP,并以 WordPress 作为真实业务载体,逐步建设安全加固、HTTPS、扫描验证、服务托管、监控、日志、备份恢复和故障演练能力。

项目目标

这个项目不是单纯搭建一个博客,而是模拟真实生产环境中的 Web 服务运维流程:

  • 从裸服务器开始部署 LNMP 环境
  • 使用源码编译方式控制组件版本和编译模块
  • 部署真实 PHP + MySQL 业务应用
  • 对 SSH、MySQL、Nginx、PHP、WordPress 进行安全加固
  • 使用 nmap / Nikto 进行安全扫描与整改
  • 将服务纳入 systemd 管理,实现统一启停和开机自启
  • 后续继续建设监控、日志、备份和故障演练能力

技术栈

  • 操作系统:Ubuntu 24.04.4 LTS
  • Web 服务:Nginx 1.24.0(源码编译)
  • 数据库:MySQL 8.0(源码编译)
  • 后端运行环境:PHP 8.2.10 + PHP-FPM(源码编译)
  • 业务应用:WordPress
  • HTTPS:Let’s Encrypt
  • 安全工具:fail2ban、nmap、Nikto
  • 服务管理:systemd
  • 版本管理:Git / GitHub

已完成内容

1. LNMP 源码编译部署

已完成 Nginx、MySQL、PHP 的源码编译安装,并完成 PHP-FPM 与 Nginx 的 FastCGI 对接。

源码编译的主要目的:

  • 控制安装路径和组件版本
  • 明确启用的编译模块
  • 熟悉 configure / cmake / make / make install 构建流程
  • 便于后续进行配置审计和服务托管

2. SSH 与系统安全加固

服务器上线后,通过登录失败记录发现公网 SSH 持续遭受自动化扫描和暴力破解尝试,因此完成了以下加固:

  • 禁止 root 远程登录
  • 限制 SSH 最大认证尝试次数
  • 部署 fail2ban 自动封禁异常 IP
  • 清理云平台安全组,仅保留必要端口

3. MySQL 安全加固

MySQL 初始状态下监听在所有网卡地址,存在公网暴露风险。已完成:

  • 将 MySQL 3306 监听地址限制为 127.0.0.1
  • 关闭 MySQL X Protocol 33060 端口
  • 为 WordPress 创建独立数据库和最小权限用户
  • 避免业务应用使用 MySQL root 账户

4. Nginx 与 HTTPS 加固

Nginx 已完成:

  • 隐藏 Nginx 版本号
  • 添加安全响应头
  • HTTP 自动跳转 HTTPS
  • 配置 Let’s Encrypt 证书
  • 配置证书自动续期后 reload Nginx
  • 限制请求速率
  • 拦截隐藏文件、备份文件和敏感路径

5. WordPress 业务站点部署与加固

项目使用 WordPress 作为真实业务载体,而不是只部署静态页面。这样可以覆盖 PHP-FPM、MySQL、文件权限、后台登录、上传目录、安全扫描和后续备份恢复等真实运维场景。

已完成:

  • WordPress 安装与初始化
  • 修改默认 admin 用户名
  • 配置独立数据库用户
  • 保护 wp-config.php
  • 禁用 xmlrpc.php
  • 禁止上传目录执行 PHP
  • 删除默认文章、页面和评论
  • 设置后台强密码

6. 安全扫描验证

使用 nmap 和 Nikto 对站点进行扫描验证。

nmap 验证结果:

  • 公网仅开放必要端口:22 / 80 / 443
  • MySQL 3306 未暴露公网
  • MySQL 33060 已关闭

Nikto 扫描后完成整改:

  • 隐藏 PHP 版本信息
  • 隐藏 WordPress 指纹响应头
  • 关闭 ETag,减少指纹泄露
  • 保留安全响应头
  • 拦截 WordPress 敏感路径

7. systemd 服务管理

由于 Nginx 和 PHP-FPM 均为源码编译安装,默认不会自动纳入系统服务管理。项目已为其编写 systemd unit,实现:

  • systemctl 统一启停
  • 启动前配置语法检查
  • 服务异常退出后自动重启
  • 开机自启
  • 更接近生产环境的服务管理方式

当前进度

已完成:

  • LNMP 源码编译
  • SSH / fail2ban 加固
  • MySQL 本地监听限制
  • Nginx 安全响应头与 HTTPS
  • WordPress 业务站点部署
  • WordPress 基础安全加固
  • nmap / Nikto 安全扫描验证
  • Nginx / PHP-FPM systemd 管理

后续计划:

  • Prometheus + Grafana 监控体系
  • Loki + Promtail 日志采集
  • WordPress 数据库和文件备份恢复
  • Ansible 自动化部署
  • MySQL 进程异常、磁盘空间压力、Nginx 配置错误等故障演练

项目仓库

GitHub:
https://github.com/laceries/secure-lnmp

上一篇
下一篇