在阿里云购买ECS(弹性计算服务)搭建 MySQL 和 Redis 服务时,安全设置至关重要。以下是关键的安全建议和配置步骤,帮助你防范常见风险:
一、基础网络与访问控制
-
使用专有网络 VPC
- 将 ECS 实例部署在 VPC(虚拟私有云) 中,避免使用经典网络。
- 隔离资源,提升网络安全性。
-
配置安全组(Security Group)
- 最小权限原则:仅开放必要的端口。
- MySQL 默认端口:3306
- Redis 默认端口:6379
- 禁止公网直接访问数据库端口:
- 不要将 3306 或 6379 对公网开放(即不要允许
0.0.0.0/0访问)。 - 如果必须从公网连接,限制为特定 IP 地址或 IP 段。
- 不要将 3306 或 6379 对公网开放(即不要允许
- 推荐做法:
- 只允许跳板机(堡垒机)、应用服务器等内部 ECS 的内网 IP 访问。
- 使用内网通信(如应用服务器与数据库同属一个 VPC)。
- 最小权限原则:仅开放必要的端口。
-
使用私有 IP 内网连接
- 应用程序通过 ECS 内网 IP 连接 MySQL/Redis,避免走公网。
二、MySQL 安全设置
-
修改默认端口(可选)
- 修改默认的 3306 端口可减少自动化扫描攻击,但不能替代其他安全措施。
-
禁用 root 远程登录
-- 登录 MySQL 后执行 UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;- 只允许本地登录 root,远程管理使用普通用户。
-
创建专用数据库用户
CREATE USER 'appuser'@'172.16.%.%' IDENTIFIED BY 'StrongPassword!'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'172.16.%.%'; FLUSH PRIVILEGES;- 权限最小化,避免使用
GRANT ALL。
- 权限最小化,避免使用
-
启用 SSL 加密连接(推荐)
- 配置 MySQL 支持 SSL,确保数据传输加密。
-
定期更新 MySQL 版本
- 使用官方稳定版本,及时修复已知漏洞。
-
关闭不必要的功能
- 如
LOAD DATA LOCAL INFILE,防止文件泄露。 - 在
my.cnf中添加:[mysqld] local-infile=0 skip-show-database
- 如
三、Redis 安全设置
Redis 默认设计不考虑安全,极易被攻击,务必严格加固!
-
设置强密码(requirepass)
- 编辑
redis.conf:requirepass YourStrongPassword123! - 客户端连接时需使用
AUTH命令。
- 编辑
-
禁止监听公网(bind 配置)
- 修改
redis.conf:bind 127.0.0.1 - 只允许本地访问。如果需要远程访问,绑定内网 IP(如
172.16.x.x),绝不绑定 0.0.0.0。
- 修改
-
禁用危险命令
- 在
redis.conf中重命名或禁用高危命令:rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command CONFIG "RANDOM_NAME_123" rename-command EVAL "RANDOM_NAME_456" - 防止误操作或被利用执行恶意脚本。
- 在
-
使用非默认端口(可选)
- 修改
port 6380,降低被扫描发现的概率。
- 修改
-
开启保护模式(protected-mode)
- 确保
protected-mode yes(Redis 3.2+ 默认开启),当无密码且未绑定 IP 时拒绝外部访问。
- 确保
-
升级到最新稳定版
- 旧版本存在严重漏洞(如未授权访问、RCE)。
四、系统层面安全
-
定期更新操作系统
# CentOS/RHEL sudo yum update -y # Ubuntu/Debian sudo apt update && sudo apt upgrade -y -
安装并配置防火墙(如 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
- 即使有安全组,也建议在系统层再加一层防护。
-
禁用不必要的服务和端口
- 使用
netstat -tuln检查开放端口,关闭不需要的服务。
- 使用
-
使用 SSH 密钥登录,禁用密码登录
- 修改
/etc/ssh/sshd_config:PasswordAuthentication no PermitRootLogin no - 使用密钥对登录,更安全。
- 修改
-
安装安全监控工具
- 如 云安全中心(安骑士),检测入侵、漏洞、异常登录等。
五、备份与监控
-
定期备份数据
- MySQL:使用
mysqldump或 XtraBackup。 - Redis:启用 RDB/AOF,并定期备份 dump.rdb 文件。
- 备份文件加密存储,建议上传到 OSS 并设置生命周期管理。
- MySQL:使用
-
开启日志审计
- MySQL:开启 general log / slow query log(生产环境慎用 general log)。
- Redis:记录客户端命令日志(谨慎开启,影响性能)。
-
监控异常行为
- 设置云监控报警,如 CPU、内存、网络突增。
- 关注数据库连接数、慢查询等指标。
六、其他建议
-
使用阿里云 RDS 和云数据库 Redis 版(推荐)
- 更安全、自动备份、高可用、自动打补丁。
- 自托管 ECS 上运行数据库维护成本高,安全风险大。
-
启用 RAM 子账号 + 最小权限策略
- 避免使用主账号操作,分配精细权限给运维人员。
-
定期进行安全扫描
- 使用阿里云“漏洞扫描”或第三方工具检查系统和数据库漏洞。
总结:核心安全原则
| 项目 | 安全措施 |
|---|---|
| 网络 | 使用 VPC + 安全组限制内网访问 |
| 访问控制 | 禁止数据库端口暴露公网 |
| 账号 | 强密码 + 最小权限用户 |
| 配置 | 关闭远程 root、绑定内网 IP、禁用危险命令 |
| 更新 | 系统 + 数据库保持最新 |
| 监控 | 日志 + 报警 + 安全中心 |
✅ 强烈建议:对于生产环境,优先使用阿里云 RDS for MySQL 和 云数据库 Redis 版,它们已内置多项安全机制,比自建更安全、更省心。
如需自建,请务必遵循以上每一条安全实践。
CLOUD技术笔记