| |
次のページ
前のページ
目次へ
この範例は、1999 年の 3 月に開催された LinuxWorld で Michael Neuling
と私が発表したチュートリアルから引用しました。これは、与えられた問
題を解決するための唯一の方法ではないですが、多分最も単純なものです。
この範例を有益なものだと思って頂ければ幸いです。
- マスカレードされた内部ネットワーク(様々な OS が存在しています)
が存在し、"GOOD" と呼びます。
- 分離されたネットワーク上に公開サーバが存在しています(非武装化
地帯 "Demilitarized Zone" ということで "DMZ" と呼びます)。
- インターネットへ PPP 接続しています( "BAD" と呼びます)。
外部ネットワーク (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)
パケットフィルターマシン:
- 全てのネットワークに対して PING が可能
マシンがダウンしているかどうかを知るのに大変役に立ちます。
- 全てのネットワークに対して TRACEROUTE が可能
これもまた、原因分析に役に立ちます。
- DNS へのアクセスが可能
ping と DNS をより使いやすくするためです。
DMZ 内:
メールサーバ
- 外部ネットワークへの SMTP が可能
- 内部と外部ネットワークからの SMTP のアクセプト(受け入れ)が可能
- 内部ネットワークからの POP-3 のアクセプトが可能
ネームサーバ
- 外部ネットワークへの DNS の要求が可能
- 内部と外部ネットワーク、パケットフィルターマシンからの DNS の
アクセプトが可能
ウェブサーバ
- 内部と外部ネットワークからの HTTP のアクセプトが可能
- 内部ネットワークからの Rsync によるアクセスが可能
内部ネットワーク:
- 外部ネットワークへの WWW, ftp ,traceroute, ssh を許可する
これらは、許可の対象としてはかなり標準的なことです。内部ネッ
トワーク上のマシンに対してほぼ全てを許可することから始めます
が、ここでは制限をかけています。
- メールサーバへの SMTP を許可する
当然、メールは外部へ送信できるようにしたいです。
- メールサーバへの POP-3 を許可する
メールを読む方法です。
- ネームサーバへの DNS を許可する
WWW と ftp, traceroute, ssh を利用する際に、外部ネームの検索
をするのに必要です。
- ウェブサーバへの rsync を許可する
外部向けウェブサーバと内部ウェブサーバを同期させる方法です。
- ウェブサーバへの WWW を許可する
当然、外部向けウェブサーバへ接続できるべきです。
- パケットフィルターマシンへの ping を許可する
これは、一般的に広く容認されていることです。つまりファイア
ウォールマシンがダウンしているかどうかを、確認できるように
するためです(それで外部サイトが壊れていた場合は、非難されま
せんので)。
- IP 偽装保護 (Anti-spoofing)
いかなる非対称のルーティングも持っていないので、全てのインター
フェースに対して IP 偽装保護を単にオンできます。
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
#
- フィルタリングのルールとして全てを拒否にする
今まで通りローカルのループバックトラフィックは許可しますが、それ以外
の全てを拒否します。
# ipchains -A input -i ! lo -j DENY
# ipchains -A output -i ! lo -j DENY
# ipchains -A forward -j DENY
#
- インターフェースのセットアップ
インターフェースのセットアップは、大抵ブート時のスクリプト
で実行されます。フィルタリングのルールが適用される前にパケット
が漏れだすことを防ぐ為に、インターフェースが設定される前に上記
のステップが実行されていることを確認して下さい。
- プロトコル別にマスカレードモジュールを組み込む
FTP を利用する際には、マスカレードモジュールを組み込む必要があ
ります。そうすることで、内部ネットワークからのアクティブとパッ
シブ FTP が `ちゃんと動作します'。
# insmod ip_masq_ftp
#
マスカレードを使用して、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 (サーバネットワーク)
内部ネットワークに対する制限 :
- 外部ネットワークへの WWW, ftp, traceroute, ssh を許可する
- メールサーバへの SMTP を許可する
- メールサーバへの POP-3 を許可する
- ネームサーバへの DNS を許可する
- ウェブサーバへの rsync を許可する
- ウェブサーバへの WWW を許可する
- パケットフィルターマシンへの ping を許可する
内部ネットワークから 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 (サーバネットワーク)
- DMZ に対する制限:
- メールサーバ
- 外部ネットワークへの SMTP が可能
- 内部と外部ネットワークからの SMTP のアクセプトが可能
- 内部ネットワークからの POP-3 のアクセプトが可能
- ネームサーバ
- 外部ネットワークへの DNS の要求が可能
- 内部と外部ネットワーク、パケットフィルターマシンから
の DNS のアクセプトが可能
- ウェブサーバ
- 内部と外部ネットワークからの HTTP のアクセプトが可能
- 内部ネットワークからの Rsync のアクセプトが可能
- 外部ネットワークから DMZ へ許可すること
ipchains -A bad-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A bad-dmz -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bad-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bad-dmz -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A bad-dmz -p icmp -j icmp-acc
ipchains -A bad-dmz -j DENY
GOOD (内部ネットワーク)から BAD (外部ネットワーク)
- 内部ネットワークに対する制限:
- 外部ネットワークへの WWW, ftp ,traceroute, ssh を許可する
- メールサーバへの SMTP を許可する
- メールサーバへの POP-3 を許可する
- ネームサーバへの DNS を許可する
- ウェブサーバへの rsync を許可する
- ウェブサーバへの WWW を許可する
- パケットフィルターマシンへの ping を許可する
- 一般に、内部ネットワークから外部ネットワークに対しては、
全てを許可し、それから制限を加えます。我々は、ファシストなのです。
- 侵害行為のログを取る
- パッシブ FTP は、マスカレードモジュールで処理する
- UDP の あて先ポート 33434 以降 は traceroute で使用される
ipchains -A good-bad -p tcp --dport www -j MASQ
ipchains -A good-bad -p tcp --dport ssh -j MASQ
ipchains -A good-bad -p udp --dport 33434:33500 -j MASQ
ipchains -A good-bad -p tcp --dport ftp -j MASQ
ipchains -A good-bad -p icmp --icmp-type ping -j MASQ
ipchains -A good-bad -j REJECT -l
DMZ から GOOD (内部ネットワーク)
- 内部ネットワークに対する制限:
- 外部ネットワークへの WWW, ftp ,traceroute, ssh を許可する
- メールサーバへの SMTP を許可する
- メールサーバへの POP-3 を許可する
- ネームサーバへの DNS を許可する
- ウェブサーバへの rsync を許可する
- ウェブサーバへの WWW を許可する
- パケットフィルターマシンへの ping を許可する
- 内部ネットワークから DMZ の際にマスカレードする場合、単にそれ以
外のパケットを拒否して下さい。実のところ、単にコネクションが
確立された一部のパケットのみ許可するだけです。
ipchains -A dmz-good -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT
ipchains -A dmz-good -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-good -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT
ipchains -A dmz-good -p icmp -j icmp-acc
ipchains -A dmz-good -j DENY -l
DMZ から BAD (外部ネットワーク)
- DMZ に対する制限:
- メールサーバ
- 外部ネットワークへの SMTP が可能
- 内部と外部ネットワークからの SMTP のアクセプトが可能
- 外部ネットワークからの POP-3 のアクセプトが可能
- ネームサーバ
- 外部ネットワークへの DNS の送信が可能
- 内部と外部ネットワーク、パケットフィルターマシンから
の DNS のアクセプトが可能
- ウェブサーバ
- 内部と外部ネットワークからの HTTP のアクセプトが可能
- 内部ネットワークからの Rsync のアクセプトが可能
-
ipchains -A dmz-bad -p tcp -s 192.84.219.128 smtp -j ACCEPT
ipchains -A dmz-bad -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-bad -p tcp -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-bad -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains -A dmz-bad -p icmp -j icmp-acc
ipchains -A dmz-bad -j DENY -l
BAD (外部ネットワーク)から GOOD (内部ネットワーク)
- 外部ネットワークから内部ネットワークへ入って来るもの全て(マスカ
レードされていないもの)を許可しません。
ipchains -A bad-good -j REJECT
Linux マシン自身に対するパケットフィルタリング
- パケットフィルターマシン自身に入って来るパケッットにも、パケッ
トフィルタリングを行いたいなら、input チェインでパケットフィル
タリングを行う必要があります。あて先インターフェース毎に、一つ
チェインを作ります。
ipchains -N bad-if
ipchains -N dmz-if
ipchains -N good-if
- 作ったチェインにジャンプさせます。
ipchains -A input -d 192.84.219.1 -j bad-if
ipchains -A input -d 192.84.219.250 -j dmz-if
ipchains -A input -d 192.168.1.250 -j good-if
BAD (外部ネットワーク) インターフェース
- パケットフィルターマシン:
- 全てのネットワークに対して PING が可能
- 全てのネットワークに対して TRACEROUTE が可能
- DNS へのアクセスが可能
- また外部ネットワーク用のインターフェースは、マスカレードされた
パケット(マスカレードは、ソースポートとして 61000 から 65095 を
使用します)へのリプライと ICMP エラー、PING のリプライも受け入
れます。
ipchains -A bad-if -i ! ppp0 -j DENY -l
ipchains -A bad-if -p TCP --dport 61000:65095 -j ACCEPT
ipchains -A bad-if -p UDP --dport 61000:65095 -j ACCEPT
ipchains -A bad-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A bad-if -j icmp-acc
ipchains -A bad-if -j DENY
DMZ インタフェース
- パケットフィルターマシンに対する制限:
- 全てのネットワークに対して PING が可能
- 全てのネットワークに対して TRACEROUTE が可能
- DNS へのアクセスが可能
- DMZ インターフェースは、DNS からのリプライと ping のリプライ、
エラー ICMP を受け入れます。
ipchains -A dmz-if -i ! eth0 -j DENY
ipchains -A dmz-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT
ipchains -A dmz-if -p UDP -s 192.84.219.129 53 -j ACCEPT
ipchains -A dmz-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A dmz-if -j icmp-acc
ipchains -A dmz-if -j DENY -l
GOOD (内部ネットワーク)インターフェース
- パケットフィルターマシンに対する制限:
- 全てのネットワークに対して PING が可能
- 全てのネットワークに対して TRACEROUTE が可能
- DNS へのアクセスが可能
- 内部ネットワークに対する制限:
- 外部ネットワークへの WWW, ftp ,traceroute, ssh を許可する
- メールサーバへの SMTP を許可する
- メールサーバへの POP-3 を許可する
- ネームサーバへの DNS を許可する
- ウェブサーバへの rsync を許可する
- ウェブサーバへの WWW を許可する
- パケットフィルターマシンへの ping を許可する
- 内部ネットワークインターフェースは、ping と ping のリプライ、
エラー ICMP を受け入れます。
ipchains -A good-if -i ! eth1 -j DENY
ipchains -A good-if -p ICMP --icmp-type ping -j ACCEPT
ipchains -A good-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A good-if -j icmp-acc
ipchains -A good-if -j DENY -l
- ブロッキングのルールを削除します。
ipchains -D input 1
ipchains -D forward 1
ipchains -D output 1
次のページ
前のページ
目次へ
|