在轻量应用服务器上如何安全配置MySQL和Redis共存?

在轻量应用服务器(如阿里云、腾讯云等提供的 ECS/CVM 实例)上同时部署 MySQL 和 Redis 时,核心安全原则是:最小权限、网络隔离、访问控制、加密通信。以下是详细的安全配置指南:


一、基础环境准备

  1. 使用非 root 用户运行服务

    • 创建专用系统用户(如 mysql、redis),避免以 root 身份运行数据库。
    • 示例:
      sudo useradd -r -s /bin/false mysql
      sudo useradd -r -s /bin/false redis
  2. 设置文件权限

    • MySQL 数据目录:/var/lib/mysql → 属主 mysql:mysql,权限 700
    • Redis 配置文件和数据目录:属主 redis:redis,权限严格限制

二、MySQL 安全配置

1. 绑定地址与端口

  • 默认只监听本地(bind-address = 127.0.0.1)
  • 如需远程访问,仅允许特定 IP:
    [mysqld]
    bind-address = 127.0.0.1
    # 或指定内网 IP
    bind-address = 192.168.1.100
    port = 3306

2. 禁用远程 root 登录

DROP USER IF EXISTS 'root'@'%';
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3. 启用 SSL/TLS 加密连接

[mysqld]
ssl-ca = /etc/mysql/ssl/ca.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem
require_secure_transport = ON

生成证书可使用 OpenSSL 或 Let’s Encrypt。

4. 安装安全脚本

sudo mysql_secure_installation

按提示完成:移除匿名账户、禁止远程 root、删除测试库、刷新权限。

5. 防火墙规则(iptables/firewalld)

# 仅允许本机访问
sudo iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

三、Redis 安全配置

1. 绑定地址

bind 127.0.0.1
protected-mode yes
port 6379

2. 设置强密码

requirepass YourStrongRedisPassword123!

3. 重命名危险命令

rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""

4. 使用 systemd 管理并限制资源

创建 /etc/systemd/system/redis.service.d/override.conf:

[Service]
LimitNOFILE=65535
MemoryLimit=512M

5. 防火墙规则

sudo iptables -A INPUT -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 6379 -j DROP

四、共存时的额外安全措施

1. 分离监听端口与网络接口

  • MySQL 和 Redis 均绑定到 127.0.0.1,确保不暴露于公网。
  • 若需外部访问(如通过 SSH 隧道或反向X_X),应通过应用层X_X而非直接开放端口。

2. 使用 Linux 用户隔离

  • MySQL 和 Redis 分别以不同系统用户运行,防止进程间越权访问。

3. 定期更新与补丁

sudo apt update && sudo apt upgrade mysql-server redis-server

4. 日志审计与监控

  • 启用 MySQL 通用日志或慢查询日志
  • 启用 Redis 日志记录异常操作
  • 使用 auditd 或云厂商自带监控告警

5. 备份策略

  • MySQL:mysqldump + 定时 cron 任务
  • Redis:RDB/AOF 持久化 + 自动快照
  • 备份文件加密存储,权限设为 600

五、推荐架构(高安全场景)

组件 部署方式 访问方式
Web 应用 同一服务器或独立容器 HTTP/HTTPS
MySQL 本地实例,仅 localhost 访问 应用通过 Unix Socket
Redis 本地实例,仅 localhost 访问 应用通过 localhost TCP
外部访问 通过 Nginx + SSL + 认证网关 不直接暴露 DB 端口

✅ 最佳实践:除非必要,不要将 MySQL 或 Redis 直接暴露在公网。所有外部请求应通过 Web 服务器X_X,并在应用层进行身份验证和速率限制。


六、验证安全配置

  1. 尝试从外部 IP 连接 MySQL/Redis:

    telnet <your-server-ip> 3306  # 应失败
    telnet <your-server-ip> 6379  # 应失败
  2. 检查监听状态:

    ss -tlnp | grep -E '3306|6379'
    # 输出应为:LISTEN 0 80 127.0.0.1:3306 ...
  3. 使用 nmap 扫描端口:

    nmap -p 3306,6379 <your-server-ip>
    # 应显示 filtered 或 closed

通过以上步骤,可在轻量应用服务器上实现 MySQL 与 Redis 的安全共存,显著降低被攻击风险。

未经允许不得转载:云知识CLOUD » 在轻量应用服务器上如何安全配置MySQL和Redis共存?