この 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 文書などによって網羅され、自動フォワーディングとポート・フォワーディング機能は別々のツールで制御されます。しかし、多くの人々からそれらについての問い合わせをうけていますので、ここでは一連の一般的とおもわれるシナリオいくつかと、どのようにすればよいかという設定を提示します。なお、各セットアップのセキュリティに関する長所については、ここで論議しません。
これは、あなたの外部インタフェースが `ppp0' であると仮定しています。 ifconfig コマンドをつかって、あなたの環境に合うように読み替えて下さい。
# ipchains -P forward DENY
# ipchains -A forward -i ppp0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward
市販のファイアウォール専用機を購入することもできます。 優れた専用機のひとつとして、WatchGuard 社の FireBox があります。 FireBox が優れていると思うのは、わたしが気に入っているからであり、それが安全だからであり、Linux ベースで動作しているからです。 また、この会社は、ipchains のメインテナンスと、(2.4 系カーネル用の)新しいファイアウォールのコードのために資金提供してくれたからです。 つまり、わたしが皆さんのために作業をしている間、 WatchGuard 社は、わたしの生活を支えてくれたわけです。 そういうわけで、彼らの製品についても御一考願います。
(訳注: WatchGuard社の日本国内のリセラーも、このページから手繰ることができます。)
あなたは、 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プロジェクトによる邦訳はまだ作業中です。)
あなたがインターネットへのアクセスで望むサービスについては、必ずファイアウォール上のプロキシでサポートされたサービスでなければなりません(しかし、後述の 制限された内部サービス を参照して下さい)。
例: プライベートネットワークからインターネットへのウェブ・アクセスを許す
myhost 上の Netscape から、 http://slashdot.org のページを見る
つまり、 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.*.*)を割り当てなければなりません。
インターネットに接続する唯一の方法はファイアウォールに接続することで、このコンピュータが両方のネットワーク(訳注: インターネットとローカルネットワーク)に直接つながっています。 このファイアウォールの上で"透過的なプロキシ"と呼ばれるソフトを動かすことになりますが、ここではカーネルが出力パケットを外部に送る代りに、透過的なプロキシに送り出すことになります (すなわち、偽のルーティングを行うようになります)。
透過的なプロキシを動かすということは、クライアントはプロキシの存在を意識しなくてもよいということです。
あなたがインターネットへのアクセスで望むサービスについては、必ずファイアウォール上のプロキシでサポートされたサービスでなければなりません(しかし、後述の 制限された内部サービス を参照して下さい)。
例: プライベートネットワークからインターネットへのウェブ・アクセスを許す
myhost の Netscape から、http://slashdot.org を見る。
つまり、 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系カーネル)を調べてみて下さい。
あなたがインターネットへのアクセスで望むサービスについては、必ずファイアウォール上のプロキシでサポートされたサービスでなければなりません(しかし、後述の 制限された内部サービス を参照して下さい)。
例: プライベートネットワークからインターネットへのウェブ・アクセスを許す
myhost の Netscape から、 http://slashdot.org を読む。
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 アドレスをあなたが所有していなければならないということです。)
この場面でパケット・フィルタリングは、どのようなパケットがあなたのネットワークとそれ以外のインターネットとの間でやり取りされるかを制限するためなどに使われます。 例えば、インターネットの他の場所とのパケットのやり取りをあなたのウェブサーバに対してのみに限定させることができます。
プライベートネットワークからインターネットへのウェブ・アクセスを許す
myhost の Netscape から、http://slashdot.org を見る。
つまり、この場合は 207.218.152.131 (slashdot.org)ポート80と、 1.2.3.100 (myhost)ポート1050の間のただひとつだけの接続が存在します。
外のインターネットからあなたの内部サービスに対して、ファイアウォール上でサービスを実行する以外の方法をとることのできるトリックが少しばかりあります。 それらの方法ではプロキシやマスカレーディングを外部のコネクションのために使用するというアプローチをとります。
最も単純なアプローチは "リダイレクター" (それは与えられたポートの上で接続を待つという"貧弱な"プロキシです)を動作させることです。 それらはあらかじめ決められた内部ホストとポートに対して接続を行い、データを二つの接続の間でコピーします。 "redir" プログラムを使った例を示すと、外のインターネット側から見ると、接続はあなたのファイアウォールに対して行われます。 中のサーバの側から見ると、ファイアウォールとそのサーバに対して接続が行われるようになります。
もう一つのアプローチ(これには ipportfw のためにパッチを当てられた 2.0 系カーネルか、あるいは 2.1 系以降のカーネルが必要です)はカーネルでのポート・フォワーディングを使うことです。 これは、 "redir" と同じ動作を別な方法で行います。 つまり、カーネルは渡されたパケットに対して、その目的アドレスとポートを内部のホストとポートに対して向けられたように書き換えます。 外のインターネット側から見ると、あなたのファイアウォールに対して接続されたように見えます。 また、あなたの内部のサーバ側から見ると、インターネット・ホストからサーバまで直接接続されているように見えます。
David Ranch はマスカレーディングに関する優れた新しい HOWTO を書きました。 この HOWTO とは多くの重複部分を持ちますが、次のページから見つけることができます。
http://www.linuxdoc.org/HOWTO/IP-Masquerade-HOWTO.html
マスカレーディングの公式ページは次のとおりです。