总体思路
Oracle 的监听进程 tnslsnr 是数据库对外接入的“门卫”,通过 lsnrctl 对其进行口令保护、权限收敛与运行限制,可显著降低被未授权停止、篡改或探测的风险。常见做法包括:设置监听口令并持久化、关闭本地操作系统认证、启用管理限制、限制可管理来源 IP、以及变更默认端口与最小权限运维。
关键配置与操作
- 设置监听口令并持久化
在 lsnrctl 中执行:
- set current_listener <监听名>
- change_password(设置新口令)
- set password(在当前会话设置口令)
- save_config(保存;部分版本需再次 set password 后才能保存成功)
成功后会在 listener.ora 生成加密项:PASSWORDS_<监听名> = <密文>。注意:未设置口令时,存在被远程执行 lsnrctl stop 的风险。
- 关闭本地操作系统认证
在 listener.ora 增加:LOCAL_OS_AUTHENTICATION_<监听名> = OFF,使监听管理必须提供口令;未关闭时,本机可能仍可免密执行管理命令(Security 显示为 “Password or Local OS Authentication”)。
- 启用管理限制
在 listener.ora 增加:ADMIN_RESTRICTIONS_<监听名> = ON。启用后,监听运行时不允许通过 lsnrctl 执行管理命令(含 set),配置变更需手工编辑 listener.ora 并用 reload/stop+start 使生效,进一步收敛攻击面。
- 限制来源 IP 访问监听管理
在 sqlnet.ora 配置:
- TCP.VALIDNODE_CHECKING = YES
- 仅允许白名单:TCP.INVITED_NODES = (IP1, IP2)
- 或仅拒绝黑名单:TCP.EXCLUDED_NODES = (IP1, IP2)
二者并存时以 INVITED_NODES 优先。注意:若开启节点检查却未配置任何允许/拒绝地址,可能导致监听启动失败(TNS-00584)。
- 变更默认监听端口
将监听端口由 1521 改为非常用端口,并同步数据库参数 local_listener,可减少自动化扫描与爆破命中率。
- 最小权限运维
仅允许 oracle 操作系统账户执行 lsnrctl;限制监听管理端口与管理通道的网络可达性(防火墙/安全组);对监听日志与跟踪进行集中审计。
典型加固流程
- 本地登录数据库服务器,进入 lsnrctl:set current_listener <监听名>
- 设置口令:change_password → set password → save_config(必要时再次 set password 再 save)
- 关闭本地 OS 认证:在 listener.ora 写入 LOCAL_OS_AUTHENTICATION_<监听名> = OFF 并 reload/重启
- 启用管理限制:在 listener.ora 写入 ADMIN_RESTRICTIONS_<监听名> = ON(变更通过手工编辑+reload 生效)
- 限制来源 IP:在 sqlnet.ora 开启 VALIDNODE_CHECKING,并按需配置 INVITED_NODES/EXCLUDED_NODES
- 变更端口与参数:修改 listener.ora 端口,SQL> alter system set local_listener=‘(address=(protocol=tcp)(host=<主机>)(port=<新端口>))’
- 验证:从非白名单主机尝试 lsnrctl status/stop 应被拒绝;本机执行需先 set password;查看 Security 状态与 listener.log 确认生效。
注意事项
- 口令与密文:口令保存在 listener.ora 的 PASSWORDS_<监听名> 字段为密文;忘记口令时,删除该行并重启监听可将口令恢复为空(存在安全风险,务必先评估与备份)。
- 节点检查陷阱:开启 VALIDNODE_CHECKING 而未配置任何允许/拒绝地址会导致监听启动失败(TNS-00584),务必至少配置 INVITED_NODES 或 EXCLUDED_NODES 之一。
- 管理限制与可用性:启用 ADMIN_RESTRICTIONS 后,监听运行中无法用 lsnrctl set/reload 等管理命令,需通过编辑文件+reload/重启变更,变更窗口需纳入维护计划。
- 本地免密风险:未关闭 LOCAL_OS_AUTHENTICATION 时,本机可能仍可免密管理监听;生产环境建议关闭并统一走口令+审计。
- 远程停止风险:未设置监听口令时,攻击者可在远程执行 lsnrctl stop 导致业务中断,务必优先设置口令并限制来源 IP。