作成開始 : 平成19年02月15日(金)  最終更新日 : 平成19年02月15日(金)

Oracleでファイアウォール越えを試してみる


お客様のWebシステムを機能向上するのに伴い開発用として設置した検証用Webシステムと現用基幹サーバーとデータベースリンクするための検証を実施しようとした。
検証しようとする環境は次のようになっている。

当初、検証用ネットワークにある「Web内部サーバー」(192.168.231.101)から「基幹サーバー」(192.168.0.12)へのリンク検証は無事にできた。
しかし、「基幹サーバー」(192.168.0.12)から「Web内部サーバー」(192.168.231.101)へのリンク検証は「リスナーが見つからない」みたいな感じでエラーであった。
そりゃーそうだ。

floppyFWのルールで検証用ネットワークの外から中へは全てDropして、指定ポートだけ指定先へフォワードしているのだから・・・・

そこで、Oracleで使用のポート(1521)を調べて floppyFW に 192.168.231.101 へフォワードする設定を追加してみた。
追加設定は次のとおり!

-No.1----------------------------------------------------------------------------------------------------
# Oracle 1521(TCP):

iptables -A PREROUTING -t nat -p tcp -d ${OUTSIDE_IP} --dport 1521 -j DNAT --to 192.168.231.101:1521
iptables -A FORWARD -p tcp -d 192.168.231.101 --dport 1521 -o ${INSIDE_DEVICE} -j ACCEPT

# Oracle 1521(UDP):

iptables -A PREROUTING -t nat -p udp -d ${OUTSIDE_IP} --dport 1521 -j DNAT --to 192.168.231.101:1521
iptables -A FORWARD -p udp -d 192.168.231.101 --dport 1521 -o ${INSIDE_DEVICE} -j ACCEPT
---------------------------------------------------------------------------------------------------------

ただし、「基幹サーバー」(192.168.0.12)と直接接続して検証するのは避けたいと思ったので、192.168.1.232 のNetManagerから接続テストを行うことにした。
NetManagerには検証用ネットワークにある「Web内部サーバー」(192.168.231.101)のOracle DataBaseへのサービス名を登録した。
この時、192.168.1.232 のNetManagerへ登録するサービス名のIPアドレスは floppyFW の 192.168.1.233 である。

そして、floppyFWを再起動した。(iptablesとかのコマンド使えば再起動なしで即反映できるけどスキル不足で・・・)

起動して192.168.1.232 のNetManagerから接続テストをしたら今度は「接続タイムアウト」になった。
なんでかなー

さらに調べると、こんな記述があった。
-------------------------------
Oracle は、1521 ポートで、クライアントからの接続要求を待ちます。
デフォルトの設定では、クライアントからの接続要求があったら、新しいポートを開き、以降、そのポートを使用して通信を行います。
そのため、ファイアウォールで 1521 ポートを空けていても、新しいポートの要求はハネられてしまうため、接続できないことになります。
-------------------------------


この場合、新しいポートはランダムで 1024から65000 の間を使い特定できないのだそうだ。
そこで、floppyFWに次のようにして 1024から65000 を 192.168.231.101 へフォワードする設定を追加してみた。

-No.2----------------------------------------------------------------------------------------------------
# Oracle 1024-65000(TCP):

iptables -A PREROUTING -t nat -p tcp -d ${OUTSIDE_IP} --dport 1024:65000 -j DNAT --to 192.168.231.101
iptables -A FORWARD -p tcp -d 192.168.231.101 --dport 1024:65000 -o ${INSIDE_DEVICE} -j ACCEPT

# Oracle 1024-65000(UDP):

iptables -A PREROUTING -t nat -p udp -d ${OUTSIDE_IP} --dport 1024:65000 -j DNAT --to 192.168.231.101
iptables -A FORWARD -p udp -d 192.168.231.101 --dport 1024:65000 -o ${INSIDE_DEVICE} -j ACCEPT
---------------------------------------------------------------------------------------------------------

floppyFWを再起動して192.168.1.232 のNetManagerから接続テストをしたがやっぱり「接続タイムアウト」になった。
今回の場合、あくまでもLAN内でのネットワークであるためセキュリティは気にしなくてもよいが、実際の時を考えるとやはり多くのポートを開放するのは危険だと思いもっと調べた。
そしたら、新しいポートがランダムに変化するのは Windows 固有の話しらしい。Linuxだとこうはならないで ポート:1521 で固定らしい。
んー、じゃぁどうすれば・・・・

さらに調べた・・・そしたらみなさん同様のことで苦労したらしく割りとたくさんヒットした。
その中で次のを参考にした。


Tips10:ファイアウォール越えの Oracle 接続 より引用

<Oracle サーバー側>


なんか、どこかで見たなぁーと思っていたら、4年くらい前にも開発環境から実際の環境にして試験した時に同様のトラブルがあったのだ。
その時、自分がこのページを見つけて当時のベンダさんに「これ参考にならない?」と紹介したのだった。
当時は私自身もOracleはさわったことなかったし、業務APだけで手一杯だったためベンダさん任せにしていた。
そういや、お客様システムをデータセンタに移設した際に外部Webサーバー(更改新設)から内部Webサーバー(更改新設)にポート1521と80だけを開放し他は全て遮断した時にOracleがうまく通らず、遮断でなく開放(DMZにある外部Webサーバーから内部への通信)してもらった記憶がある。
・・・・ということは、4年前の時にベンダさんは旧内部Webサーバーにこれしたということだな!

資料に従いレジストリを追加して再起動、floppyFWはNo.1の設定のみで192.168.1.232 のNetManagerから接続テストをしたら、見事にテストに成功した。


  ↑
上のように追加しました。


  ↑
「ツール」→「テスト」とします。


  ↑
接続テスト成功です。

んー、とても勉強になったなぁー・・・・後は折を見てデータベースリンクを検証したい。


戻る

サイトトップへ