在 CentOS 或 Ubuntu 服务器上安全共存安装 MySQL、Redis 和 RabbitMQ,关键在于合理规划端口、用户权限、网络隔离与资源管理。以下是分步指南(以生产环境安全实践为核心):
✅ 一、基础准备
1. 系统更新与安全加固
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo ufw allow OpenSSH
sudo ufw enable
# CentOS/RHEL (8+)
sudo dnf update -y
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
🔒 建议:禁用 root SSH 登录,使用密钥认证;配置
fail2ban防暴力破解。
✅ 二、安装策略选择(推荐组合)
| 服务 | 推荐安装方式 | 理由 |
|---|---|---|
| MySQL | 官方 YUM/APT 仓库 + systemd | 稳定、易维护、支持自动启停 |
| Redis | 官方 APT/YUM 包 或 Docker | 避免源码编译风险;Docker 更隔离 |
| RabbitMQ | ERLANG 依赖 + 官方 repo | 确保版本兼容性与安全补丁 |
⚠️ 避免混用
yum install mysql(旧版 MariaDB)与apt install mysql-server(可能冲突),统一使用官方源。
✅ 三、详细安装步骤
🟦 1. MySQL 安装(Ubuntu/CentOS 通用逻辑)
Ubuntu:
sudo apt install -y mysql-server
sudo mysql_secure_installation # 设置 root 密码、移除匿名用户等
CentOS 8+:
sudo dnf install -y mysql-community-server
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 初始密码在 /var/log/mysqld.log 中获取
mysql_secure_installation
✅ 安全加固要点:
- 修改默认端口(如
3307):编辑/etc/mysql/my.cnf或/etc/my.cnf.d/server.cnf[mysqld] port = 3307 bind-address = 127.0.0.1 # 仅本地访问(若需远程,再开放防火墙+SSL) skip-name-resolve # 提升性能 & 安全性 - 创建专用应用用户:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass123!'; GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'localhost'; FLUSH PRIVILEGES;
🟨 2. Redis 安装
方案 A:官方包(推荐)
# Ubuntu
sudo add-apt-repository ppa:chris-lea/redis-server
sudo apt update && sudo apt install redis-server
# CentOS (EPEL)
sudo dnf install -y epel-release
sudo dnf install -y redis
方案 B:Docker(更高隔离性)
docker run -d
--name redis
-p 6379:6379
-v redis-data:/data
redis:7-alpine
redis-server --requirepass "YourStrongPassword" --appendonly yes
✅ 安全加固:
- 强制密码认证(
requirepass) - 绑定本地 IP:
bind 127.0.0.1(或在 Docker 中不暴露端口到公网) - 禁用危险命令(
rename-command FLUSHALL ""等) - 启用 AOF 持久化 + RDB 备份
🟥 3. RabbitMQ 安装
Ubuntu/CentOS 官方源安装:
# 添加 Erlang 仓库(RabbitMQ 依赖)
curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq.gpg
echo "deb [signed-by=/usr/share/keyrings/rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt update
# 安装
sudo apt install -y rabbitmq-server
💡 CentOS 类似,改用
dnf+ 对应 repo 链接(见 RabbitMQ 官网)
✅ 安全加固:
- 修改默认管理端口(5672 → 5673, 15672 → 15673):
编辑/etc/rabbitmq/rabbitmq.conf:listeners.tcp.default = 5673 management.listener.port = 15673 - 创建最小权限用户:
sudo rabbitmqctl add_user app_user AppStrongPass123! sudo rabbitmqctl set_permissions -p "/" app_user ".*" ".*" ".*" sudo rabbitmqctl set_user_tags app_user application - 禁用 guest 用户:
sudo rabbitmqctl delete_user guest - 启用 HTTPS 管理界面(可选但推荐):
management.ssl_options.certfile = /etc/ssl/certs/rabbitmq.crt management.ssl_options.keyfile = /etc/ssl/private/rabbitmq.key
✅ 四、网络与防火墙配置(关键!)
原则:默认拒绝所有,仅开放必要端口
| 服务 | 端口 | 用途 | 是否对外暴露 |
|---|---|---|---|
| MySQL | 3307 | 数据库连接 | ❌ 仅内网/本地 |
| Redis | 6379 | 缓存交互 | ❌ 仅本地/Docker 映射 |
| RabbitMQ | 5673 | AMQP 协议通信 | ❌ 仅内网 |
| RabbitMQ | 15673 | Web 管理后台 | ❌ 仅限运维 IP |
| SSH | 22 | 远程管理 | ✅ 限制来源 IP |
UFW 示例(Ubuntu):
sudo ufw default deny incoming
sudo ufw allow from 192.168.1.0/24 to any port 3307 proto tcp # 内网 DB
sudo ufw allow from 192.168.1.0/24 to any port 5673 proto tcp # 内网 MQ
sudo ufw allow from 10.0.0.5 to any port 15673 proto tcp # 仅运维机访问管理页
sudo ufw allow ssh
sudo ufw enable
firewalld 示例(CentOS):
sudo firewall-cmd --permanent --add-port=3307/tcp
sudo firewall-cmd --permanent --add-port=5673/tcp
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="15673" protocol="tcp" accept'
sudo firewall-cmd --reload
✅ 五、资源与监控建议
-
内存限制:
- Redis:设置
maxmemory(如1GB)+maxmemory-policy allkeys-lru - MySQL:调整
innodb_buffer_pool_size≈ 物理内存的 50%~70% - RabbitMQ:控制
vm_memory_high_watermark防止 OOM
- Redis:设置
-
日志审计:
# 查看异常登录 grep "Access denied" /var/log/mysql/error.log grep "authentication failure" /var/log/auth.log tail -f /var/lib/rabbitmq/rabbitmq@*.log -
备份策略:
- MySQL:
mysqldump --single-transaction --all-databases > backup.sql - Redis:
BGSAVE+ 定期 RDB 快照迁移 - RabbitMQ:
rabbitmqadmin export ...或使用镜像队列
- MySQL:
✅ 六、验证共存状态
# 检查进程与端口
systemctl status mysql redis rabbitmq-server
ss -tlnp | grep -E '3307|6379|5673'
# 测试连通性(从应用服务器)
telnet <server-ip> 3307
telnet <server-ip> 5673
redis-cli -h localhost -a YourStrongPassword ping
📌 最佳实践总结
| 维度 | 建议 |
|---|---|
| 部署模式 | 生产环境优先用 Docker Compose 编排(便于隔离、升级、回滚) |
| 认证 | 所有服务启用强密码 + 最小权限原则 |
| 网络 | 禁止公网直连数据库/缓存/MQ;管理界面限 IP |
| 加密 | MySQL/RabbitMQ 启用 TLS;Redis 可配合 tls 模块 |
| 监控 | 集成 Prometheus + Grafana 监控 CPU/内存/QPS/延迟 |
💡 进阶提示:若资源紧张或需高可用,可考虑将三者部署在独立容器/VM 中,通过内部 VPC 通信,进一步提升安全性。
需要我提供一份完整的 docker-compose.yml 示例(含健康检查、网络隔离、密码管理)吗?
轻量云Cloud