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

7. 実用的な例

この範例は、1999 年の 3 月に開催された LinuxWorld で Michael Neuling と私が発表したチュートリアルから引用しました。これは、与えられた問 題を解決するための唯一の方法ではないですが、多分最も単純なものです。 この範例を有益なものだと思って頂ければ幸いです。

7.1 構成

   外部ネットワーク (BAD)
           │
           │
       ppp0│
   ┌───────┐
   │192.84.219.1  │             サーバネットワーク (DMZ)
   │              │eth0
   │              │───────┬──────┬──────┬─
   │              │192.84.219.250│            │            │
   │              │              │            │            │ 
   │192.168.1.250 │              │            │            │   
   └───────┘          ┌───┐    ┌───┐    ┌───┐   
           │ eth1             │ SMTP │    │ DNS  │    │ WWW  │
           │                  └───┘    └───┘    └───┘
           │              192.84.219.128  192.84.219.129  192.84.218.130
           │
   内部ネットワーク (GOOD)

7.2 目的

パケットフィルターマシン:

全てのネットワークに対して PING が可能

マシンがダウンしているかどうかを知るのに大変役に立ちます。

全てのネットワークに対して TRACEROUTE が可能

これもまた、原因分析に役に立ちます。

DNS へのアクセスが可能

ping と DNS をより使いやすくするためです。

DMZ 内:

メールサーバ

ネームサーバ

ウェブサーバ

内部ネットワーク:

外部ネットワークへの WWW, ftp ,traceroute, ssh を許可する

これらは、許可の対象としてはかなり標準的なことです。内部ネッ トワーク上のマシンに対してほぼ全てを許可することから始めます が、ここでは制限をかけています。

メールサーバへの SMTP を許可する

当然、メールは外部へ送信できるようにしたいです。

メールサーバへの POP-3 を許可する

メールを読む方法です。

ネームサーバへの DNS を許可する

WWW と ftp, traceroute, ssh を利用する際に、外部ネームの検索 をするのに必要です。

ウェブサーバへの rsync を許可する

外部向けウェブサーバと内部ウェブサーバを同期させる方法です。

ウェブサーバへの WWW を許可する

当然、外部向けウェブサーバへ接続できるべきです。

パケットフィルターマシンへの ping を許可する

これは、一般的に広く容認されていることです。つまりファイア ウォールマシンがダウンしているかどうかを、確認できるように するためです(それで外部サイトが壊れていた場合は、非難されま せんので)。

7.3 パケットフィルタリングを行う前に

7.4 パケットを通過させるためのパケットフィルタリング

マスカレードを使用して、forward チェインでフィルターをかけることは 最良の方法です。

forward チェインをソース/あて先 インターフェースに合わせて様々なユ ーザ定義チェインに分割して下さい。つまり、問題を取扱いやすい単位 に分解するのです。

ipchains -N good-dmz
ipchains -N bad-dmz
ipchains -N good-bad
ipchains -N dmz-good
ipchains -N dmz-bad
ipchains -N bad-good

ICMP の標準エラーをアクセプトすることは、共通の内容です。したがって、 そのためのチェインを作ります。

ipchains -N icmp-acc

forward チェインからジャンプさせる

残念なことに、(forward チェインでは)出力インターフェースしか分かり ません。したがって、パケットがどのインターフェースから入ってくるか を見抜くために、ソースアドレスを使用します(偽装保護がアドレスのな りすましを防いでいるので大丈夫です)。

これらのいずれにもマッチしないパケット(明らかに、そのようなことは起 こらないはずですが)は全てログを取ることに注意して下さい。

ipchains -A forward -s 192.168.1.0/24 -i eth0 -j good-dmz
ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j good-bad
ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j dmz-bad
ipchains -A forward -s 192.84.219.0/24 -i eth1 -j dmz-good
ipchains -A forward -i eth0 -j bad-dmz
ipchains -A forward -i eth1 -j bad-good
ipchains -A forward -j DENY -l

icmp-acc チェインを定義する

パケットが(以下の)エラー ICMP のいずれかならアクセプトされます。 さもなければ、マッチしなかったパケットに対する制御は icmp-acc チェイン から抜けて、呼出し元のチェインに戻されることになります。

ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT

GOOD (内部ネットワーク) から DMZ (サーバネットワーク)

内部ネットワークに対する制限 :

内部ネットワークから DMZ の際にマスカレードはできますが、ここでは行 いません。内部ネットワーク上のどのマシンも悪意のあることをしないは ずなので、拒否される全てのパケットのログを取ります。

Debian の古いバージョンでは、/etc/services 上の `pop3' を`pop-3' と 呼ぶので注意して下さい。このことは RFC1700 と一致していません。

   
ipchains -A good-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.219.128 pop3 -j ACCEPT
ipchains -A good-dmz -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.218.130 rsync -j ACCEPT
ipchains -A good-dmz -p icmp -j icmp-acc
ipchains -A good-dmz -j DENY -l

BAD (外部ネットワーク)から DMZ (サーバネットワーク)

GOOD (内部ネットワーク)から BAD (外部ネットワーク)

DMZ から GOOD (内部ネットワーク)

DMZ から BAD (外部ネットワーク)

BAD (外部ネットワーク)から GOOD (内部ネットワーク)

Linux マシン自身に対するパケットフィルタリング

BAD (外部ネットワーク) インターフェース

DMZ インタフェース

GOOD (内部ネットワーク)インターフェース

7.5 最後に


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