Skip to content

OceanBase 网络防火墙配置

网络防火墙的作用

  • 限制访问来源:只允许特定 IP 地址或 IP 段访问数据库
  • 控制访问端口:只开放必要的数据库服务端口
  • 防止恶意攻击:阻止 SQL 注入、DDoS 等恶意攻击
  • 监控网络流量:记录和分析数据库的网络访问日志
  • 实现网络隔离:将数据库网络与其他网络隔离,提高安全性

网络防火墙的类型

  • 硬件防火墙:独立的硬件设备,性能高,安全性好
  • 软件防火墙:安装在操作系统上的防火墙软件,如 iptables、firewalld 等
  • 云防火墙:云服务提供商提供的防火墙服务,如阿里云 ECS 安全组、腾讯云安全组等
  • 数据库级防火墙:数据库内置的访问控制机制,如 IP 白名单、用户权限控制等

操作系统级防火墙配置

Linux 防火墙配置

OceanBase 数据库主要运行在 Linux 操作系统上,Linux 系统提供了多种防火墙工具,包括 iptables 和 firewalld 等。

使用 iptables 配置防火墙

iptables 是 Linux 系统传统的防火墙工具,通过配置规则链来控制网络访问。

开放 OceanBase 必要端口
bash
# 开放 OBServer 通信端口(默认 2881、2882)
iptables -A INPUT -p tcp --dport 2881 -j ACCEPT
iptables -A INPUT -p tcp --dport 2882 -j ACCEPT

# 开放 OBProxy 端口(默认 2883)
iptables -A INPUT -p tcp --dport 2883 -j ACCEPT

# 开放 SSH 端口(默认 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 开放 OCP 端口(默认 8080、443)
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许回环接口访问
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 默认拒绝所有输入连接
iptables -P INPUT DROP

# 保存 iptables 规则
/sbin/service iptables save
限制访问来源 IP
bash
# 只允许特定 IP 访问 OBServer 端口
iptables -A INPUT -p tcp --dport 2881 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 2882 -s 192.168.1.0/24 -j ACCEPT

# 只允许特定 IP 访问 OBProxy 端口
iptables -A INPUT -p tcp --dport 2883 -s 10.0.0.0/8 -j ACCEPT

使用 firewalld 配置防火墙

firewalld 是 CentOS 7 及以上版本默认的防火墙管理工具,提供了更友好的命令行界面和动态规则管理功能。

开放 OceanBase 必要端口
bash
# 启动 firewalld 服务
systemctl start firewalld

# 设置 firewalld 开机自启
systemctl enable firewalld

# 开放 OBServer 通信端口
firewall-cmd --permanent --add-port=2881/tcp
firewall-cmd --permanent --add-port=2882/tcp

# 开放 OBProxy 端口
firewall-cmd --permanent --add-port=2883/tcp

# 开放 SSH 端口
firewall-cmd --permanent --add-port=22/tcp

# 开放 OCP 端口
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=443/tcp

# 重新加载防火墙规则
firewall-cmd --reload
限制访问来源 IP
bash
# 创建富规则,只允许特定 IP 访问 OBServer 端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2881" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2882" accept'

# 创建富规则,只允许特定 IP 访问 OBProxy 端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="2883" accept'

# 重新加载防火墙规则
firewall-cmd --reload

Windows 防火墙配置

如果 OceanBase 数据库运行在 Windows 操作系统上,需要配置 Windows 防火墙规则。

开放 OceanBase 必要端口

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

限制访问来源 IP

  1. 在「Windows Defender 防火墙高级安全」窗口中,找到刚创建的入站规则,右键点击并选择「属性」
  2. 切换到「作用域」选项卡
  3. 在「远程 IP 地址」区域,选择「这些 IP 地址」,然后点击「添加」
  4. 输入允许访问的 IP 地址或 IP 段,点击「确定」
  5. 点击「应用」和「确定」保存设置

数据库级访问控制

IP 白名单配置

OceanBase 数据库提供了 IP 白名单功能,可以限制只允许特定 IP 地址访问数据库。

查看当前 IP 白名单配置

sql
-- 查看当前 IP 白名单配置
SHOW PARAMETERS LIKE 'ob_tcp_invited_nodes';

-- 查看租户级 IP 白名单配置
SHOW TENANT ALL PARAMETERS LIKE 'ob_tcp_invited_nodes';

配置全局 IP 白名单

sql
-- 配置全局 IP 白名单,允许所有 IP 访问(不推荐)
ALTER SYSTEM SET ob_tcp_invited_nodes = '%';

-- 配置全局 IP 白名单,允许特定 IP 访问
ALTER SYSTEM SET ob_tcp_invited_nodes = '127.0.0.1,192.168.1.0/24,10.0.0.100';

配置租户级 IP 白名单

sql
-- 配置租户级 IP 白名单
ALTER TENANT test_tenant SET ob_tcp_invited_nodes = '192.168.1.0/24';

用户权限控制

除了 IP 白名单,OceanBase 数据库还提供了用户权限控制机制,可以限制用户的操作权限和访问范围。

创建用户并限制访问主机

sql
-- 创建用户并限制只能从特定 IP 访问
CREATE USER 'test_user'@'192.168.1.%' IDENTIFIED BY 'password';

-- 创建用户并限制只能从本地访问
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'password';

-- 创建用户并允许从任何 IP 访问(不推荐)
CREATE USER 'test_user'@'%' IDENTIFIED BY 'password';

授权用户访问权限

sql
-- 授权用户访问特定数据库
GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'192.168.1.%';

-- 授权用户只能执行 SELECT 操作
GRANT SELECT ON test_db.* TO 'test_user'@'192.168.1.%';

-- 刷新权限
FLUSH PRIVILEGES;

云环境防火墙配置

阿里云 ECS 安全组配置

如果 OceanBase 数据库运行在阿里云 ECS 上,需要配置 ECS 安全组规则。

开放 OceanBase 必要端口

  1. 登录阿里云控制台,进入「ECS 实例列表」
  2. 找到目标 ECS 实例,点击「管理」
  3. 在左侧面板中点击「本实例安全组」
  4. 点击「配置规则」
  5. 点击「添加安全组规则」
  6. 配置规则:
    • 规则方向:入方向
    • 授权策略:允许
    • 协议类型:TCP
    • 端口范围:2881/2881(分别添加 2881、2882、2883 端口)
    • 授权对象:0.0.0.0/0(或特定 IP 地址/IP 段)
    • 优先级:1-100(数字越小优先级越高)
  7. 点击「确定」保存规则

腾讯云安全组配置

如果 OceanBase 数据库运行在腾讯云 CVM 上,需要配置 CVM 安全组规则。

开放 OceanBase 必要端口

  1. 登录腾讯云控制台,进入「CVM 实例列表」
  2. 找到目标 CVM 实例,点击「更多」→「安全组」→「配置安全组」
  3. 点击「修改规则」
  4. 点击「添加规则」
  5. 配置规则:
    • 类型:自定义 TCP
    • 源:0.0.0.0/0(或特定 IP 地址/IP 段)
    • 协议端口:TCP:2881(分别添加 2881、2882、2883 端口)
    • 策略:允许
    • 备注:OceanBase Ports
  6. 点击「完成」保存规则

网络防火墙最佳实践

最小权限原则

  • 只开放必要端口:只开放 OceanBase 数据库必要的服务端口,如 2881(OBServer 内部通信)、2882(OBServer 客户端通信)、2883(OBProxy 端口)
  • 只允许必要 IP 访问:只允许应用服务器、管理终端等必要 IP 地址访问数据库
  • 限制访问权限:根据用户角色分配最小必要权限,避免过度授权

分层防御策略

  • 部署多层防火墙:同时配置硬件防火墙、软件防火墙和数据库级 IP 白名单,实现分层防御
  • 网络隔离:将数据库网络与其他网络(如办公网络、互联网)隔离,使用 VLAN 或 VPN 实现安全访问
  • DMZ 区域:将 OBProxy 部署在 DMZ 区域,OBServer 部署在内部网络,实现网络隔离

定期审查和更新

  • 定期审查防火墙规则:每季度或半年审查一次防火墙规则,删除过时或不必要的规则
  • 及时更新防火墙软件:定期更新防火墙软件,修复安全漏洞
  • 监控防火墙日志:监控防火墙访问日志,及时发现异常访问行为

安全日志记录

  • 启用防火墙日志:配置防火墙记录所有访问尝试,包括允许和拒绝的访问
  • 集中日志管理:将防火墙日志发送到集中日志管理系统,便于分析和审计
  • 定期分析日志:定期分析防火墙日志,识别潜在的安全威胁

网络防火墙的监控与管理

监控防火墙状态

监控 Linux 防火墙状态

bash
# 监控 iptables 状态
iptables -L -n -v

# 监控 firewalld 状态
firewall-cmd --state
firewall-cmd --list-all

监控 Windows 防火墙状态

powershell
# 查看 Windows 防火墙状态
Get-NetFirewallProfile

# 查看入站规则
Get-NetFirewallRule -Direction Inbound | Where-Object {$_.Enabled -eq $true}

查看防火墙日志

查看 Linux 防火墙日志

bash
# 查看 iptables 日志
tail -f /var/log/messages | grep iptables

# 查看 firewalld 日志
tail -f /var/log/firewalld

查看 Windows 防火墙日志

  1. 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
  2. 点击「高级设置」,进入「Windows Defender 防火墙高级安全」窗口
  3. 在右侧面板中点击「属性」
  4. 切换到「自定义」选项卡,点击「日志设置」
  5. 查看日志文件路径,默认路径为 %systemroot%\System32\LogFiles\Firewall\pfirewall.log
  6. 使用文本编辑器打开日志文件查看

测试防火墙规则

使用 telnet 测试端口连通性

bash
# 测试 OBServer 端口连通性
telnet 192.168.1.100 2881
telnet 192.168.1.100 2882

# 测试 OBProxy 端口连通性
telnet 192.168.1.100 2883

使用 nc 测试端口连通性

bash
# 测试 OBServer 端口连通性
nc -zv 192.168.1.100 2881
nc -zv 192.168.1.100 2882

# 测试 OBProxy 端口连通性
nc -zv 192.168.1.100 2883

网络防火墙的常见问题

无法连接到数据库

症状:客户端无法连接到 OceanBase 数据库,出现「连接超时」或「拒绝连接」错误

解决方案

  1. 检查数据库服务是否正常运行:ps -ef | grep observer
  2. 检查数据库端口是否正常监听:netstat -tlnp | grep 2881
  3. 检查操作系统防火墙规则:iptables -L -nfirewall-cmd --list-all
  4. 检查数据库 IP 白名单配置:SHOW PARAMETERS LIKE 'ob_tcp_invited_nodes'
  5. 检查云平台安全组规则(如果是云环境)

防火墙规则不生效

症状:配置了防火墙规则,但仍然无法访问数据库,或规则没有按预期工作

解决方案

  1. 检查规则顺序:确保规则顺序正确,优先级高的规则先执行
  2. 重新加载规则:service iptables restartfirewall-cmd --reload
  3. 检查规则语法:确保规则语法正确,没有拼写错误
  4. 检查 IP 地址和端口:确保 IP 地址和端口配置正确
  5. 检查网络拓扑:确保网络路径上的所有防火墙都配置了正确的规则

防火墙性能问题

症状:防火墙导致数据库访问延迟增加,影响性能

解决方案

  1. 优化防火墙规则:删除不必要的规则,合并相似规则
  2. 调整规则顺序:将频繁匹配的规则放在前面
  3. 使用硬件防火墙:对于高流量场景,考虑使用硬件防火墙
  4. 启用连接追踪优化:调整连接追踪参数,提高性能
  5. 考虑使用云防火墙:云防火墙通常具有更好的性能和扩展性

网络防火墙的安全加固

禁用不必要的服务

  • 禁用不必要的网络服务:关闭不需要的网络服务,减少攻击面
  • 禁用 IPv6:如果不使用 IPv6,禁用 IPv6 支持
  • 禁用 ICMP 响应:禁用 ICMP 响应,防止 ping 扫描

启用入侵检测和防御

  • 部署 IDS/IPS 系统:在数据库网络部署入侵检测/防御系统,实时检测和阻止恶意攻击
  • 启用 SQL 防火墙:启用数据库 SQL 防火墙,防止 SQL 注入攻击
  • 启用 DDoS 防护:部署 DDoS 防护设备,防止分布式拒绝服务攻击

实现安全审计

  • 启用数据库审计:配置 OceanBase 数据库审计功能,记录所有数据库操作
  • 启用防火墙审计:配置防火墙审计功能,记录所有网络访问尝试
  • 定期安全审计:每季度或半年进行一次安全审计,评估防火墙配置的安全性

常见问题(FAQ)

Q1: OceanBase 数据库需要开放哪些端口?

A1: OceanBase 数据库需要开放以下端口:

  • 2881:OBServer 内部通信端口
  • 2882:OBServer 客户端通信端口
  • 2883:OBProxy 服务端口
  • 8080:OCP 管理端口(如果使用 OCP)
  • 22:SSH 管理端口(用于远程管理)

Q2: 如何配置 OceanBase 的 IP 白名单?

A2: 配置 OceanBase IP 白名单的方法:

sql
-- 配置全局 IP 白名单
ALTER SYSTEM SET ob_tcp_invited_nodes = '192.168.1.0/24,10.0.0.100';

-- 配置租户级 IP 白名单
ALTER TENANT test_tenant SET ob_tcp_invited_nodes = '192.168.1.0/24';

Q3: 如何测试 OceanBase 端口连通性?

A3: 测试 OceanBase 端口连通性的方法:

bash
# 使用 telnet 测试
telnet 192.168.1.100 2881

# 使用 nc 测试
nc -zv 192.168.1.100 2881

Q4: 防火墙规则应该如何排序?

A4: 防火墙规则的排序原则:

  • 更具体的规则放在前面
  • 允许访问的规则放在前面
  • 拒绝访问的规则放在后面
  • 默认拒绝所有访问的规则放在最后

Q5: 如何查看防火墙日志?

A5: 查看防火墙日志的方法:

  • Linux iptables:tail -f /var/log/messages | grep iptables
  • Linux firewalld:tail -f /var/log/firewalld
  • Windows:%systemroot%\System32\LogFiles\Firewall\pfirewall.log

Q6: 如何优化防火墙性能?

A6: 优化防火墙性能的方法:

  • 优化防火墙规则,删除不必要的规则
  • 调整规则顺序,将频繁匹配的规则放在前面
  • 使用硬件防火墙或云防火墙
  • 启用连接追踪优化
  • 考虑分布式防火墙架构

Q7: 云环境下需要配置哪些防火墙?

A7: 云环境下需要配置的防火墙:

  • 云平台安全组规则(如阿里云 ECS 安全组、腾讯云安全组)
  • 操作系统级防火墙(iptables、firewalld 等)
  • 数据库级 IP 白名单

Q8: 如何实现数据库网络隔离?

A8: 实现数据库网络隔离的方法:

  • 使用 VLAN 划分网络
  • 部署 DMZ 区域,将 OBProxy 部署在 DMZ 区域
  • 使用 VPN 实现安全访问
  • 配置网络 ACL,限制网络间的通信

Q9: 如何处理防火墙误拦截问题?

A9: 处理防火墙误拦截问题的方法:

  • 检查防火墙规则,确认是否存在误配置
  • 查看防火墙日志,确定误拦截的原因
  • 调整防火墙规则,允许合法访问
  • 考虑使用「学习模式」,自动生成防火墙规则

Q10: 如何制定防火墙规则策略?

A10: 制定防火墙规则策略的方法:

  • 遵循最小权限原则,只允许必要的访问
  • 基于业务需求制定规则,避免过度配置
  • 定期审查和更新规则
  • 记录规则的目的和负责人
  • 建立规则变更流程,确保规则变更的安全性和可追溯性

网络防火墙配置示例

生产环境防火墙配置示例

iptables 配置示例

bash
# 清空现有规则
iptables -F
iptables -X

# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH 访问(仅允许管理 IP)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# 允许 OBServer 内部通信(仅允许内部 IP)
iptables -A INPUT -p tcp --dport 2881 -s 10.0.0.0/8 -j ACCEPT

# 允许 OBServer 客户端通信(仅允许应用服务器 IP)
iptables -A INPUT -p tcp --dport 2882 -s 172.16.0.0/12 -j ACCEPT

# 允许 OBProxy 访问(仅允许 DMZ IP)
iptables -A INPUT -p tcp --dport 2883 -s 192.168.2.0/24 -j ACCEPT

# 允许 OCP 访问(仅允许管理 IP)
iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.0/24 -j ACCEPT

# 保存规则
iptables-save > /etc/sysconfig/iptables

IP 白名单配置示例

sql
-- 配置全局 IP 白名单,仅允许应用服务器和管理终端访问
ALTER SYSTEM SET ob_tcp_invited_nodes = '172.16.0.0/12,192.168.1.0/24';

-- 配置租户级 IP 白名单,仅允许特定应用服务器访问
ALTER TENANT app_tenant SET ob_tcp_invited_nodes = '172.16.1.0/24';
ALTER TENANT reporting_tenant SET ob_tcp_invited_nodes = '172.16.2.0/24';

网络防火墙的未来趋势

  • 软件定义防火墙(SDFW):基于软件定义网络(SDN)的防火墙,提供更灵活的网络安全策略管理
  • 云原生防火墙:专为云环境设计的防火墙,提供更好的云环境集成和扩展性
  • 智能防火墙:结合人工智能和机器学习技术,自动识别和阻止新型威胁
  • 零信任架构:基于零信任原则的防火墙,不依赖网络位置,对所有访问请求进行验证
  • 微分段:将网络划分为更小的安全域,实现更细粒度的访问控制