1. 限制lsnrctl工具的执行权限
通过操作系统层面的权限控制,确保只有授权用户(如oracle数据库管理员)能执行lsnrctl命令。具体操作包括:
lsnrctl文件的所有权归属为root用户和root组,避免非特权用户篡改。sudo chown root:root /path/to/lsnrctl
lsnrctl的权限设为700(仅所有者可读、写、执行)或750(所有者完全控制,组用户可读/执行),防止未授权访问。sudo chmod 700 /path/to/lsnrctl
oracle)以root身份运行lsnrctl,可使用visudo编辑/etc/sudoers文件,添加如下规则(避免直接赋予root密码):oracle ALL=(root) NOPASSWD: /path/to/lsnrctl
此配置确保oracle用户可通过sudo lsnrctl安全执行命令。2. 强化监听器配置的安全参数
通过修改listener.ora文件(通常位于$ORACLE_HOME/network/admin目录),添加以下关键安全设置:
lsnrctl set password StrongPassword123!
lsnrctl stop)并将该参数置为OFF才能调整,降低配置被篡改的风险。ADMIN_RESTRICTIONS_LISTENER = ON
listener.ora中的ADDRESS参数,仅允许特定IP地址(如数据库服务器本地IP、信任的业务服务器IP)访问监听器端口(默认1521)。LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) # 仅允许192.168.1.100访问
)
)
保存配置后,需重启监听器(lsnrctl restart)使更改生效。3. 启用SSL/TLS加密通信
为防止监听器与客户端之间的数据(如用户名、密码、SQL语句)被窃听或篡改,需配置SSL加密:
openssl生成自签名证书(有效期365天),包含私钥(key.pem)和公钥(cert.pem)。openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
TCPS协议地址(默认端口1522)及加密参数,要求客户端必须使用加密连接。LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) # 普通TCP端口(可选保留)
(ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 1522)) # SSL加密端口
)
)
SECURITY_LISTENER =
(ENCRYPTION_CLIENT = REQUIRED) # 强制客户端加密
(ENCRYPTION_TYPES_CLIENT = (AES256, AES192, AES128)) # 指定加密算法
(SSL_VERSION = 1.2) # 使用TLS 1.2及以上版本
(SSL_CIPHER_SUITES = (TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256)) # 指定加密套件
SSL_CLIENT_AUTHENTICATION = FALSE # 是否要求客户端提供证书(TRUE为必须)
tnsnames.ora文件,将连接协议改为TCPS,指向监听器的SSL端口(1522)。YOUR_SERVICE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 1522)) # 使用SSL连接
(CONNECT_DATA =
(SERVICE_NAME = your_service_name)
)
)
重启监听器后,客户端需使用TCPS协议连接,实现数据加密传输。4. 配置操作系统层防火墙限制
通过Ubuntu防火墙(ufw或iptables)限制对监听器端口(默认1521)的访问,仅允许信任的IP地址连接:
ufw,可添加如下规则:sudo ufw allow from 192.168.1.0/24 to any port 1521/tcp # 允许192.168.1.0/24网段访问1521端口
sudo ufw deny 1521/tcp # 拒绝其他所有IP访问1521端口
sudo ufw enable # 启用防火墙
iptables,可添加如下规则:sudo iptables -A INPUT -p tcp --dport 1521 -s 192.168.1.100 -j ACCEPT # 允许192.168.1.100访问
sudo iptables -A INPUT -p tcp --dport 1521 -j DROP # 拒绝其他所有IP访问
sudo service iptables save # 保存规则(CentOS系统)
防火墙规则能有效阻断非法IP对监听器的扫描或攻击。5. 启用监听器安全审计与监控
通过监控监听器日志,及时发现异常访问或攻击行为:
$ORACLE_HOME/network/log/listener.log,可通过tail命令实时监控:tail -f $ORACLE_HOME/network/log/listener.log
listener.ora中的LOG_LEVEL参数设置为INFO或DEBUG(默认OFF),记录连接请求、认证失败等事件:LOG_LEVEL_LISTENER = INFO
TRACE_LEVEL_LISTENER = OFF # 避免过度记录影响性能
日志内容可帮助识别恶意IP(如频繁的连接失败尝试),便于后续采取封禁措施。6. 定期更新与补丁管理
保持lsnrctl及Oracle数据库软件为最新版本,及时应用官方发布的安全补丁,修复已知漏洞(如监听器缓冲区溢出、密码破解漏洞)。可通过以下命令检查Oracle数据库更新:
opatch lspatches # 查看已安装补丁
opatch apply /path/to/new_patch # 应用新补丁
定期更新是防范针对性攻击的重要手段。