Skip to content

Oracle 防火墙配置与最佳实践

防火墙是Oracle数据库安全防护的重要组成部分,通过控制网络流量限制对数据库服务器的访问,保护数据库免受来自网络的恶意攻击。合理的防火墙配置可以有效阻止未授权访问、拒绝服务攻击等安全威胁,确保数据库的安全运行。

防火墙基础

防火墙的作用与类型

  • 核心作用

    • 控制进出网络的流量
    • 限制对特定端口和服务的访问
    • 防止未授权访问和恶意攻击
    • 记录网络活动,便于审计和监控
  • 主要类型

    • 硬件防火墙:独立的物理设备,性能高,适合大型网络
    • 软件防火墙:安装在服务器上的软件,如iptables、firewalld、Windows防火墙等
    • 云平台安全组:云平台提供的虚拟防火墙,如AWS Security Groups、Azure Network Security Groups等

Oracle数据库常用端口

在配置防火墙之前,需要了解Oracle数据库使用的常用端口:

端口号用途协议适用场景
1521Oracle监听器默认端口TCP常规数据库连接
1522备用监听器端口TCP高可用或多实例环境
2484SSL/TLS加密连接端口TCP加密数据库连接
5500Oracle Enterprise Manager (OEM)端口TCP数据库管理工具
5520Oracle Enterprise Manager Cloud Control端口TCP云环境管理控制台
3938Oracle Management Service端口TCPOEM管理服务
162SNMP陷阱端口UDP监控告警
443HTTPS端口TCP安全管理访问
22SSH远程管理端口TCPLinux服务器管理
3389Windows远程桌面端口TCPWindows服务器管理

Linux防火墙配置

iptables配置

iptables是Linux系统上传统的防火墙工具,适用于所有Linux发行版,提供细粒度的规则控制。

查看当前规则

bash
# 查看所有链的规则,包含详细统计信息
iptables -L -n -v

# 查看INPUT链的规则
iptables -L INPUT -n -v --line-numbers

配置基础规则

bash
# 清空现有规则
iptables -F

# 设置默认策略
iptables -P INPUT DROP    # 默认拒绝所有入站流量
iptables -P OUTPUT ACCEPT  # 默认允许所有出站流量
iptables -P FORWARD DROP   # 默认拒绝所有转发流量

# 允许本地回环访问
iptables -A INPUT -i lo -j ACCEPT

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

配置Oracle访问规则

bash
# 允许内部管理网段SSH访问
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT

# 允许应用服务器网段访问Oracle监听器
iptables -A INPUT -p tcp --dport 1521 -s 192.168.1.0/24 -j ACCEPT

# 允许特定IP访问Oracle SSL端口
iptables -A INPUT -p tcp --dport 2484 -s 172.16.0.10 -j ACCEPT

# 允许监控服务器访问OEM端口
iptables -A INPUT -p tcp --dport 5500 -s 192.168.2.0/24 -j ACCEPT

保存与恢复规则

bash
# CentOS/RHEL 6
iptables-save > /etc/sysconfig/iptables
service iptables restart

# CentOS/RHEL 7+ (使用iptables-services)
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables

# Debian/Ubuntu
iptables-save > /etc/iptables/rules.v4
systemctl restart netfilter-persistent

firewalld配置

firewalld是CentOS/RHEL 7+系统上默认的防火墙管理工具,提供了动态规则管理和区域概念。

基础管理

bash
# 查看firewalld状态
systemctl status firewalld

# 启动并设置开机自启
systemctl start firewalld
systemctl enable firewalld

查看当前配置

bash
# 查看默认区域
firewall-cmd --get-default-zone

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

# 查看所有区域
firewall-cmd --get-zones

配置Oracle访问规则

bash
# 允许SSH访问(默认服务)
firewall-cmd --permanent --add-service=ssh

# 允许Oracle监听器访问(特定IP网段)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="1521" accept'

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

# 允许OEM端口访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="5500" accept'

# 重新加载规则使配置生效
firewall-cmd --reload

创建自定义服务

bash
# 创建自定义Oracle服务
firewall-cmd --permanent --new-service=oracle
firewall-cmd --permanent --service=oracle --set-description="Oracle Database Service"
firewall-cmd --permanent --service=oracle --add-port=1521/tcp
firewall-cmd --permanent --service=oracle --add-port=2484/tcp

# 允许特定网段访问该服务
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="oracle" accept'
firewall-cmd --reload

Windows防火墙配置

Windows服务器上可以使用Windows Defender防火墙来保护Oracle数据库。

图形界面配置

  1. 打开Windows Defender防火墙

    • 控制面板 > 系统和安全 > Windows Defender防火墙
    • 或运行 wf.msc 命令
  2. 配置入站规则

    • 点击"高级设置" > "入站规则" > "新建规则"
    • 选择"端口" > "TCP" > "特定本地端口"
    • 输入Oracle监听器端口(如1521)
    • 选择"允许连接"
    • 选择应用场景(建议只选择"域"和"专用")
    • 输入规则名称(如"Oracle Listener Port")
    • 点击"完成"
  3. 配置特定IP访问

    • 在入站规则中找到刚创建的规则,右键 > "属性"
    • 切换到"作用域"选项卡
    • 在"远程IP地址"中选择"下列IP地址"
    • 点击"添加",输入允许访问的IP地址或网段
    • 点击"确定"

命令行配置

powershell
# 允许Oracle监听器端口访问(特定IP网段)
netsh advfirewall firewall add rule name="Oracle Listener Restricted" dir=in action=allow protocol=TCP localport=1521 remoteip=192.168.1.0/24,10.0.0.0/24

# 允许Oracle SSL端口访问
netsh advfirewall firewall add rule name="Oracle SSL" dir=in action=allow protocol=TCP localport=2484 remoteip=192.168.1.0/24

# 允许OEM端口访问
netsh advfirewall firewall add rule name="Oracle OEM" dir=in action=allow protocol=TCP localport=5500 remoteip=192.168.2.0/24

# 查看防火墙规则
netsh advfirewall firewall show rule name=all | findstr /i "oracle"

云平台安全组配置

如果Oracle数据库部署在云平台上,可以使用云平台提供的安全组来配置防火墙规则。

AWS Security Groups配置

  1. 登录AWS管理控制台

    • 导航到EC2 > 安全组
    • 选择或创建安全组
  2. 添加入站规则

    • 点击"编辑入站规则"
    • 点击"添加规则"
    • 选择类型:自定义TCP规则
    • 端口范围:1521
    • 源:自定义,输入允许访问的IP地址或安全组
    • 描述:Oracle Listener Port
    • 点击"保存规则"
  3. 添加其他必要端口

    • 根据需要添加其他Oracle相关端口,如2484(SSL)、5500(OEM)等

Azure Network Security Groups配置

  1. 登录Azure门户

    • 导航到网络安全组
    • 选择或创建网络安全组
  2. 添加入站安全规则

    • 点击"入站安全规则" > "添加"
    • 名称:Oracle-Listener
    • 优先级:100(数值越小优先级越高)
    • 源:IP地址,输入允许访问的IP地址或网段
    • 源端口范围:*
    • 目标:任意
    • 服务:自定义
    • 目标端口范围:1521
    • 协议:TCP
    • 操作:允许
    • 描述:Allow Oracle Listener Port
    • 点击"添加"
  3. 关联网络安全组

    • 将网络安全组关联到Oracle数据库所在的子网或网卡

阿里云安全组配置

  1. 登录阿里云控制台

    • 导航到云服务器ECS > 网络与安全 > 安全组
    • 选择或创建安全组
  2. 添加安全组规则

    • 点击"配置规则" > "入方向" > "手动添加"
    • 授权策略:允许
    • 协议类型:TCP
    • 端口范围:1521/1521
    • 授权对象:输入允许访问的IP地址或网段
    • 描述:Oracle Listener Port
    • 点击"确定"

生产环境最佳实践

配置原则

  1. 最小权限原则

    • 只允许必要的端口和服务
    • 只允许必要的IP地址访问
    • 避免使用"允许所有"(0.0.0.0/0)规则
  2. 分层防护策略

    • 结合硬件防火墙、软件防火墙和云安全组
    • 不同层级使用不同的规则集
    • 实现纵深防御,提高安全级别
  3. 定期审查与更新

    • 每季度审查一次防火墙规则
    • 及时移除不再使用的规则
    • 记录规则变更,便于审计
  4. 日志与监控

    • 启用防火墙日志记录
    • 将日志发送到集中日志管理系统
    • 配置异常流量告警

配置示例:生产环境防火墙规则

Linux环境(firewalld)

bash
# 基础规则
firewall-cmd --permanent --add-service=ssh --source=10.0.0.0/24
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" accept'

# Oracle数据库规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="1521" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2484" accept'

# 监控规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="5500" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.2.0/24" port protocol="udp" port="162" accept'

firewall-cmd --reload

云环境(AWS)

规则名称类型协议端口范围描述
SSH-AccessSSHTCP2210.0.0.0/24管理访问
Oracle-Listener自定义TCPTCP1521192.168.1.0/24数据库连接
Oracle-SSL自定义TCPTCP2484192.168.1.0/24加密连接
Oracle-OEM自定义TCPTCP5500192.168.2.0/24监控管理

Oracle 19c与21c防火墙配置差异

核心差异

特性Oracle 19cOracle 21c
默认端口与传统版本一致保持兼容,但推荐使用加密端口
加密支持基础TLS 1.2支持增强TLS 1.3支持,默认更安全
多租户增强基础多租户支持增强的多租户安全特性
云原生支持基础云支持更完善的云原生集成
安全默认值较宽松的默认配置更严格的安全默认值

Oracle 21c特有配置

  1. 增强的加密要求

    • Oracle 21c默认要求更安全的加密配置
    • 建议优先配置2484端口的SSL连接
    • 可能需要开放额外的端口用于安全认证
  2. 云环境优化

    • 更适合在云环境中部署
    • 与云平台安全组的集成更紧密
    • 支持更多云原生安全特性
  3. 多租户安全增强

    • 对于多租户环境,需要考虑为每个PDB配置独立的安全规则
    • 支持更细粒度的访问控制

常见问题(FAQ)

Q:Oracle客户端无法连接到数据库,如何排查?

A:

  1. 检查监听器是否正常运行:lsnrctl status
  2. 检查防火墙是否允许相关端口访问:使用 telnet <db_server_ip> 1521 测试
  3. 检查客户端IP是否在防火墙允许列表中
  4. 检查监听器配置是否正确:lsnrctl show all
  5. 查看防火墙日志,确认是否有被拒绝的连接请求

Q:防火墙规则配置后不生效,怎么办?

A:

  1. 检查防火墙服务是否运行:systemctl status firewalldnetsh advfirewall show allprofiles state
  2. 检查规则顺序是否正确(iptables规则按顺序执行)
  3. 检查规则是否应用到正确的区域或接口
  4. 尝试重新加载规则:firewall-cmd --reloadnetsh advfirewall reset
  5. 检查是否有其他安全设备(如硬件防火墙)阻止了流量

Q:如何临时开放端口进行维护?

A:

  1. Linux(firewalld):
    bash
    # 添加临时规则(重启后失效)
    firewall-cmd --add-port=1521/tcp
    # 维护完成后移除
    firewall-cmd --remove-port=1521/tcp
  2. Windows:
    powershell
    # 添加临时规则
    netsh advfirewall firewall add rule name="Temp-Oracle-Access" dir=in action=allow protocol=TCP localport=1521 remoteip=any
    # 维护完成后移除
    netsh advfirewall firewall delete rule name="Temp-Oracle-Access"

Q:如何监控防火墙规则的使用情况?

A:

  1. 启用防火墙日志记录
  2. 将日志发送到集中日志管理系统(如ELK Stack、Splunk)
  3. 配置日志分析和告警规则
  4. 定期生成防火墙规则使用报告

Q:在多实例环境中,如何配置防火墙规则?

A:

  1. 为每个实例配置不同的监听器端口
  2. 在防火墙中为每个端口配置相应的访问规则
  3. 考虑使用端口范围来简化配置(如1521-1525/tcp)
  4. 为每个实例配置独立的安全组或访问控制列表

Q:如何在高可用环境中配置防火墙?

A:

  1. 为所有节点配置相同的防火墙规则
  2. 确保VIP(虚拟IP)也在防火墙允许列表中
  3. 配置心跳端口的访问规则(如1521、1522等)
  4. 确保故障转移时防火墙规则不会成为瓶颈

Q:Oracle 21c在云环境中需要额外开放哪些端口?

A:

  1. 除了传统端口外,可能需要开放云平台特定的端口
  2. 对于Oracle Autonomous Database,需要配置云平台的网络访问控制
  3. 对于OCI(Oracle Cloud Infrastructure),需要配置VCN安全列表和网络安全组

Q:如何备份和恢复防火墙规则?

A:

  1. Linux(iptables):
    bash
    # 备份
    iptables-save > /etc/iptables/rules.v4.backup
    # 恢复
    iptables-restore < /etc/iptables/rules.v4.backup
  2. Linux(firewalld):
    bash
    # 备份
    firewall-cmd --runtime-to-permanent
    cp -r /etc/firewalld /etc/firewalld.backup
    # 恢复
    cp -r /etc/firewalld.backup /etc/firewalld
    systemctl restart firewalld
  3. Windows:
    powershell
    # 备份
    netsh advfirewall export "C:\firewall-backup.wfw"
    # 恢复
    netsh advfirewall import "C:\firewall-backup.wfw"

总结

防火墙配置是Oracle数据库安全防护的重要组成部分,DBA需要根据数据库部署环境(Linux、Windows、云平台)选择合适的配置方式。合理的防火墙配置应该遵循最小权限原则,只允许必要的端口和IP地址访问,定期审查和更新规则,启用日志记录,并结合多层防护策略。

对于Oracle 21c,需要特别关注其增强的安全特性和云原生支持,适当调整防火墙配置以适应新的安全要求。通过正确配置防火墙,可以有效保护Oracle数据库免受网络攻击