- PR -

iptablesでのポートフォワーディング

1
投稿者投稿内容
ytnobody
会議室デビュー日: 2008/09/08
投稿数: 3
お住まい・勤務地: 神奈川
投稿日時: 2008-09-08 11:38
iptablesを使ってhttpのポートフォワーディング(DNAT)を試みているのですが、何故かうまくいかない状態です。

■やりたいこと
Webブラウザで、FWサーバ(http://192.168.3.100:8000/)にアクセスした時に、Webサーバ(http://192.168.3.201:80/)へのアクセス時と同様のページを表示させたい。

■環境
* FWサーバ(192.168.3.100)
OS: Scientific Linux 4.4
iptables: 1.2.11
新規で構築したサーバで、他に仕事をさせる予定はないです。

* Webサーバ(192.168.3.201)
OS: CentOS 5.2
Apache: 2.2
httpd.confにて "Listen 80" および "NameVirtual *:80" が指定されており、LAN内に限定してWebページを開放しています。

■試したこと
FWサーバにて以下のようなシェルスクリプトを組んで、root権限で実行しました。

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -F -t nat
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.100 --dport 8000 -j DNAT --to-destination 192.168.3.201:80
iptables -A FORWARD -p tcp -d 192.168.3.201 --dport 80 -j ACCEPT


その後に、同一セグメント上のクライアントPCから、Firefox3.0.1で "http://192.168.3.100:8000/" へアクセスしたのですが、「正常に接続できませんでした」と表示されてしまいました。
念のため、FWサーバからプロンプトで

# telnet 192.168.3.201 80


としたところ、レスポンスがあったので、HTTP1.1に基づいてリクエストヘッダを入力したところ、HTTPレスポンス及びボディ(HTML)が返って来ました。

上記の内容をもとに、不足箇所のご指摘を頂きたいと思います。
宜しくお願いします。

[ メッセージ編集済み 編集者: ytnobody 編集日時 2008-09-08 12:06 ]
うっちー
常連さん
会議室デビュー日: 2004/08/12
投稿数: 32
投稿日時: 2008-09-08 15:21
こんにちは。

PREROUTING チェインで DNAT 変換させているので,
POSTROUTING チェインにて SNAT 変換させる必要があるのではないでしょうか。

iptables はあんまり使わないので,
勘違いなことを言っていたらすいません。
ytnobody
会議室デビュー日: 2008/09/08
投稿数: 3
お住まい・勤務地: 神奈川
投稿日時: 2008-09-08 15:47
>うっちーさん
こんにちは。ご教示ありがとうございます。
SNATですか、なるほど。

iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE

を、「iptables -t nat -A PREROUTING ... 」の後に加えて、試してみます。
eno
常連さん
会議室デビュー日: 2008/08/22
投稿数: 28
お住まい・勤務地: 代々木上原
投稿日時: 2008-09-08 16:06
iptables -A FORWARD -i eth1 -o eth0 -s $192.168.3.100 --dport 8000 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

確かchain(filter)は全部で三つありましたよね。
FORWARDの設定が抜けています。

あと、帰り道も用意しておかないとeth0のところでストップします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2008-09-08 16:07
同じネットワークのクライアントから繋げているのではないですか?
ここにズバリな解答が書いてあります。

http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/dnattarget.html
ytnobody
会議室デビュー日: 2008/09/08
投稿数: 3
お住まい・勤務地: 神奈川
投稿日時: 2008-09-08 16:32
皆さん、ご教示ありがとうございます。
結果から申し上げますと、SNATを追加することで目的を達成できました。

>enoさん
一応「iptables -A FORWARD -p tcp -d 192.168.3.201 --dport 80 -j ACCEPT 」としてあるので、単純にフォワーディングするだけならこれで大丈夫だと思っていたのですが。。。まずいですかね。。。

>あしゅさん
まさに、参考アドレスと同様の状況に陥っていました。
対応として、SNATの追加によるものが挙げられています。
# その先にあるFW自身によるアクセスについては、今回は考慮に入れていませんが。

# 3つ前の自分の返答、なぜかMASQUERADEとか言っている。。。
# SNATだと言っているのに。。。

皆さん、ありがとうございました。

[ メッセージ編集済み 編集者: ytnobody 編集日時 2008-09-08 16:42 ]
eno
常連さん
会議室デビュー日: 2008/08/22
投稿数: 28
お住まい・勤務地: 代々木上原
投稿日時: 2008-09-09 16:19
>enoさん
一応「iptables -A FORWARD -p tcp -d 192.168.3.201 --dport 80 -j ACCEPT 」としてあるので、単純にフォワーディングするだけならこれで大丈夫だと思っていたのですが。。。まずいですかね。。。


旨くいってよかったですね。
私の感覚としては必要だろうと思ってました。
でないと、その帰り道に使っているポートが外部からの入り口になる気がしまして。
内部から要求したTCP通信以外は、認めない、、てな感じです。
デフォルトしめてあるんだったら、旨くいっている以上後回しでもいいのでは?
ping,icmpパケットなどでも受け皿の分もinputの部分で用意しておきますよね。(違ったか^^)

1

スキルアップ/キャリアアップ(JOB@IT)