在阿里云购买ECS搭建MySQL和Redis服务需要注意哪些安全设置?

在阿里云购买ECS(弹性计算服务)搭建 MySQL 和 Redis 服务时,安全设置至关重要。以下是关键的安全建议和配置步骤,帮助你防范常见风险:


一、基础网络与访问控制

  1. 使用专有网络 VPC

    • 将 ECS 实例部署在 VPC(虚拟私有云) 中,避免使用经典网络。
    • 隔离资源,提升网络安全性。
  2. 配置安全组(Security Group)

    • 最小权限原则:仅开放必要的端口。
      • MySQL 默认端口:3306
      • Redis 默认端口:6379
    • 禁止公网直接访问数据库端口
      • 不要将 3306 或 6379 对公网开放(即不要允许 0.0.0.0/0 访问)。
      • 如果必须从公网连接,限制为特定 IP 地址或 IP 段。
    • 推荐做法:
      • 只允许跳板机(堡垒机)、应用服务器等内部 ECS 的内网 IP 访问。
      • 使用内网通信(如应用服务器与数据库同属一个 VPC)。
  3. 使用私有 IP 内网连接

    • 应用程序通过 ECS 内网 IP 连接 MySQL/Redis,避免走公网。

二、MySQL 安全设置

  1. 修改默认端口(可选)

    • 修改默认的 3306 端口可减少自动化扫描攻击,但不能替代其他安全措施。
  2. 禁用 root 远程登录

    -- 登录 MySQL 后执行
    UPDATE mysql.user SET Host='localhost' WHERE User='root';
    FLUSH PRIVILEGES;
    • 只允许本地登录 root,远程管理使用普通用户。
  3. 创建专用数据库用户

    CREATE USER 'appuser'@'172.16.%.%' IDENTIFIED BY 'StrongPassword!';
    GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'172.16.%.%';
    FLUSH PRIVILEGES;
    • 权限最小化,避免使用 GRANT ALL
  4. 启用 SSL 加密连接(推荐)

    • 配置 MySQL 支持 SSL,确保数据传输加密。
  5. 定期更新 MySQL 版本

    • 使用官方稳定版本,及时修复已知漏洞。
  6. 关闭不必要的功能

    • LOAD DATA LOCAL INFILE,防止文件泄露。
    • my.cnf 中添加:
      [mysqld]
      local-infile=0
      skip-show-database

三、Redis 安全设置

Redis 默认设计不考虑安全,极易被攻击,务必严格加固!

  1. 设置强密码(requirepass)

    • 编辑 redis.conf
      requirepass YourStrongPassword123!
    • 客户端连接时需使用 AUTH 命令。
  2. 禁止监听公网(bind 配置)

    • 修改 redis.conf
      bind 127.0.0.1
    • 只允许本地访问。如果需要远程访问,绑定内网 IP(如 172.16.x.x),绝不绑定 0.0.0.0
  3. 禁用危险命令

    • redis.conf 中重命名或禁用高危命令:
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command CONFIG "RANDOM_NAME_123"
      rename-command EVAL "RANDOM_NAME_456"
    • 防止误操作或被利用执行恶意脚本。
  4. 使用非默认端口(可选)

    • 修改 port 6380,降低被扫描发现的概率。
  5. 开启保护模式(protected-mode)

    • 确保 protected-mode yes(Redis 3.2+ 默认开启),当无密码且未绑定 IP 时拒绝外部访问。
  6. 升级到最新稳定版

    • 旧版本存在严重漏洞(如未授权访问、RCE)。

四、系统层面安全

  1. 定期更新操作系统

    # CentOS/RHEL
    sudo yum update -y
    
    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
  2. 安装并配置防火墙(如 iptables/firewalld)

    • 即使有安全组,也建议在系统层再加一层防护。
      # 示例:只允许内网访问 3306
      sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.0.0/16" port protocol="tcp" port="3306" accept"
      sudo firewall-cmd --reload
  3. 禁用不必要的服务和端口

    • 使用 netstat -tuln 检查开放端口,关闭不需要的服务。
  4. 使用 SSH 密钥登录,禁用密码登录

    • 修改 /etc/ssh/sshd_config
      PasswordAuthentication no
      PermitRootLogin no
    • 使用密钥对登录,更安全。
  5. 安装安全监控工具

    • 云安全中心(安骑士),检测入侵、漏洞、异常登录等。

五、备份与监控

  1. 定期备份数据

    • MySQL:使用 mysqldump 或 XtraBackup。
    • Redis:启用 RDB/AOF,并定期备份 dump.rdb 文件。
    • 备份文件加密存储,建议上传到 OSS 并设置生命周期管理。
  2. 开启日志审计

    • MySQL:开启 general log / slow query log(生产环境慎用 general log)。
    • Redis:记录客户端命令日志(谨慎开启,影响性能)。
  3. 监控异常行为

    • 设置云监控报警,如 CPU、内存、网络突增。
    • 关注数据库连接数、慢查询等指标。

六、其他建议

  • 使用阿里云 RDS 和云数据库 Redis 版(推荐)

    • 更安全、自动备份、高可用、自动打补丁。
    • 自托管 ECS 上运行数据库维护成本高,安全风险大。
  • 启用 RAM 子账号 + 最小权限策略

    • 避免使用主账号操作,分配精细权限给运维人员。
  • 定期进行安全扫描

    • 使用阿里云“漏洞扫描”或第三方工具检查系统和数据库漏洞。

总结:核心安全原则

项目 安全措施
网络 使用 VPC + 安全组限制内网访问
访问控制 禁止数据库端口暴露公网
账号 强密码 + 最小权限用户
配置 关闭远程 root、绑定内网 IP、禁用危险命令
更新 系统 + 数据库保持最新
监控 日志 + 报警 + 安全中心

强烈建议:对于生产环境,优先使用阿里云 RDS for MySQL云数据库 Redis 版,它们已内置多项安全机制,比自建更安全、更省心。

如需自建,请务必遵循以上每一条安全实践。