速卖通素材
奋斗

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

服务器

在 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
  • 日志审计

    # 查看异常登录
    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 ... 或使用镜像队列

✅ 六、验证共存状态

# 检查进程与端口
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 » 如何在CentOS或Ubuntu服务器上安全地共存安装MySQL、Redis和RabbitMQ?