Ubuntu LAMP 环境的安全配置,可以说是每一位运维人员必须掌握的核心技能。无论是托管博客、企业网站还是 API 服务,Apache + MySQL + PHP 这一经典组合一旦被攻破,后果远不止数据泄露那么简单。以下措施是该领域经过多年实战验证的“基本操作”,将它们逐一落实,就能有效阻挡绝大多数安全威胁。
1. 系统与软件包更新:筑牢基础
很多人认为“只要没出问题就不用管”,但安全本质上是一个动态博弈过程。保持系统及所有软件包始终处于最新版本,是最简单也最高效的防线。新漏洞公布后,维护者通常会迅速发布补丁,而你只需运行以下两条命令:
sudo apt update
sudo apt upgrade
建议定期执行,尤其关注那些标记为“安全更新”的软件包,切勿拖延。
2. 防火墙配置:封堵入口
在 Ubuntu 上使用 UFW 管理防火墙十分便捷。默认拒绝所有入站请求,仅放开必要的端口即可。例如:
sudo apt install ufw
sudo ufw enable
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
端口 22 最好仅对你自己的管理 IP 开放;初始阶段可先按上述配置,后续再添加 IP 白名单也不迟。
3. Apache 与 PHP 的瘦身与信息隐藏
默认安装的 Apache 和 PHP 会泄露大量信息,如版本号、模块列表等,攻击者可借此找到针对性漏洞。我们需要做两件事:禁用不必要的模块,并隐藏 PHP 的存在痕迹。
对于 Apache,首先启用 security 模块(尽管名为 security2,但功能非常实用):
sudo a2enmod security2
然后编辑 /etc/apache2/conf-enabled/security.conf,将相关设置调整为严格模式。
对于 PHP,最直接的方法是在 php.ini 中关闭 expose_php,同时禁用高风险函数:
expose_php = Off
disable_functions = eval, exec, system, passthru, shell_exec, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source
完成此步骤后,即使有人扫描到你的服务器,也只能看到 Apache 的“标准欢迎页”,无法得知底层 PHP 的版本信息。
4. MySQL 的安全初始化与远程访问限制
MySQL 安装完成后,首要任务是运行安全配置脚本。该脚本会引导你设置 root 密码、删除匿名用户、禁止 root 远程登录、删除测试数据库等,全程交互简单易行:
sudo mysql_secure_installation
如果你需要远程连接数据库(例如使用本地的 Navicat 或 DBeaver),还需要修改 MySQL 的绑定地址。编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,找到 bind-address 行,将其注释掉或改为 0.0.0.0。但务必配合防火墙,仅允许受信任的远程 IP 访问,切勿将 MySQL 直接暴露在公网。
5. SSH 安全:管好密钥
服务器一旦暴露在公网,SSH 就会成为攻击者的重点目标。最简单有效的做法:禁止 root 直接登录,同时关闭密码认证,改用密钥对。编辑 /etc/ssh/sshd_config,修改以下两行:
PermitRootLogin no
PasswordAuthentication no
修改完成后记得重启 SSH 服务。当然,前提是你已经将自己的公钥配置好,否则会被拒之门外——这条经验来自不少资深运维的惨痛教训。
6. 日志监控:让异常无处遁形
光有防御还不够,你需要知道是否有人在“敲门”。logwatch 是一款非常好用的日志分析工具,它能生成每日报告,汇总异常登录、服务报错等信息。
sudo apt install logwatch
sudo systemctl enable logwatch
sudo systemctl start logwatch
配置完成后,每天会给你发送一封邮件,里面包含关键日志的摘要。如果你不想配置邮箱,也可以在 logwatch 的配置中将输出方式改为 stdout,或者直接查看 /var/cache/logwatch/ 下的报告文件。
7. 其他不可忽视的补充措施
前面几条是必选项,下面这些可以根据你的风险等级选择实施,但强烈建议至少做到第一、三、四条:
- 最小权限原则:日常操作不要使用 root 账户,创建一个普通用户,需要提权时使用 sudo。PHP-FPM 和 Apache 的工作进程也应使用最低权限的专用用户运行。
- 安装 Fail2Ban:它可以监控登录失败次数,对攻击 IP 实施临时封禁。配置简单且效果显著,配合 SSH、Apache、Postfix 等服务的日志,能够拦截绝大多数暴力破解攻击。
- 安装 ClamAV:虽然 Linux 下病毒较少,但如果你需要处理用户上传的文件或搭建文件分享站点,ClamAV 可以帮助扫描已知恶意软件,是一道不错的补充防线。
- 定期备份:这是最后一道保险。即使被黑、被勒索,或者手滑删除了数据库,只要有近期备份,就能将损失控制在可控范围内。建议采用全量备份 + 增量备份的组合方式,并将备份数据存放在另一台机器或云存储上。
上述操作几乎每一条都凝聚了无数运维人员的血泪教训。只要老老实实逐一落实,Ubuntu LAMP 环境的整体安全性就能迈上一个大的台阶。当然,安全是动态的,随着 Ubuntu 版本和软件版本的更新,某些配置路径可能发生变化,建议定期关注官方安全公告,及时修补最新漏洞。
