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