在 CentOS 或 Ubuntu 服务器上安全地共存安装 MySQL、Redis 和 RabbitMQ 是完全可行的,但需遵循最佳实践以确保安全性、稳定性、资源隔离和可维护性。以下是经过生产环境验证的完整指南(兼顾 CentOS 8/9 和 Ubuntu 20.04/22.04+):
✅ 一、核心原则(安全共存前提)
| 原则 | 说明 |
|---|---|
| 端口隔离 | 默认端口互不冲突(MySQL:3306, Redis:6379, RabbitMQ:5672/15672),但需显式配置避免冲突 |
| 用户隔离 | 每个服务使用独立系统用户(mysql, redis, rabbitmq),禁止 root 运行 |
| 文件权限最小化 | 数据目录仅属主可读写,配置文件 644 或 600,日志目录受限 |
| 网络加固 | 默认绑定 127.0.0.1,网络访问需明确启用 + 防火墙 + TLS/认证 |
| 资源管控 | 通过 systemd 资源限制(内存/CPU)防服务失控 |
| 更新与监控 | 启用自动安全更新(可选),集成基础监控(如 netstat, systemctl status) |
✅ 二、分步安全安装与配置(推荐方式:官方包管理器)
▶️ Ubuntu(20.04+/22.04+)
# 1. 更新系统 & 安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 lsb-release software-properties-common
# 2. 安装 MySQL(官方 APT 仓库,非 mariadb)
curl -fsSL https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb | sudo dpkg -i -
# → 交互选择 MySQL Server 8.0(回车确认),然后:
sudo apt update
sudo apt install -y mysql-server
sudo mysql_secure_installation # ⚠️ 强制执行!设 root 密码、禁用匿名用户、移除 test DB 等
# 3. 安装 Redis(官方仓库)
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update
sudo apt install -y redis-server
# 4. 安装 RabbitMQ(官方 Erlang + RabbitMQ 仓库)
sudo apt install -y erlang-nox socat logrotate
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
echo "deb https://dl.bintray.com/rabbitmq/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt update
sudo apt install -y rabbitmq-server
# 启动并启用所有服务
sudo systemctl enable mysql redis-server rabbitmq-server
sudo systemctl start mysql redis-server rabbitmq-server
▶️ CentOS/RHEL 8/9(使用 dnf + 官方 repo)
# 1. 更新 & 工具
sudo dnf update -y
sudo dnf install -y epel-release curl
# 2. MySQL(Oracle 官方 RPM)
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{rhel}')-1.noarch.rpm
sudo dnf config-manager --disable mysql57-community
sudo dnf config-manager --enable mysql80-community
sudo dnf install -y mysql-community-server
sudo mysqld --initialize --skip-ssl # 生成临时密码(查看 /var/log/mysqld.log)
sudo systemctl enable mysqld && sudo systemctl start mysqld
sudo mysql_secure_installation # ⚠️ 同上,必须运行!
# 3. Redis(Remi 仓库,稳定新版)
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E '%{rhel}').rpm
sudo dnf module enable php:remi-8.1 # 可选,不影响 Redis
sudo dnf install -y redis --enablerepo=remi
sudo systemctl enable redis && sudo systemctl start redis
# 4. RabbitMQ(官方 Erlang + RabbitMQ RPM)
sudo dnf install -y erlang socat
curl -sL https://packagecloud.io/rabbitmq/erlang/gpgkey | sudo rpm --import -
curl -sL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo rpm --import -
# 添加 repo(根据 RHEL 版本选):
sudo dnf config-manager --add-repo https://packagecloud.io/rabbitmq/rabbitmq-server/el/$(rpm -E '%{rhel}')/repo
sudo dnf install -y rabbitmq-server
sudo systemctl enable rabbitmq-server && sudo systemctl start rabbitmq-server
✅ 关键点:全部使用官方维护的包(非
apt install redis的旧版),确保安全更新及时。
✅ 三、强制安全加固配置(每项必做!)
🔐 1. MySQL 安全配置(/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf)
[mysqld]
# 绑定本地,禁止网络监听(除非明确需要)
bind-address = 127.0.0.1
# 或更严格(仅 socket)
# skip-networking = ON
# 强制密码策略(8.0+ 默认启用)
validate_password.policy = STRONG
# 禁用符号链接(防任意文件读取)
secure_file_priv = /var/lib/mysql-files/
# 禁用 LOCAL INFILE(防恶意加载)
local_infile = OFF
# 日志审计(可选但推荐)
log_error = /var/log/mysql/error.log
general_log = OFF
slow_query_log = ON
sudo systemctl restart mysql
🔐 2. Redis 安全配置(/etc/redis/redis.conf)
# 必须设置密码(否则任何连接可执行 flushall!)
requirepass your_strong_redis_password_here_!2024
# 仅监听本地
bind 127.0.0.1 ::1
protected-mode yes # 默认开启,依赖 bind + requirepass
# 禁用危险命令(可选,高安全场景)
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
# 设置 maxmemory 防内存耗尽
maxmemory 512mb
maxmemory-policy allkeys-lru
sudo systemctl restart redis
# 测试连接:redis-cli -h 127.0.0.1 -p 6379 -a 'your_password' ping
🔐 3. RabbitMQ 安全配置(启用管理插件 + TLS + 访问控制)
# 启用管理界面(默认禁用)
sudo rabbitmq-plugins enable rabbitmq_management
# 创建专用管理员用户(禁用 guest 用户!)
sudo rabbitmqctl add_user myadmin 'StrongPass!2024'
sudo rabbitmqctl set_user_tags myadmin administrator
sudo rabbitmqctl set_permissions -p / myadmin ".*" ".*" ".*"
# 禁用默认 guest 用户(关键!)
sudo rabbitmqctl delete_user guest
# (可选)配置防火墙仅放行必要端口
sudo ufw allow 22,5672,15672/tcp # SSH, AMQP, Management UI
sudo ufw enable
✅ 访问管理界面:
https://your-server-ip:15672(首次登录用myadmin)
✅ 四、系统级安全加固(共用)
| 措施 | 命令/配置 |
|---|---|
| 防火墙限制 | sudo ufw enable (Ubuntu) / sudo firewall-cmd --permanent --add-port={3306,6379,5672,15672}/tcp && firewall-cmd --reload (CentOS) |
| 服务用户隔离 | 所有服务均以非 root 用户运行(ps aux | grep -E "(mysql|redis|rabbitmq)" 验证) |
| 资源限制(systemd) | 编辑 /etc/systemd/system/mysqld.service.d/limits.conf:[Service]MemoryLimit=1GCPUQuota=75%Restart=on-failure |
| 日志集中管理 | sudo journalctl -u mysql --since "1 hour ago";建议接入 rsyslog 或 loki |
| 自动安全更新 | Ubuntu: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades;CentOS: sudo dnf install -y dnf-automatic && sudo systemctl enable --now dnf-automatic.timer |
✅ 五、验证共存与健康检查
# 1. 检查端口占用(确认无冲突)
sudo ss -tlnp | grep -E ':3306|:6379|:5672|:15672'
# 2. 检查服务状态
sudo systemctl status mysql redis rabbitmq-server
# 3. 连接测试(替换密码)
mysql -u root -p -e "SELECT VERSION();"
redis-cli -a 'your_redis_pass' ping # 应返回 PONG
curl -u myadmin:'StrongPass!2024' http://localhost:15672/api/vhosts # 返回 JSON 即成功
# 4. 检查监听地址(必须是 127.0.0.1 或 localhost)
sudo netstat -tuln | grep -E "(3306|6379|5672)"
⚠️ 六、重要警告与避坑指南
- ❌ 不要用
docker run在同一主机混跑(除非你精通 cgroup 隔离)——容器网络/存储复杂度陡增,违背“轻量共存”初衷。 - ❌ 不要关闭 SELinux(CentOS)或 AppArmor(Ubuntu) —— 改用策略微调(如
sudo setsebool -P mysqld_connect_any on)。 - ❌ 不要在生产环境用默认密码或空密码 ——
mysql_secure_installation和requirepass是底线。 - ✅ 备份策略:为每个服务单独配置定时备份(
mysqldump,redis-cli bgsave,rabbitmqctl export_config)。 - ✅ 监控告警:至少添加
systemd健康检查 + 端口存活检测(可用cron+curl -I或 Prometheus Node Exporter)。
✅ 七、进阶建议(生产环境)
| 场景 | 方案 |
|---|---|
| 更高安全性 | 为 RabbitMQ/MySQL 启用 TLS;Redis 启用 tls-port 6380 + 自签名证书 |
| 高可用 | MySQL 主从复制;RabbitMQ 集群;Redis Sentinel(非 Cluster,避免复杂度) |
| 资源敏感型 | 使用 systemd 的 MemoryMax= 限制各服务内存上限,防 OOM Killer 杀进程 |
| 审计合规 | 启用 MySQL general_log(仅调试期)、Redis auditlog(6.2+)、RabbitMQ audit_log 插件 |
✅ 总结一句话:
用官方仓库安装 → 绑定 127.0.0.1 → 强制设置密码 → 禁用默认账户 → 限制资源 → 开启防火墙 → 定期更新,即可在单台 CentOS/Ubuntu 上安全、稳定、长期共存运行 MySQL、Redis、RabbitMQ。
如需我为你生成:
- ✅ 一键加固脚本(含所有配置修改)
- ✅ 备份脚本(每日压缩加密上传到 S3/OSS)
- ✅ Prometheus + Grafana 监控模板(MySQL/Redis/RabbitMQ)
- ✅ Docker Compose 隔离方案(如你坚持容器化)
欢迎随时提出,我可以立即为你定制输出。
CLOUD技术博