CentOS 上 Oracle Listener 安全策略清单
一 基础防护
- 设置监听器管理口令并持久化:在 lsnrctl 中执行 change_password 设置强口令,随后 set password 再执行 save_config 保存;口令会以密文形式写入 listener.ora,例如:PASSWORDS_LISTENER = C7AD988BC0D7DB0A。未设置口令时,攻击者可能从远程执行 lsnrctl stop 导致业务中断。完成后务必测试 stop/status/save_config 均需口令。
- 禁用本地操作系统认证(可选,提升管控强度):在 listener.ora 增加 LOCAL_OS_AUTHENTICATION_LISTENER = OFF。注意在 Oracle 11g 上,即便启用口令,本机执行 lsnrctl status 仍可能无需口令;关闭本地认证后,本机管理也需口令。
- 启用管理限制(可选,防在线篡改):在 listener.ora 增加 ADMIN_RESTRICTIONS_ = ON。开启后,监听器运行时禁止通过 lsnrctl 的 set 等管理命令,变更需编辑文件并 reload/stop+start 重载。
- 文件与权限加固:确保 $ORACLE_HOME/network/admin/listener.ora 仅 oracle 用户可读写,目录权限最小化;禁止将监听配置放在可被非授权用户编辑的路径。
二 网络与访问控制
- 限制监听端口访问:仅允许应用所在网段访问 TCP/1521(示例为 firewalld,生产请按最小网段开放)。
- 查看区域:sudo firewall-cmd --get-active-zones
- 仅放行业务网段:sudo firewall-cmd --zone=public --permanent --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“1521” protocol=“tcp” accept’
- 拒绝其他来源:sudo firewall-cmd --zone=public --permanent --add-rich-rule=‘rule family=“ipv4” port port=“1521” protocol=“tcp” drop’
- 生效:sudo firewall-cmd --reload
- 监听地址绑定:在 listener.ora 仅绑定内网地址,避免使用 0.0.0.0 监听所有地址。
- 示例:
- LISTENER =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
- )
- )
- 主机加固:仅开放必要端口(如 22/1521),关闭不必要的 ICMP/其他管理端口;监听进程以 oracle 用户运行,禁止 root 直接运行。
三 加密与日志审计
- 启用传输加密(可选,防窃听):在 listener.ora 为监听地址配置 TCPS 并配置 SSL/TLS(示例)。
- 示例:
- LISTENER =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCPS)(HOST = 192.168.1.10)(PORT = 1521))
- )
- )
- SSL_CLIENT_AUTHENTICATION = FALSE
- WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet)))
- 日志与追踪:提升日志级别并开启追踪,便于审计与故障排查。
- 示例:
- LOG_LEVEL_LISTENER = 16
- TRACE_LEVEL_LISTENER = 16
- TRACE_FILE_LISTENER = listener_trace.log
- 审计与巡检:定期查看 $ORACLE_HOME/network/log/listener.log,关注异常 stop/start、来源 IP、频繁连接失败等;对监听配置变更建立变更记录与回滚预案。
四 维护与应急
- 口令遗忘恢复:在 listener.ora 中删除或注释 PASSWORDS_ 行,或将 ADMIN_RESTRICTIONS_ 置为 OFF 后重启监听,即可清除口令;恢复后请立即设置新口令并重新启用限制。
- 变更流程:遵循“编辑 listener.ora → lsnrctl reload/stop+start → 验证 status/连通性”的闭环;变更前备份配置文件。
- 脚本自动化:如需在脚本中执行受控操作,可在 lsnrctl 交互中使用 set password <密文>(密文即 listener.ora 中的 PASSWORDS_ 值),避免交互输入口令。