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

8. IP フィルタリングの設定(IPCHAINS)

Linux の ipchains は、 Linux IPv4 firewalling コードと ipfwadm を 書き換えたものです。 ipfwadm は BSD の ipfw を書き換えたものだったと思います。 ipchains は Linux のカーネル 2.1.102 以降で IP パケットフィルタを 管理するのに必要です。

以前のコードはフラグメント【訳注: fragment: 断片化されたパケット】を 扱えませんし、 (少なくとも Intel 用では) 32 ビットのカウンタしかありませんし、 TCP/UDP/ICMP 以外の仕様のプロトコルを考慮していませんし、 アトミック(瞬間的)に大きく(ルールを)変更することもできませんし、 逆ルールを満たせませんし、いくつか妙な癖がありましたし、 管理しにくい (ユーザのミスを招きやすい) ものだったと 作者は言っています。

【訳注: この一節は IPCHAINS-HOWTO 第一章 1.2 なぜ? と殆ど同じです。】

私は ipchains を使ったファイアウォールの制御について、ここで深くは述べる つもりはありません。 この件についてはとてもよく出来た HOWTO が次のところにありますから、 ここでは基本についてだけ述べます。 http://netfilter.samba.org/ipchains/HOWTO.htmlに HOWTO があります。

チェインは名前で扱います。 まず、input, output そして forward という組み込み済みチェインがあり、 これらは削除できません。 自分でチェインを作ることができます。 そして、これらのチェインのルールセットに対してルールを追加したり 削除していくことができます。

全てのチェインに対して行える操作は以下の通りです -

  1. 新しいチェインを作る (-N).
  2. 空のチェインを削除する (-X).
  3. 組み込みチェインのポリシーを変更する (-P).
  4. チェインにあるルールをリストする (-L).
  5. チェインのルールを全て消します (-F).
  6. チェインにある全てのルールのパケットとバイト数のカウンタをゼロにする (-Z).

チェイン内部でルールを操作するにはいくつかの方法があります -

  1. チェインに新しいルールを加える (-A).
  2. チェインの適当な場所に新しいルールを入れる (-I).
  3. チェインの適当な場所でルールを置き換える (-R).
  4. チェインの適当な場所でルールを削除する (-D).
  5. チェインに適合する最初のルールを削除する (-D).

ipchains はマスカレーディングの操作の置場所としても良い所なので、 この為の操作がいくつかあります -

  1. 現在のマスカレードされた接続をリストする (-M -L).
  2. マスカレードのタイムアウト値を設定する (-M -S).

ファイアウォールルールの変更に関してはタイミングの問題がいくつかあります。 注意深くやらないと、変更している間に不完全なところからパケットを 通してしまいます。 もっとも単純な方法は次のようにすることです -

     # ipchains -I input 1 -j DENY
     # ipchains -I output 1 -j DENY
     # ipchains -I forward 1 -j DENY

... 変更します ...

     # ipchains -D input 1
     # ipchains -D output 1
     # ipchains -D forward 1
     # 

この方法は、変更している間に全てのパケットを落します。

これは ipchains について、これまで述べたファイアウォールルールを まとめたものです。

#!/bin/sh
#
# rc.firewall の記述。
#
## 全てを破棄して最初から始動する。
  /sbin/ipchains -F input
  /sbin/ipchains -F output
  /sbin/ipchains -F forward

## HTTP 透過プロキシに対してリダイレクトする。
  #$IPCHAINS  -A input -p tcp -s 192.1.2.0/24 -d 0.0.0.0/0 80 -j REDIRECT 8080

## あなた自身のチェインを作る。
  /sbin/ipchains -N my-chain
  # サーバに来る email を許可する。
  /sbin/ipchains -A my-chain -s 0.0.0.0/0 smtp -d 192.1.2.10 1024:-j ACCEPT
  # 外側の email サーバに email 接続を許可する。
  /sbin/ipchains -A my-chain -s 192.1.2.10 -d 0.0.0.0/0 smtp -j ACCEPT  
  # あなたの web サーバに Web 接続を許可する。
  /sbin/ipchains -A my-chain -s 0.0.0.0/0 www -d 192.1.2.11 1024: -j ACCEPT
  # 外側の Web サーバに Web 接続を許可する。
  /sbin/ipchains -A my-chain -s 192.1.2.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT
  # DNS トラフィックを許可する。
  /sbin/ipchains -A my-chain -p UDP -s 0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT

## マスカレードを使っているなら、
  # 内側から内側へのトラフィックをマスクしない。
  /sbin/ipchains -A forward -s 192.1.2.0/24 -d 192.1.2.0/24 -j ACCEPT
  # 外部インターフェースを直接マスクしない。
  /sbin/ipchains -A forward -s 24.94.1.0/24 -d 0.0.0.0/0 -j ACCEPT
  # 外側に向かう全ての内部 IP をマスカレードする。
  /sbin/ipchains -A forward -s 192.1.2.0/24 -d 0.0.0.0/0 -j MASQ

## 全てを不許可にする。
  /sbin/ipchains -P my-chain input DENY

ここでやめてはいけません。 これは完璧なファイアウォールではありませんし、あなたは提供している 他のサービスがあるはずです。 繰り返しますが IPCHAINS-HOWTO を読みましょう。

【訳注: IPCHAINS-HOWTO 日本語訳 もあります。】


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