在 CentOS 或 Ubuntu 服务器上安全地共存安装 MySQL、Redis 和 RabbitMQ 是完全可行的,关键在于遵循最小权限原则、端口隔离、资源隔离、安全加固和运维规范。以下是经过生产环境验证的详细指南(兼顾 CentOS 8/9 和 Ubuntu 20.04+/22.04+):
✅ 一、前置安全原则(必须遵守)
| 原则 | 说明 |
|---|---|
| 不使用 root 运行服务 | 每个服务均以专用低权限系统用户运行(mysql、redis、rabbitmq) |
| 禁用默认端口暴露 | 所有服务默认绑定 127.0.0.1,仅当必要时通过反向X_X或防火墙策略开放特定端口 |
| 关闭未用功能 | 禁用 MySQL 的远程 root 登录、Redis 的 CONFIG 命令、RabbitMQ 的 guest 用户等高危配置 |
| 独立数据目录 & 权限 | 各服务数据目录归属对应用户,chmod 700,禁止其他用户访问 |
| 启用防火墙(iptables/nftables/firewalld/ufw) | 默认拒绝所有入站,仅放行必需端口(如 3306→仅内网、6379→仅本地、5672→仅应用服务器IP) |
✅ 二、分步安全安装与配置(推荐方式:官方包管理器 + 配置加固)
▶️ 1. MySQL(推荐 MySQL 8.0+ 或 Percona Server)
# Ubuntu
sudo apt update && sudo apt install mysql-server -y
# CentOS 8/9(使用 dnf + MySQL 官方仓库)
sudo dnf install @mysql -y
# 或添加 MySQL 官方 repo(更稳定):
curl -OL https://dev.mysql.com/get/mysql80-community-release-el$(rpm -E '%{?rhel}%{!?rhel:%{?fedora}}')-1.noarch.rpm
sudo rpm -Uvh mysql80-community-release-*.rpm
sudo dnf install mysql-community-server -y
🔹 安全加固(必做):
# 1. 运行安全脚本(自动禁用匿名用户、移除 test DB、禁用远程 root)
sudo mysql_secure_installation
# 2. 编辑 /etc/my.cnf(Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf)
[mysqld]
bind-address = 127.0.0.1 # ❗仅监听本地
skip-networking = OFF # 保持开启(但 bind-address 已限制)
require_secure_transport = ON # 强制 TLS(生产环境强烈建议)
default_authentication_plugin = caching_sha2_password
# 3. 创建应用专用用户(禁止 root 远程)
mysql -u root -p
> CREATE USER 'app_user'@'127.0.0.1' IDENTIFIED BY 'StrongPass!2024';
> GRANT SELECT,INSERT,UPDATE,DELETE ON myapp.* TO 'app_user'@'127.0.0.1';
> FLUSH PRIVILEGES;
# 4. (可选)启用 TLS(生成证书后配置 ssl-ca/ssl-cert/ssl-key)
▶️ 2. Redis(推荐 7.x,禁用危险命令)
# Ubuntu
sudo apt install redis-server -y
# CentOS 8/9(EPEL + Remi 或直接编译)
sudo dnf install epel-release -y
sudo dnf install redis -y
🔹 安全加固(关键!):
# 编辑 /etc/redis/redis.conf
bind 127.0.0.1 ::1 # ❗仅本地 IPv4/v6
protected-mode yes # 默认开启(防止未授权访问)
port 6379 # 如无需外部访问,可注释 port 或设为 0(禁用 TCP)
unixsocket /var/run/redis/redis.sock
unixsocketperm 700
# 🔒 禁用高危命令(防 Redis 未授权访问导致 RCE)
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
rename-command DEBUG ""
# 设置密码(非强依赖,但建议)
requirepass "YourStrongRedisPass!2024"
# 启动并验证
sudo systemctl enable redis-server
sudo systemctl restart redis-server
redis-cli -a "YourStrongRedisPass!2024" ping # 应返回 PONG
⚠️ 注意:若应用需跨主机访问 Redis,请绝不使用密码裸传,改用:
- TLS 加密(Redis 6.0+ 支持
tls-port,tls-cert-file)- 或通过 SSH 隧道 / X_X 内网通信
▶️ 3. RabbitMQ(推荐 3.12+,含 TLS 和细粒度权限)
# Ubuntu(官方 APT 仓库)
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt update && sudo apt install rabbitmq-server -y
# CentOS 8/9(使用 dnf + Cloudsmith repo)
dnf install -y epel-release
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
sudo dnf install rabbitmq-server -y
🔹 安全加固(核心步骤):
# 1. 启用管理插件(仅内网访问)
sudo rabbitmq-plugins enable rabbitmq_management
# 2. 禁用默认 guest 用户(❗必须!)
sudo rabbitmqctl delete_user guest
# 3. 创建专用用户(最小权限)
sudo rabbitmqctl add_user app_user "StrongRabbitPass!2024"
sudo rabbitmqctl set_user_tags app_user monitoring
sudo rabbitmqctl set_permissions -p / app_user "^(myapp.)" "^(myapp.)" "^(myapp.)"
# 4. 绑定到本地(/etc/rabbitmq/rabbitmq.conf)
loopback_users.1 = app_user
listeners.tcp.default = 127.0.0.1:5672
management.listener.ip = 127.0.0.1
management.listener.port = 15672
# 5. (生产必备)启用 TLS(生成证书后配置)
# ssl_options.cacertfile = /etc/rabbitmq/certs/ca_certificate.pem
# ssl_options.certfile = /etc/rabbitmq/certs/server_certificate.pem
# ssl_options.keyfile = /etc/rabbitmq/certs/server_key.pem
# listeners.ssl.default = 5671
# 6. 启动并验证
sudo systemctl enable rabbitmq-server
sudo systemctl restart rabbitmq-server
# 检查:curl -u app_user:StrongRabbitPass!2024 http://127.0.0.1:15672/api/vhosts
✅ 三、共存安全增强措施
| 措施 | 操作 |
|---|---|
| 🔥 端口防火墙(ufw/firewalld) | # Ubuntu<br>sudo ufw default deny incoming<br>sudo ufw allow from 192.168.1.100 to any port 3306 # 仅允许应用服务器访问 MySQL<br>sudo ufw allow from 127.0.0.1 to any port 6379,5672<br>sudo ufw enable |
| 📦 资源隔离(cgroups v2 / systemd limits) | 在 /etc/systemd/system/mysqld.service.d/limits.conf 中添加:[Service]MemoryMax=2GCPUQuota=75%RestartSec=10 |
| 🔐 日志审计 | 所有服务日志统一收集到 /var/log/journal 或转发至 ELK/Splunk;启用 MySQL general_log(仅调试期)、Redis slowlog、RabbitMQ log_levels |
| 🔄 自动化更新与监控 | 使用 unattended-upgrades(Ubuntu)或 dnf-automatic(CentOS),配合 Prometheus + Grafana 监控各服务健康状态(MySQL uptime、Redis memory_used、RabbitMQ queue length) |
| 🛡️ SELinux(CentOS)或 AppArmor(Ubuntu) | ✅ 启用并配置策略:sudo setsebool -P mysqld_connect_any on(如需 MySQL 访问网络)sudo aa-status 确认 Redis/RabbitMQ profile 处于 enforce 模式 |
✅ 四、验证共存是否安全(执行以下检查)
# 1. 检查监听端口(应只有 127.0.0.1)
ss -tlnp | grep -E ':(3306|6379|5672|15672)'
# 2. 检查进程用户
ps aux | grep -E '(mysql|redis|rabbitmq)' | awk '{print $1,$11}' | sort -u
# 3. 检查数据目录权限
ls -ld /var/lib/{mysql,redis,rabbitmq}
# 4. 模拟外部扫描(从另一台机器)
nmap -sS -p 3306,6379,5672,15672 your-server-ip # 应全部 filtered 或 closed
# 5. 测试本地连接(确保服务互通)
mysql -h 127.0.0.1 -u app_user -p -e "SELECT 1"
redis-cli -h 127.0.0.1 -a "YourStrongRedisPass!2024" ping
curl -u app_user:StrongRabbitPass!2024 http://127.0.0.1:15672/api/whoami
✅ 五、进阶建议(生产环境强烈推荐)
- 容器化部署(Docker/Podman):使用
docker-compose隔离网络+资源,配合--read-only、--cap-drop=ALL提升安全性 - 密码管理:使用 HashiCorp Vault 或 AWS Secrets Manager 存储数据库凭据,应用通过 API 获取
- 定期审计:每月运行
lynis audit system检查系统安全基线 - 备份策略:MySQL
mysqldump+ binlog、RedisBGSAVE+ RDB/AOF、RabbitMQrabbitmqctl export_definitions,加密后异地存储
✅ 总结:只要坚持 “最小权限 + 网络隔离 + 配置加固 + 持续监控” 四大原则,MySQL、Redis、RabbitMQ 完全可以在同一台 CentOS/Ubuntu 服务器上安全、稳定、高效共存。避免使用 Docker Hub 非官方镜像、禁用所有服务的默认账户、始终将 bind-address 设为 127.0.0.1 是最简单有效的防线。
需要我为你生成:
- ✅ 完整的
docker-compose.yml安全模板 - ✅ 自动化加固脚本(Bash)
- ✅ Prometheus 监控配置(exporter + Grafana dashboard)
欢迎随时提出 👇
CLOUD云枢