外观
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 --reloadWindows 防火墙配置
如果 OceanBase 数据库运行在 Windows 操作系统上,需要配置 Windows 防火墙规则。
开放 OceanBase 必要端口
- 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
- 点击「高级设置」,进入「Windows Defender 防火墙高级安全」窗口
- 在左侧面板中点击「入站规则」,然后在右侧面板中点击「新建规则」
- 选择「端口」,点击「下一步」
- 选择「TCP」,在「特定本地端口」中输入 OceanBase 端口(如 2881,2882,2883),点击「下一步」
- 选择「允许连接」,点击「下一步」
- 选择适用的网络类型(域、专用、公共),点击「下一步」
- 输入规则名称(如「OceanBase Ports」),点击「完成」
限制访问来源 IP
- 在「Windows Defender 防火墙高级安全」窗口中,找到刚创建的入站规则,右键点击并选择「属性」
- 切换到「作用域」选项卡
- 在「远程 IP 地址」区域,选择「这些 IP 地址」,然后点击「添加」
- 输入允许访问的 IP 地址或 IP 段,点击「确定」
- 点击「应用」和「确定」保存设置
数据库级访问控制
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 必要端口
- 登录阿里云控制台,进入「ECS 实例列表」
- 找到目标 ECS 实例,点击「管理」
- 在左侧面板中点击「本实例安全组」
- 点击「配置规则」
- 点击「添加安全组规则」
- 配置规则:
- 规则方向:入方向
- 授权策略:允许
- 协议类型:TCP
- 端口范围:2881/2881(分别添加 2881、2882、2883 端口)
- 授权对象:0.0.0.0/0(或特定 IP 地址/IP 段)
- 优先级:1-100(数字越小优先级越高)
- 点击「确定」保存规则
腾讯云安全组配置
如果 OceanBase 数据库运行在腾讯云 CVM 上,需要配置 CVM 安全组规则。
开放 OceanBase 必要端口
- 登录腾讯云控制台,进入「CVM 实例列表」
- 找到目标 CVM 实例,点击「更多」→「安全组」→「配置安全组」
- 点击「修改规则」
- 点击「添加规则」
- 配置规则:
- 类型:自定义 TCP
- 源:0.0.0.0/0(或特定 IP 地址/IP 段)
- 协议端口:TCP:2881(分别添加 2881、2882、2883 端口)
- 策略:允许
- 备注:OceanBase Ports
- 点击「完成」保存规则
网络防火墙最佳实践
最小权限原则
- 只开放必要端口:只开放 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 防火墙日志
- 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
- 点击「高级设置」,进入「Windows Defender 防火墙高级安全」窗口
- 在右侧面板中点击「属性」
- 切换到「自定义」选项卡,点击「日志设置」
- 查看日志文件路径,默认路径为
%systemroot%\System32\LogFiles\Firewall\pfirewall.log - 使用文本编辑器打开日志文件查看
测试防火墙规则
使用 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 数据库,出现「连接超时」或「拒绝连接」错误
解决方案:
- 检查数据库服务是否正常运行:
ps -ef | grep observer - 检查数据库端口是否正常监听:
netstat -tlnp | grep 2881 - 检查操作系统防火墙规则:
iptables -L -n或firewall-cmd --list-all - 检查数据库 IP 白名单配置:
SHOW PARAMETERS LIKE 'ob_tcp_invited_nodes' - 检查云平台安全组规则(如果是云环境)
防火墙规则不生效
症状:配置了防火墙规则,但仍然无法访问数据库,或规则没有按预期工作
解决方案:
- 检查规则顺序:确保规则顺序正确,优先级高的规则先执行
- 重新加载规则:
service iptables restart或firewall-cmd --reload - 检查规则语法:确保规则语法正确,没有拼写错误
- 检查 IP 地址和端口:确保 IP 地址和端口配置正确
- 检查网络拓扑:确保网络路径上的所有防火墙都配置了正确的规则
防火墙性能问题
症状:防火墙导致数据库访问延迟增加,影响性能
解决方案:
- 优化防火墙规则:删除不必要的规则,合并相似规则
- 调整规则顺序:将频繁匹配的规则放在前面
- 使用硬件防火墙:对于高流量场景,考虑使用硬件防火墙
- 启用连接追踪优化:调整连接追踪参数,提高性能
- 考虑使用云防火墙:云防火墙通常具有更好的性能和扩展性
网络防火墙的安全加固
禁用不必要的服务
- 禁用不必要的网络服务:关闭不需要的网络服务,减少攻击面
- 禁用 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 2881Q4: 防火墙规则应该如何排序?
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/iptablesIP 白名单配置示例
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)的防火墙,提供更灵活的网络安全策略管理
- 云原生防火墙:专为云环境设计的防火墙,提供更好的云环境集成和扩展性
- 智能防火墙:结合人工智能和机器学习技术,自动识别和阻止新型威胁
- 零信任架构:基于零信任原则的防火墙,不依赖网络位置,对所有访问请求进行验证
- 微分段:将网络划分为更小的安全域,实现更细粒度的访问控制
