次のページ 前のページ 目次へ

3. もう、混乱して来た! ルーティングだの、マスカレーディングだの、ポートフォワーディングだの、自動フォワーディング(ipautofw)だのって…。

この HOWTO は、パケット・フィルタリングについて述べたものです。 それはパケットが通過するのを許すかどうかについて決めることを意味しています。 しかしながら、Linuxはいわばハッカー達の遊び場のようなものですので、おそらくそれ以上の機能を実現したいと思うことでしょう。

1つの問題は、本来別な概念であるはずのマスカレーディングと透過的なプロキシの制御のために同じツール (``ipchains'') が使われることです(現在の Linux での実装では、これらが不自然なかたちでいっしょになっており、あたかもそれらが密接に関連があるという印象を与えてしまいます)。

(訳注: カーネル 2.4.x 系では、これらの機能はさらに統合強化されています。 それらのカーネルをお使いの方は、Linux 2.4 NAT HOWTO( http://netfilter.kernelnotes.org/unreliable-guides/NAT-HOWTO.html)もご覧下さい。 JFプロジェクトによる邦訳( http://www.linux.or.jp/JF/JFdocs/NAT-HOWTO.html)もあります。)

マスカレーディングとプロキシについては別々の HOWTO 文書などによって網羅され、自動フォワーディングとポート・フォワーディング機能は別々のツールで制御されます。しかし、多くの人々からそれらについての問い合わせをうけていますので、ここでは一連の一般的とおもわれるシナリオいくつかと、どのようにすればよいかという設定を提示します。なお、各セットアップのセキュリティに関する長所については、ここで論議しません。

3.1 Rusty のマスカレーディングに関する 3つの指針

これは、あなたの外部インタフェースが `ppp0' であると仮定しています。 ifconfig コマンドをつかって、あなたの環境に合うように読み替えて下さい。

# ipchains -P forward DENY
# ipchains -A forward -i ppp0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward

3.2 自発的な宣伝: WatchGuard で規制する

市販のファイアウォール専用機を購入することもできます。 優れた専用機のひとつとして、WatchGuard 社の FireBox があります。 FireBox が優れていると思うのは、わたしが気に入っているからであり、それが安全だからであり、Linux ベースで動作しているからです。 また、この会社は、ipchains のメインテナンスと、(2.4 系カーネル用の)新しいファイアウォールのコードのために資金提供してくれたからです。 つまり、わたしが皆さんのために作業をしている間、 WatchGuard 社は、わたしの生活を支えてくれたわけです。 そういうわけで、彼らの製品についても御一考願います。

http://www.watchguard.com

(訳注: WatchGuard社の日本国内のリセラーも、このページから手繰ることができます。)

3.3 ファイアウォール的動作に共通な設定

あなたは、 littlecorp.com というドメイン名でシステムを動かしています。 そして内部ネットワークを持ち、インターネットに対して、IPアドレスが 1.2.3.4 である (firewall.littlecorp.com) というコンピュータに1回線のダイヤルアップ(PPP)コネクションを持っています。 あなたはイーサネットによるローカルネットワークを構築しており、あなたの個人用コンピュータは "myhost" と呼ばれています。

このセクションでは、一般的とおもわれるいくつかの配置例での設定について詳しく説明します。 それらは微妙に異なりますので、注意深く読み進めて下さい。

ローカルネットワーク: 伝統的なプロキシ

このシナリオでは、ローカルネットワークからのパケットは、インターネットを行き来することはありません。 ローカルネットワークの IP アドレスは、 RFC1918 にてプライベートなインターネット環境のために用意されているアドレス(すなわち 10.*.*.*, 172.16.*.*-172.31.*.* または 192.168.*.*)を割り当てなければなりません。

インターネットに接続する唯一の方法はファイアウォールに接続することで、このコンピュータが両方のネットワーク(訳注: インターネットとローカルネットワーク)に直接つながっています。 このファイアウォールの上でプロキシと呼ばれるソフトを動かすことになります(これは FTP 、ウェブ・アクセス、 telnet 、 RealAudio 、 Usenet News や他のサービスについて、"代理"として働きます)。 詳細については Firewall HOWTO を見ましょう。

(訳注: "Firewall HOWTO" の原文は http://www.linuxdoc.org/HOWTO/Firewall-HOWTO.html にあります。 JFプロジェクトによる邦訳はまだ作業中です。)

あなたがインターネットへのアクセスで望むサービスについては、必ずファイアウォール上のプロキシでサポートされたサービスでなければなりません(しかし、後述の 制限された内部サービス を参照して下さい)。

例: プライベートネットワークからインターネットへのウェブ・アクセスを許す

  1. プライベートネットワークは、192.168.1.*を割り当てられた複数の番地からなり、IPアドレスが192.168.1.100は"myhost"に、ファイアウォールのイーサネット・インタフェースには192.168.1.1が割り当てられています。
  2. ウェブ・プロキシ(例えば"squid")は、ファイアウォールの上にインストールされておりポート8080で動いています。
  3. プライベートネットワークのNetscapeは、プロキシとしてファイアウォールのポート8080を使うように設定されています。
  4. DNSは、プライベートネットワークの中で設定される必要はありません。
  5. DNSは、ファイアウォールの上で設定される必要があります。
  6. デフォルト・ルート(別名、ゲートウェイ)は、プライベートネットワークの中で設定される必要はありません。

myhost 上の Netscape から、 http://slashdot.org のページを見る

  1. Netscape はファイアウォールのポート8080に接続し、 myhost 上のポート1050を使って "http://slashdot.org" のウェブ・ページを見るようにファイアウォールに依頼します。
  2. プロキシは "slashdot.org" という名前を調べて、 "207.218.152.131" というIPアドレスを得ます。 それからファイアウォールの外部インタフェース(訳注: ppp0 など)の上でポート1025を使って、その IP アドレスに対してウェブ・サーバ(ポート80)でウェブ・ページを要求します。
  3. 相手のウェブ・サーバに対する接続からウェブ・ページを受け取ると、それはNetscapeへの接続へデータがコピーされます。
  4. Netscapeは、ページを表示します。

つまり、 slashdot.org の側から見ると、 1.2.3.4 (ファイアウォールの PPP インタフェース)ポート1025から、 207.218.152.131 (slashdot.org)ポート80まで接続されることになります。 myhost の側から見ると、 192.168.1.1 (ファイアウォールのイーサネット・インタフェース)のポート8080と 192.168.1.100(myhost)のポート1050が接続されることになります。

プライベートネットワーク: 透過的なプロキシ

このシナリオでは、ローカルネットワークからのパケットは、インターネットを行き来することはありません。 ローカルネットワークの IP アドレスは、 RFC1918 にてプライベートなインターネット環境のために用意されているアドレス(すなわち 10.*.*.* 、 172.16.*.*-172.31.*.* または 192.168.*.*)を割り当てなければなりません。

インターネットに接続する唯一の方法はファイアウォールに接続することで、このコンピュータが両方のネットワーク(訳注: インターネットとローカルネットワーク)に直接つながっています。 このファイアウォールの上で"透過的なプロキシ"と呼ばれるソフトを動かすことになりますが、ここではカーネルが出力パケットを外部に送る代りに、透過的なプロキシに送り出すことになります (すなわち、偽のルーティングを行うようになります)。

透過的なプロキシを動かすということは、クライアントはプロキシの存在を意識しなくてもよいということです。

あなたがインターネットへのアクセスで望むサービスについては、必ずファイアウォール上のプロキシでサポートされたサービスでなければなりません(しかし、後述の 制限された内部サービス を参照して下さい)。

例: プライベートネットワークからインターネットへのウェブ・アクセスを許す

  1. プライベートネットワークは、 192.168.1.* を割り当てられた複数の番地からなり、 IP アドレスが 192.168.1.100 は myhost に、ファイアウォールのイーサネット・インタフェースには 192.168.1.1 が割り当てられています。
  2. 透過的なウェブ・プロキシ(squid に対するこの用途のためのパッチがいくつかあると思います。あるいは "transproxy" を試すのもいいかも)はインストールされて、ファイアウォールの上でポート8080にて動いています。
  3. カーネルは ipchains を使ってポート80の接続をプロキシに向けなおすように指示されています。
  4. プライベートネットワークの Netscape は、あたかも直接接続するように設定します。
  5. DNS は、プライベートネットワーク上に設定されている必要があります(すなわち、あなたはファイアウォールの上での「代理」として DNS サーバを実行する必要があります)。 (訳注: つまり、クライアントからの名前解決の処理をすべてプライベートネットワーク内の DNS で賄わなければならないということです。 さもないと、名前解決のためのパケットがクライアントからインターネットに出てしまいます。)
  6. ファイアウォールにパケットを送るためにプライベートネットワーク内にデフォルト・ルート(別名、ゲートウェイ)を設定する必要があります。

myhost の Netscape から、http://slashdot.org を見る。

  1. Netscapeは、 "slashdot.org" という名前を調べて、 207.218.152.131 という IP アドレスを得ます。そして、その IP アドレスに対してポート1050にて接続し、ウェブサーバ(ポート80)へページデータを要求します。
  2. slashdot.org (ポート80)への myhost (ポート1050)からのパケットはファイアウォールを経由しますが、それらはポート8080の上で待っている透過的なプロキシに向け直されます。 透過的なプロキシは、 207.218.152.131 のポート80(もともとクライアントからのパケットに指定されていた宛先)に対して、(ローカルなポート1025を使って)接続を行います。
  3. プロキシはその接続によってウェブ・サーバからページを受け取り、 Netscape に対する接続にそのデータをコピーします。
  4. Netscapeは、ページを表示します。

つまり、 slashdot.org から見ると、接続はは 1.2.3.4 (ファイアウォールの PPP インタフェース)ポート1025から、 207.218.152.131 (slashdot.org)のポート80までの間で行われています。 myhost から見ると、 207.218.152.131 (slashdot.org)のポート80に対して、 192.168.1.100 (myhost)ポート1050までの間で行われています。 が、それは実際には透過的なプロキシとやり取りしていることになります。

プライベートネットワーク: マスカレーディング

このシナリオでは、ローカルネットワークからのパケットは、特別な扱いがなければインターネットを行き来することはありません。 ローカルネットワークの IP アドレスは、 RFC1918 にてプライベートなインターネット環境のために用意されているアドレス(すなわち 10.*.*.* 、 172.16.*.*-172.31.*.* または 192.168.*.*)を割り当てなければなりません。

プロキシを使う代わりに、 "マスカレーディング" と呼ばれる特別なカーネル機能を使います。 マスカレーディングは、ファイアウォールを経由したかのようにパケットを書き換えるので、これらのパケットは常にファイアウォール自身からきたように見えます。 それから、応答を本来の要求元へ送るように書き換えます。

マスカレーディングはいくつかの "トリッキーな" プロトコルを扱うための個別のモジュールを持っています。 例えば、FTP, RealAudio, Quake などです。 本当に取り扱いが難しいプロトコルのためには、 "自動フォワーディング" 機能にて、関連したポートの転送を自動的に設定することにより、それらの一部を取り扱うことができます。 詳細については ``ipportfw'' (2.0系カーネル)または ``ipmasqadm'' (2.1系カーネル)を調べてみて下さい。

あなたがインターネットへのアクセスで望むサービスについては、必ずファイアウォール上のプロキシでサポートされたサービスでなければなりません(しかし、後述の 制限された内部サービス を参照して下さい)。

例: プライベートネットワークからインターネットへのウェブ・アクセスを許す

  1. プライベートネットワークは、 192.168.1.* 上の複数の番地からなり、 myhost には 192.168.1.100 が割り当てられ、ファイアウォールのイーサネットインターフェースには 192.168.1.1 が割り当てられています。
  2. ファイアウォールは、プライベートネットワークからインターネットの上のホストのポート80へのすべてのパケットをマスカレードするよう設定されています。
  3. Netscape は、直接接続するように設定されています。
  4. DNS は、プライベートネットワークの上で正しく設定されていなければなりません。
  5. ファイアウォールは、プライベートネットワークのためのデフォルト・ルート(別名、ゲートウェイ)でなければなりません。

myhost の Netscape から、 http://slashdot.org を読む。

  1. Netscape は、 "slashdot.org" という名前を調べて、 207.218.152.131 という IP アドレスを得ます。 それからローカルなポート1050を使って、その IP アドレスのウェブ・サーバ(ポート80)に対して接続を行い、ウェブ・ページを要求します。
  2. slashdot.org (ポート80)への myhost (ポート1050)からのパケットはファイアウォールに渡され、そこでファイアウォール(ポート65000)の PPP インタフェースから来たかのように書き直されます。 slashdot.org からの応答パケットを返すことが可能となるように、ファイアウォールは有効なインターネットアドレス(1.2.3.4)を持っています。
  3. firewall.littlecorp.com (ポート65000)に対して slashdot.org (ポート80)からのパケットが返され、それらを myhost (ポート1050)へ送るために書き直されます。 マスカレーディングを実現するための "魔法" の正体というのは、つまり、応答が来たときに、それを正しく戻せるように、出力パケットを書き換えるときに覚えておくということです。
  4. Netscapeは、ページを表示します。

slashdot.org の側から見ると、接続は 1.2.3.4 (ファイアウォールの PPP インタフェース)ポート65000から、 207.218.152.131 (slashdot.org)ポート80まで行われています。 myhost の側から見ると、接続は 207.218.152.131 (slashdot.org)ポート80に対して、 192.168.1.100 (myhost)ポート1050から行われています。

パブリックネットワーク

このシナリオでは、あなたの個人のネットワークはインターネットの一部分です: パケットは変更されることなく両方のネットワークを流れることができます。 内部ネットワークの IP アドレスは、 IP アドレスのブロックを申請することによって割り当てられたもののはずですので、他のネットワークは、どうやってあなたの元へパケットを届けられるかを知っているでしょう。 これは継続的に接続されることを意味しています。

(訳注: 例えば、 INTERNIC や JPNIC などに対する正しい手続きによって得られた継続的に使用できる IP アドレスをあなたが所有していなければならないということです。)

この場面でパケット・フィルタリングは、どのようなパケットがあなたのネットワークとそれ以外のインターネットとの間でやり取りされるかを制限するためなどに使われます。 例えば、インターネットの他の場所とのパケットのやり取りをあなたのウェブサーバに対してのみに限定させることができます。

プライベートネットワークからインターネットへのウェブ・アクセスを許す

  1. あなたの内部ネットワークは、あなたが登録した IP アドレス・ブロック(1.2.3.* とします)に応じたアドレスが割り当てられています。
  2. ファイアウォールは、全てのトラフィックを許すよう設定されています。 (訳注: ここで示されたシナリオは説明のための便宜的なケースです。 実際のケースでは、次の節("内部サービスの限定")で示されたように、サービスを限定するなど、あなたのネットワークを守るために、出入りするパケットについて適切な許可/拒否のための条件を設定しておかなければなりません。)
  3. Netscapeは、インターネットに直接接続するように設定されています。
  4. DNSは、あなたのネットワークの上で正しく設定されていなければなりません。
  5. ファイアウォールは、プライベートネットワークのためのデフォルト・ルート(ゲートウェイ)でなければなりません。

myhost の Netscape から、http://slashdot.org を見る。

  1. Netscapeは、 "slashdot.org" という名前を調べて、 207.218.152.131 という IP アドレスを得ます。 それからローカルなポート1050を使って、その IP アドレスのウェブ・サーバ(ポート80)に対して接続を行い、ウェブ・ページを要求します。
  2. パケットはあなたのネットワークと slashdot.org の間の他のいくつかのルーターを通り抜けるのと同じように、あなたのファイアウォールを通り抜けてやり取りされます。
  3. Netscapeは、ページを表示します。

つまり、この場合は 207.218.152.131 (slashdot.org)ポート80と、 1.2.3.100 (myhost)ポート1050の間のただひとつだけの接続が存在します。

制限された内部サービス

外のインターネットからあなたの内部サービスに対して、ファイアウォール上でサービスを実行する以外の方法をとることのできるトリックが少しばかりあります。 それらの方法ではプロキシやマスカレーディングを外部のコネクションのために使用するというアプローチをとります。

最も単純なアプローチは "リダイレクター" (それは与えられたポートの上で接続を待つという"貧弱な"プロキシです)を動作させることです。 それらはあらかじめ決められた内部ホストとポートに対して接続を行い、データを二つの接続の間でコピーします。 "redir" プログラムを使った例を示すと、外のインターネット側から見ると、接続はあなたのファイアウォールに対して行われます。 中のサーバの側から見ると、ファイアウォールとそのサーバに対して接続が行われるようになります。

もう一つのアプローチ(これには ipportfw のためにパッチを当てられた 2.0 系カーネルか、あるいは 2.1 系以降のカーネルが必要です)はカーネルでのポート・フォワーディングを使うことです。 これは、 "redir" と同じ動作を別な方法で行います。 つまり、カーネルは渡されたパケットに対して、その目的アドレスとポートを内部のホストとポートに対して向けられたように書き換えます。 外のインターネット側から見ると、あなたのファイアウォールに対して接続されたように見えます。 また、あなたの内部のサーバ側から見ると、インターネット・ホストからサーバまで直接接続されているように見えます。

3.4 マスカレーディングに対するその他の情報

David Ranch はマスカレーディングに関する優れた新しい HOWTO を書きました。 この HOWTO とは多くの重複部分を持ちますが、次のページから見つけることができます。

http://www.linuxdoc.org/HOWTO/IP-Masquerade-HOWTO.html

マスカレーディングの公式ページは次のとおりです。

http://ipmasq.cjb.net


次のページ 前のページ 目次へ