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

7. 実用的な例

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

7.1 構成

  • マスカレードされた内部ネットワーク(様々な 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)

7.2 目的

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

全てのネットワークに対して 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 を許可する

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

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

  • 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
    #
    

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 (サーバネットワーク)

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

  • 外部ネットワークへの 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
    

7.5 最後に

  • ブロッキングのルールを削除します。
    ipchains -D input 1
    ipchains -D forward 1
    ipchains -D output 1
    


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

[