2007年6月3日 星期日

使用PIX設定sqlnet的注意事項

我有一台主機放在DMZ區, 可是它要存取放在INSIDE的Oracle資料庫主機, 由於DMZ的安全層級比INSIDE小, 當然必須要明確的使用Access list來設定其權限。

1. 先使用static指令設定static nat
static (inside,dmz) 10.2.10.222 10.10.10.14 netmask 255.255.255.255

2. 再設定其access list
access-list acl_dmz extended permit tcp host 10.2.10.3 host 10.2.10.222 eq sqlnet

這樣我的主機(10.2.10.3)應該就可以存取資料庫主機(10.10.10.14)! 可是在測試連線資料庫主機時, 卻一直無法成功! 於是再設了一個Access list:
access-list acl_dmz extended permit icmp any any
然後ping資料庫主機, 卻可以正常的ping到! (ping 10.2.10.222)
再多設一個Access list:
access-list acl_dmz extended permit tcp host 10.2.10.3 host 10.2.10.222
然後由主機(10.2.10.3)連線到資料庫主機的資源分享, 也可以成功的存取檔案!

但是資料庫連線就是無法成功! 很奇怪!
於是我使用netstat -an指令, 查看資料庫連線時的情形, 發現:

TCP 10.2.10.3:1146 10.2.10.222:1521 TIME_WAIT
TCP 10.2.10.3:1147 10.10.10.14:2326 SYN_SENT

確實看到無法建立sqlnet(1521)的連線。原因看來就是在建立TCP連線時, 就有問題了(三方交握的第一個封包就過不去, 而且資料庫主機的位址變成真正的位址, 而不是轉址後的位址!) 這時候想到之前有看到Application Inspection的文件, 於是作了以下設定: (PIX 7.0)

policy-map global_policy
class inspection_default
inspect sqlnet

如果是PIX 6.3則為:

fixup protocol sqlnet

再去試著連結資料庫, 結果就成功了!
:-)
張貼留言