如何在CentOS或Ubuntu服务器上安全地共存安装MySQL、Redis和RabbitMQ?

在 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=1G
CPUQuota=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技术博 » 如何在CentOS或Ubuntu服务器上安全地共存安装MySQL、Redis和RabbitMQ?