Listener 是 Oracle 對外服務的大門,亦是攻擊面最集中的組件。RHEL4/Oracle 10g 環境下,本文提出 11 條從配置、網路、OS、審計全維度的加固鐵律,構建纵深防禦體系。
LSNRCTL> SET CURRENT_LISTENER LISTENER
LSNRCTL> CHANGE_PASSWORD
Old password: <Enter 若無>
New password: ********
Reenter: ********
LSNRCTL> SET PASSWORD ********
LSNRCTL> SAVE_CONFIG
listener.ora 將存儲加密雜湊 (PASSWORDS_LISTENER = ),拒絕未授權 LSNRCTL 控制命令。
LSNRCTL> SET LOG_DIRECTORY /network/admin
LSNRCTL> SET LOG_FILE listener.log
LSNRCTL> SET LOG_STATUS ON
LSNRCTL> SAVE_CONFIG
記錄所有連線嘗試、命令執行、錯誤 (如 TNS-01169 密碼錯誤、TNS-01189/90 非法命令),支援事後審計與 SIEM 聯動。
在 listener.ora 手工添加:
ADMIN_RESTRICTIONS_LISTENER = ON
運行時禁止所有 SET 動態修改 (本地/遠程皆禁),配置變更僅能編輯 listener.ora 後 RELOAD/RESTART,杜絕運行時被惡意篡改。
$ORACLE_HOME/network/admin 下關鍵檔案權限:
listener.ora、sqlnet.ora、protocol.ora:僅 Oracle 安裝擁有者 (如 oracle) 可讀寫 (Linux 600/640)。tnsnames.ora:客戶端需讀取,Linux 644、Windows「讀取/執行」。$ORACLE_HOME/bin/tnslsnr、lsnrctl:
chmod 750 (組執行) 或 700 (僅擁有者)。EXTPROC / PLSExtProc (外部程序),歷史漏洞多,**若不用請刪除**。listener.ora 時,檢查殘留無效 SID_DESC,保持最小服務集。listener.ora PORT = 或用 NETCA。tnsnames.ora、LOCAL_LISTENER 參數同步修改,支援自動註冊。在 sqlnet.ora (9i/10g+) 或 protocol.ora (8/8i) 添加:
TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES = (192.168.1.10, appserver01, 10.0.0.0/24) -- 僅允許 (白名單)
-- 或
TCP.EXCLUDED_NODES = (192.168.1.100, badhost) -- 僅拒絕 (黑名單)
-- 兩擇一,不可並用,不支援萬用字元
重啟 Listener 生效。 適合客戶端固定、數量可控場景。大量動態客戶端改用 Oracle Connection Manager (CMAN) 代理驗證。
listener.log 關鍵錯誤:TNS-01169 (密碼錯)、TNS-01189 (未授權命令)、TNS-01190 (權限不足)、TNS-12508 (連線被拒)。| # | 項目 | 驗證命令 | 風險等級 |
|---|---|---|---|
| 1 | 密碼 | LSNRCTL> STATUS (顯示 Password: ON) | Critical |
| 2 | 日誌 | ls $ORACLE_HOME/network/admin/listener.log | High |
| 3 | ADMIN_RESTRICTIONS | grep ADMIN_RESTRICTIONS listener.ora | High |
| 4 | CPU 補丁 | opatch lsinventory | grep CPU | Critical |
| 5 | 防火牆規則 | iptables -L -n | grep 1521 | Critical |
| 6 | TNS_ADMIN 權限 | ls -l $ORACLE_HOME/network/admin/ | High |
| 7 | 執行檔權限 | ls -l $ORACLE_HOME/bin/tnslsnr | Medium |
| 8 | 移除 EXTPROC | grep -i extproc listener.ora | Medium |
| 9 | 非預設端口 | grep PORT listener.ora | Low |
| 10 | 節點驗證 | grep VALIDNODE sqlnet.ora | High |
| 11 | 日誌告警 | crontab -l | grep listener_monitor | High |
Listener 安全非單一設定,而是認證、授權、審計、網路、補丁、監控六大支柱的系統工程。逐條落地 11 條鐵律,再配合定期滲透測試、紅藍對抗、應急演練,才能將 Oracle 服務大門鎖緊,守住企業核心資產最後一道防線。