Skip to content

GaussDB 防火墙配置

防火墙类型

1. 主机防火墙

主机防火墙安装在数据库服务器上,用于保护单个服务器的网络安全。常见的主机防火墙包括:

  • Linux:iptables、firewalld
  • Windows:Windows 防火墙

2. 网络防火墙

网络防火墙部署在网络边界,用于保护整个网络的安全。常见的网络防火墙包括:

  • 硬件防火墙:Cisco ASA、Juniper SRX 等
  • 软件防火墙:pfSense、OPNsense 等

3. 云防火墙

对于部署在云环境中的 GaussDB,还可以使用云提供商提供的防火墙服务:

  • AWS:Security Groups、Network ACLs
  • Azure:Network Security Groups、Azure Firewall
  • 华为云:安全组、网络 ACL

Linux 防火墙配置

1. iptables 配置

iptables 是 Linux 系统中常用的防火墙工具,以下是配置 GaussDB 访问规则的示例:

查看当前规则

bash
# 查看当前 iptables 规则
iptables -L -n

# 查看 nat 表规则
iptables -t nat -L -n

允许 GaussDB 端口访问

GaussDB 默认监听 5432 端口,可以使用以下命令允许指定 IP 地址访问该端口:

bash
# 允许单个 IP 访问 5432 端口
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 5432 -j ACCEPT

# 允许 IP 段访问 5432 端口
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -j ACCEPT

# 允许所有 IP 访问 5432 端口(不推荐,仅用于测试)
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

保存 iptables 规则

bash
# 保存 iptables 规则(CentOS 6)
service iptables save

# 保存 iptables 规则(CentOS 7+)
iptables-save > /etc/sysconfig/iptables

2. firewalld 配置

firewalld 是 CentOS 7+ 系统中的默认防火墙管理工具,以下是配置 GaussDB 访问规则的示例:

查看当前状态

bash
# 查看 firewalld 状态
systemctl status firewalld

# 查看当前区域
firewall-cmd --get-default-zone

# 查看当前区域的规则
firewall-cmd --list-all

允许 GaussDB 端口访问

bash
# 允许 5432 端口访问
firewall-cmd --add-port=5432/tcp --permanent

# 允许指定 IP 访问 5432 端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="5432" accept' --permanent

# 允许 IP 段访问 5432 端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="5432" accept' --permanent

重新加载 firewalld 规则

bash
# 重新加载 firewalld 规则
firewall-cmd --reload

# 查看修改后的规则
firewall-cmd --list-all

Windows 防火墙配置

1. 图形界面配置

  1. 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
  2. 点击「高级设置」
  3. 在左侧面板中选择「入站规则」
  4. 点击右侧面板中的「新建规则」
  5. 选择「端口」,点击「下一步」
  6. 选择「TCP」,并在「特定本地端口」中输入「5432」,点击「下一步」
  7. 选择「允许连接」,点击「下一步」
  8. 选择应用该规则的网络类型(域、专用、公共),点击「下一步」
  9. 为规则命名(如「GaussDB 5432 端口」),点击「完成」

2. 命令行配置

可以使用 netsh 命令配置 Windows 防火墙:

powershell
# 允许 5432 端口访问
netsh advfirewall firewall add rule name="GaussDB 5432" dir=in action=allow protocol=TCP localport=5432

# 允许指定 IP 访问 5432 端口
netsh advfirewall firewall add rule name="GaussDB 5432 from 192.168.1.100" dir=in action=allow protocol=TCP localport=5432 remoteip=192.168.1.100

# 查看防火墙规则
netsh advfirewall firewall show rule name=all

# 删除防火墙规则
netsh advfirewall firewall delete rule name="GaussDB 5432"

云环境防火墙配置

1. 华为云安全组配置

  1. 登录华为云控制台,进入「虚拟私有云」服务
  2. 选择「安全组」,点击「创建安全组」
  3. 为安全组命名并添加描述,点击「确定」
  4. 选择创建的安全组,点击「添加规则」
  5. 配置入站规则:
    • 协议:TCP
    • 端口范围:5432
    • 源地址:可以是 0.0.0.0/0(允许所有 IP)、单个 IP 或 IP 段
    • 描述:GaussDB 访问规则
  6. 点击「确定」保存规则
  7. 将安全组关联到 GaussDB 实例所在的弹性云服务器

2. AWS 安全组配置

  1. 登录 AWS 控制台,进入「EC2」服务
  2. 选择「安全组」,点击「创建安全组」
  3. 为安全组命名并添加描述
  4. 在「入站规则」选项卡中,点击「添加规则」
  5. 配置规则:
    • 类型:自定义 TCP
    • 协议:TCP
    • 端口范围:5432
    • 源:可以是 0.0.0.0/0(允许所有 IP)、单个 IP 或 IP 段
  6. 点击「创建安全组」保存规则
  7. 将安全组关联到 GaussDB 实例所在的 EC2 实例

防火墙规则最佳实践

1. 最小权限原则

  • 只允许必要的 IP 地址和端口访问数据库
  • 避免使用 0.0.0.0/0 允许所有 IP 访问(仅在测试环境中使用)
  • 定期审查和清理不必要的防火墙规则

2. 分层防御

  • 同时配置网络防火墙和主机防火墙,实现分层防御
  • 对于云环境,同时使用安全组和网络 ACL
  • 不同环境(开发、测试、生产)使用不同的防火墙规则

3. 端口管理

  • 避免使用默认端口(5432),可以修改 GaussDB 监听端口为非默认端口
  • 只开放必要的端口,关闭不必要的服务和端口
  • 使用端口转发或 NAT 隐藏真实的数据库端口

4. 日志记录

  • 启用防火墙日志记录,便于审计和故障排查
  • 定期查看防火墙日志,及时发现异常访问
  • 配置日志存储和保留策略,满足合规要求

5. 定期审计

  • 定期审计防火墙规则,确保规则的有效性和安全性
  • 检查是否存在过度授权或权限泄露的情况
  • 记录防火墙规则的变更历史,便于追溯

常见防火墙问题排查

1. 无法连接到数据库

如果客户端无法连接到 GaussDB 数据库,可以按照以下步骤排查:

  1. 检查数据库状态:确保数据库正在运行
  2. 检查监听地址:确保数据库监听地址配置正确
  3. 检查防火墙规则:确保防火墙允许客户端 IP 访问数据库端口
  4. 测试网络连通性:使用 ping 命令测试客户端与服务器的网络连通性
  5. 测试端口可达性:使用 telnetnc 命令测试端口是否可达
bash
# 测试端口可达性
telnet db_server_ip 5432
nc -zv db_server_ip 5432

2. 防火墙规则不生效

如果配置了防火墙规则但不生效,可以按照以下步骤排查:

  1. 检查防火墙状态:确保防火墙正在运行
  2. 检查规则顺序:防火墙规则按照顺序匹配,确保规则顺序正确
  3. 检查规则配置:确保规则的源地址、目标地址、端口和协议配置正确
  4. 重新加载规则:修改防火墙规则后,需要重新加载才能生效
  5. 查看防火墙日志:查看防火墙日志,了解规则匹配情况

3. 性能问题

如果防火墙配置导致数据库性能问题,可以考虑以下优化措施:

  • 简化防火墙规则,减少规则数量
  • 优化规则顺序,将常用规则放在前面
  • 考虑使用硬件防火墙,提高处理性能
  • 对于高流量场景,可以考虑使用负载均衡器分流流量

GaussDB 专用防火墙配置

除了传统的防火墙配置外,GaussDB 还提供了一些专用的安全特性,可以与防火墙配合使用:

1. 连接控制

可以在 GaussDB 中配置连接控制参数,限制客户端连接:

sql
-- 配置最大连接数
ALTER SYSTEM SET max_connections = 100;

-- 配置每个用户的最大连接数
ALTER ROLE role_name WITH CONNECTION LIMIT 10;

-- 配置连接超时时间
ALTER SYSTEM SET tcp_keepalives_idle = 60;
ALTER SYSTEM SET tcp_keepalives_interval = 10;
ALTER SYSTEM SET tcp_keepalives_count = 3;

2. IP 白名单

可以在 GaussDB 中配置 IP 白名单,只允许指定 IP 地址连接:

sql
-- 在 pg_hba.conf 中配置 IP 白名单
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             192.168.1.0/24          md5
host    all             all             10.0.0.0/8              md5

3. SSL/TLS 加密

可以配置 GaussDB 使用 SSL/TLS 加密连接,提高数据传输的安全性:

sql
-- 启用 SSL
ALTER SYSTEM SET ssl = on;

-- 配置 SSL 证书和密钥
ALTER SYSTEM SET ssl_cert_file = '/path/to/server.crt';
ALTER SYSTEM SET ssl_key_file = '/path/to/server.key';
ALTER SYSTEM SET ssl_ca_file = '/path/to/root.crt';

常见问题(FAQ)

Q1: 如何修改 GaussDB 的默认监听端口?

A1: 可以通过修改 port 参数来修改 GaussDB 的默认监听端口:

sql
-- 修改监听端口为 5433
ALTER SYSTEM SET port = 5433;

修改后需要重启数据库才能生效。

Q2: 如何允许多个 IP 地址访问 GaussDB?

A2: 可以通过以下方式允许多个 IP 地址访问 GaussDB:

  1. 防火墙规则:在防火墙中添加多个允许规则,每个规则对应一个 IP 地址或 IP 段
  2. IP 段:使用 CIDR 表示法允许整个 IP 段访问,如 192.168.1.0/24 允许 192.168.1.1-254 的所有 IP 地址
  3. 安全组:在云环境中,可以创建包含多个 IP 地址的安全组

Q3: 如何在防火墙中配置 GaussDB 集群的通信规则?

A3: 对于 GaussDB 集群,需要配置以下防火墙规则:

  1. 允许集群内节点之间的通信(所有端口)
  2. 允许客户端访问集群的连接端口(如 5432)
  3. 允许集群管理工具的访问(如 gs_om 使用的端口)

具体的端口配置可以参考 GaussDB 集群部署文档。

Q4: 如何测试防火墙规则是否生效?

A4: 可以使用以下方法测试防火墙规则是否生效:

  1. telnet 命令telnet db_server_ip 5432,如果能够连接成功,说明防火墙规则生效
  2. nc 命令nc -zv db_server_ip 5432,如果显示 "succeeded",说明防火墙规则生效
  3. nmap 命令nmap -p 5432 db_server_ip,如果显示端口为 "open",说明防火墙规则生效
  4. 数据库连接测试:使用 gsql 或其他客户端工具连接数据库,测试是否能够成功连接

Q5: 如何配置防火墙以支持 GaussDB 的主从复制?

A5: 对于 GaussDB 主从复制,需要配置以下防火墙规则:

  1. 允许主节点访问从节点的 WAL 日志传输端口(默认为 5432)
  2. 允许从节点访问主节点的 WAL 日志源端口(默认为 5432)
  3. 确保防火墙规则不会阻止主从节点之间的心跳检测

具体的端口配置可以参考 GaussDB 主从复制文档。