SSL加密需强制双向认证并禁用弱协议,外网直连须从云网络、本地IDC及主机层多级阻断,结合连接准入限流与持续SSL有效性验证,形成加密、隔离、认证、审计四层闭环防护矩阵。

核心数据库集群要真正防住传输泄露和非法接入,SSL加密不能只开个开关,外网关闭也不能只靠防火墙策略。得把加密、隔离、认证、审计四层动作绑在一起做,形成闭环防护矩阵。
一、SSL加密必须强制双向认证+禁用弱协议
单向SSL(只验服务端)容易被中间人伪造证书,必须启用客户端证书验证。所有主流数据库都支持:
- MySQL:配置 require_secure_transport=ON + ssl_ca、ssl_cert、ssl_key,并在用户创建时指定 REQUIRE X509 或 REQUIRE SUBJECT
- PostgreSQL:设置 ssl = on、ssl_cert_file、ssl_key_file、ssl_ca_file,并在 pg_hba.conf 中使用 hostssl 规则,配合 clientcert=verify-full
- OceanBase / PolarDB:在控制台开启SSL后,下载CA证书和客户端证书包,应用连接字符串中显式指定 &sslMode=verify-full&sslRootCert=ca.pem&sslCert=client-cert.pem&sslKey=client-key.pem
同时全局禁用 TLS 1.0/1.1,只允许 TLS 1.2+(推荐 DHE-RSA-AES256-GCM-SHA384 等前向安全套件),避免降级攻击。
二、外网直连必须从网络层彻底掐断
不能依赖“没开公网IP”或“安全组默认拒绝”,要多层阻断:
- 云环境:数据库子网部署在专属VPC内,不绑定EIP,路由表中删除指向互联网网关(IGW)的默认路由;NAT网关、SLB等组件禁止反向代理该子网
- 本地IDC:数据库服务器物理网卡仅接入独立VLAN,交换机关闭该VLAN的ARP代理、ICMP重定向、源路由选项;上联路由器ACL明确deny any to 数据库子网的非集群IP流量
- 主机侧兜底:每台DB服务器启用iptables/nftables,默认策略INPUT DROP,并只放行集群内固定IP对5432/3306/2379等端口的访问,拒绝0.0.0.0/0匹配
特别注意:数据库监听地址必须显式绑定内网VIP或具体子网IP(如 listen_addresses = '10.10.20.5'),严禁写成 '*' 或 '0.0.0.0'。
三、连接准入与资源熔断同步配置
SSL和网络隔离只是第一道门,还要防合法通道被滥用:
- 限制最大连接数:max_connections 按实际负载设上限(如PostgreSQL设为300),并预留 superuser_reserved_connections(建议10~20)保障紧急维护通道
- 按角色分级限流:MySQL可通过 CREATE USER ... WITH MAX_USER_CONNECTIONS 20 控制单用户连接数;PostgreSQL可配合 pg_limits 扩展或连接池(如PgBouncer)做会话级QoS
- 关闭非必要功能:禁用数据库远程管理接口(如MySQL的performance_schema、information_schema中敏感表查询权限)、停用未使用的扩展(如PostgreSQL的dblink、postgres_fdw)
四、持续验证加密有效性与异常通信
SSL配置上线后不是一劳永逸,需建立主动探测机制:
- 每日定时用openssl s_client测试握手:openssl s_client -connect db.internal:5432 -CAfile ca.pem -cert client-cert.pem -key client-key.pem -tls1_2,检查返回是否含 Verify return code: 0 (ok)
- 在核心交换机镜像集群子网流量,用Suricata规则检测明文数据库协议(如MySQL COM_QUERY 包含SELECT/INSERT明文关键字)、异常TLS指纹(如自签名证书SHA1哈希)、高频TLS重协商请求
- 数据库侧开启SSL审计日志:PostgreSQL设 log_ssl = on;MySQL设 log_error_verbosity = 3,捕获SSL握手失败、证书过期、协议不匹配等事件
发现明文流量或证书异常,自动触发告警并阻断对应源IP的iptables连接跟踪条目。


















