このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/15 14:15
名前: しっぽ
URL:
CentOS release 4.7 (Final)を利用しています。

現在以下の構成にしています。

[eth0]Server1[eth1]----HUB----Server2

eth0:Global_IP
eth1:Local_IP(192.168.1.2)
Server2:Local_IP(192.168.1.3)

Server1のGlobal_IPへは外部から接続できています。

Server1のポート12345(仮)にアクセスした際に、Server2のHTTPD(ポート80)より
コンテンツを返したいと思っています。

そこでServer1側のiptablesに以下のような設定を追加してみました。

-A PREROUTING -i eth0 -p tcp -m tcp --dport 12345 -j DNAT --to-destination 192.168.1.3:80
-A FORWARD -d 192.168.1.3 -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT

この状態で外部より http://Global_IP:12345
へアクセスしてもServer2のコンテンツが返ってきません。
(※Server2のiptablesはstopしてあります。)

どの設定がまずいのでしょうか。

Server1のcat /proc/sys/net/ipv4/ip_forward結果は1です。

また必要な情報等ありましたら、教えてください。

記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/16 19:23
名前: stranger
URL: http://ja.528p.com/
>CentOS release 4.7 (Final)を利用しています。
>
>現在以下の構成にしています。
>
>[eth0]Server1[eth1]----HUB----Server2
>
>eth0:Global_IP
>eth1:Local_IP(192.168.1.2)
>Server2:Local_IP(192.168.1.3)
>
>Server1のGlobal_IPへは外部から接続できています。
>
>Server1のポート12345(仮)にアクセスした際に、Server2のHTTPD(ポート80)より
>コンテンツを返したいと思っています。
>
>そこでServer1側のiptablesに以下のような設定を追加してみました。
>
>-A PREROUTING -i eth0 -p tcp -m tcp --dport 12345 -j DNAT --to-destination 192.168.1.3:80
>-A FORWARD -d 192.168.1.3 -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
>
>この状態で外部より http://Global_IP:12345
>へアクセスしてもServer2のコンテンツが返ってきません。
>(※Server2のiptablesはstopしてあります。)
>
>どの設定がまずいのでしょうか。
>
>Server1のcat /proc/sys/net/ipv4/ip_forward結果は1です。
>
>また必要な情報等ありましたら、教えてください。
>
>
rpmでインストールされたiptablesの場合
(rootで実行する)

iptablesコマンドでチェーンをつくる

# iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 12345 -j DNAT --to-destination 192.168.1.3:80
# iptables -A FORWARD -d 192.168.1.3 -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT

チェーンが作られているか確認
# service iptables status

/etc/sysconfig/iptablesにsaveする
# service iptables save

出ていくFORWARDチェーン
POSTROUTING SNATチェーン(またはMASQUERADE)の設定が必要では?
記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/16 18:04
名前: くま
URL:
利用したコマンドも同じで、その設定の反映も確認済みです。

iptables -t nat -L -v で確認してみても
0 0 DNAT tcp -- eth0 any anywhere anywhere tcp dpt:12345 to:192.168.1.3:80
と出ています。

>出ていくFORWARDチェーン
>POSTROUTING SNATチェーン(またはMASQUERADE)の設定が必要では?

すいません、こちら設定例等ないでしょうか。
色々検索はしてみたのですが、どうもピンとくる物がなくて


記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/16 18:06
名前: くま
URL:
あ、追記で1つ 他のところで使っている名前に変えました。
記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/16 19:22
名前: stranger
URL: http://ja.528p.com/
>あ、追記で1つ 他のところで使っている名前に変えました。

iptables -A FORWARD -s 192.168.1.0/24 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to Global_IP

Global_IPは固定グローバルIPであるとする
HUBの下にサーバ以外のクライアントマシンが継っていると考えています

クライアントから外部にアクセスするためには -m state --state NEW を通す設定をする
その場合、sambaのパケットを通さないようにするとか
securityをあげるためには、いろいろ配慮する必要があります
記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/18 00:45
名前: くま
URL:

>iptables -A FORWARD -s 192.168.1.0/24 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
>iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to Global_IP

試してみますが、こちらローカルから接続する時に必要となる設定のように見えます。

>Global_IPは固定グローバルIPであるとする
>HUBの下にサーバ以外のクライアントマシンが継っていると考えています

Global_IPは確かに固定IPですが
HUB以下にクライアントはありません。別セッションにて別ルータ以下にありますので
完全に外部から接続しているのと変わりません。
記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/18 09:03
名前: stranger
URL: http://ja.528p.com/
>
>>iptables -A FORWARD -s 192.168.1.0/24 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
>>iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to Global_IP
>
>試してみますが、こちらローカルから接続する時に必要となる設定のように見えます。
>
>>Global_IPは固定グローバルIPであるとする
>>HUBの下にサーバ以外のクライアントマシンが継っていると考えています
>
>Global_IPは確かに固定IPですが
>HUB以下にクライアントはありません。別セッションにて別ルータ以下にありますので
>完全に外部から接続しているのと変わりません。

サーバはプライベートIPだからローカルからグローバルへの接続でしょ
-m state --state ESTABLISHED,RELATEDで接続が確立したものだけ、返答を返します
ローカルからグローバルへの 新しい接続を許可するなら -m state --state NEW のチェーンもつくる必要があります

1台に限定したいなら、その固定IPをnetwork(192.168.1.0/24)のかわりに設定すれば良い
そのうち、HUB下に複数台設置する場合など、上記の用に設定すれば良いように思う

firewallに入ってくるものをeth1に限定したいなら、 -i eth1 を追記すればよい
(限定しない場合、全てと解釈される)
記事編集 編集
Re: iptablesでのローカルサーバ公開 このメッセージに返信する
日時: 2008/12/18 14:04
名前: くま
URL:
>サーバはプライベートIPだからローカルからグローバルへの接続でしょ
>-m state --state ESTABLISHED,RELATEDで接続が確立したものだけ、返答を返します

Server2(ローカルIP)からServer1(ローカル&グローバル)への接続ということで
SNAT設定が必要な事はわかりました。
ただ現状のServer1側に設定を追加しても正常に動作してくれず
他のサーバにて検証したところ動作してくれました・・。

過去Server1はKernelのオプションを変えてRebuildした事もあったので(内容忘れてますが)
そちらの影響もありそうです。

iptablesにて別サーバのApacheに接続した際(今回のようなケース)
アクセス元IPがServer1になってしまいますが、
DelegateのようにX-Forwarded-Forで元IPをリクエスト内に記述してもらう事は
iptablesでも可能なのでしょうか。

DelegateまたはSquidにて一度Server1で受けたのち、他のサーバへ転送
他のサーバのApacheにてmod_rpaf(アクセス制限考えたらmod_extract_forwarded?)にて元IPのログ取得
という方式に変更してみようと思います。

色々とありがとうございました。
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -