[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:44864] ipchains (私家版)mini HOWTO


おおつかです

ipchains を使う上での基本的なことをまとめた文書を書いてみました。
とりあえず叩いてやって下さい。

以下から本文

ipchains は新カーネルで採用されたファイアウォール設定ツールです。
これまでの ipfwadm とはちょいと操作性が違うので戸惑う人も多いこ
とでしょう。そんなわけでこの mini HOWTO をお送りします。

前提として ipfwadm をある程度使ったことがある方を対象にさせてい
ただきます。


1. 基礎知識

新カーネルはチェインという仕組を使ってファイアウォールの設定を行
ないます。チェインとは鎖のことで,フィルタリングルールのリストの
ことです。丁度,鎖の輪一つ一つがルール,それを繋げたものが鎖にな
る。そんな図を想像してみて下さい。

カーネルは,この鎖を頭から順にテストしていきます。

カーネルは最初から3つのチェインを持っています。input,output,
forward の3つです。ipfwadm で言う -I,-O,-F にあたります。

1. input
   パケットが入ってくる時にチェックされるチェインです。

2. output
   パケットが外に出ていく時にチェックされるチェインです。

3. forward
   受け取ったパケットを他所に転送する時(こういう動作をルーティ
   ングといいます)にチェックされるチェインです。

デフォルトでは,各チェインには何のルールもなく,また各チェインの
デフォルトルールは ACCEPT となっています。何もルールが無ければデ
フォルトルールが選択されます。


2. ipchains の使い方

早速 ipchains を使ってみましょう。ipchains は各チェインにルール
を追加(-A)したり削除(-D)できます。チェインのルールを見る(-L)こと
もできます。


例1) ipchains -A input -s 192.168.0.0/24 -j DENY
                       ~~~~~~~~~~~~~~~~~~~~~~~~~
これは「ソースアドレスが 192.168.0.0/24 を持つパケットを DENY す
る」というルールを input チェインに追加します。(下線部がルール
になります。)

ルールに記述できるスイッチには以下のようなものがあります。

-s ソースアドレスを指定します

-d ディスティネーションアドレスを指定します

-p プロトコルを指定します
   tcp,udp,icmp 等が記述できます。詳しくは man ページを参照し
   て下さい。

-j ターゲットを記述します
   DENY,REJECT,ACCEPT 等が記述できます。チェインを指定すること
   もできます(後述)。詳しくは man ページを参照して下さい。

-i インターフェイスを指定します
   eth0,ppp0 等が記述できます。現在 up でないインターフェイスも
   指定することができます。つまり接続されていない状態でも ppp0
   をインターフェイスとして指定できます。


例2) ipchains -n -L input

これは input チェインのルールを見ることができます。-n は IP アド
レスを数字で表示するという意味です。先程追加したルールが

Chain input (policy ACCEPT):
target     prot opt     source                destination           ports
DENY       all  ------  192.168.0.0/24        0.0.0.0/0             n/a

などと表示されましたでしょうか? 見ての通りこの鎖には1つの輪し
かありませんが,-A によってどんどん追加していけます。


例3) ipchains -D input 1

これはさきほど指定したルールを input チェインから削除します。-D
は次のようにも記述できます


例4) ipchains -D input -s 192.168.1.0/24 -j DENY

例1 の -A が -D にかわっただけですね。-A で指定したルールを,そ
のまま -D で指定しても削除することができます。


3. チェインの作成と応用

チェインは最初からある input,outpu,forward 以外にも自分で自由
に作ることができます。


例5) ipchains -N ppp-in

これは ppp-in というチェインを作成します。


例6) ipchains -A ppp-in -p tcp -s 0/0 smtp -j DENY

これは ppp-in というチェインに,「全ての smtp ポートへの接続を
DENY する」というルールを追加します。

先程も書きましたが -p はプロトコルの指定(tcp),-s はディスティネー
ションアドレスの指定(0/0 = 全て) -j はターゲット(DENY)です。

smtp は /etc/services に書かれたポートです。ポートは数字表記でも
構いません。

このように作成したチェインには,自由にルールを追加(-A)したり削除
(-D)したり,また閲覧(-L)したりできます。

しかしこのままでは何の役にも立ちません。チェインは連結することに
よって効果を発揮します。


例7) ipchains -A input -i ppp0 -j ppp-in

これは「パケットが入力されたインターフェイスが ppp0 のとき
ppp-in というチェインを選択する」というルールを input チェインに
追加しています。

ppp0 から入ってきたパケットはターゲットが ppp-in と指定されてい
ますので,チェイン ppp-in に移ります。

ppp-in チェインには 例6 によって設定したルールがありますので,こ
のルールのチェックを受けます。このルールにマッチしなければ,
ppp-in チェインを抜け,再び input チェインに戻ってきて次のチェッ
クを受けます。

このように -j は DENY,REJECT といったシンボルだけでなく,チェイ
ンも指定することができます。


例8) ipchains -F ppp-in

これは ppp-in チェインの内容を消去します。消去されるのは内容だけ
でチェイン自体は消去されません。消去するには -X を使います。


例9) ipchains -X ppp-in

ppp-in チェインを消去します。ただし ppp-in チェインの内容が空の
場合にしか消去できません。まず -F で空にしてから -X で消去します。


5. 実践編

PPP 接続をしている間はファイアウォールを設定し,それ以外はファイ
アウォールを設置しない,そういう状況を考えて設定してみましょう。

# pppd は ip-up,ip-down というスクリプトを実行します。前者は接
# 続が確立された時,後者は切断された時に実行されます。ip-up には
# 引数が渡ります。$1 は接続に用いるインターフェイス,$2 は tty
# デバイス,$3 はシリアルスピード,$4 はローカルの IP アドレス,
# $5 はリモート側のIP アドレスです。

ip-up は以下のようになりました。

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----
#!/bin/sh
umask 022

# 変数の設定
iface=$1
device=$2
speed=$3
localip=$4
remoteip=$5

# ppp-in というチェインを作成します
/sbin/ipchains -N ppp-in

# input チェインに
# 「インターフェイスが ppp0 の場合,ターゲットは ppp-in チェイン」
# というルールを追加します
/sbin/ipchains -A input -i ppp0 -j ppp-in

# ppp0 からの SMTP への接続を弾きます
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip smtp -j REJECT

# ppp0 からの NetBIOS への接続を弾きます
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 137:139 -j DENY
/sbin/ipchains -A ppp-in -p udp -s 0/0 -d $localip 137:139 -j DENY

# ppp0 からの X server への接続を弾きます
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 6000 -j DENY

# ppp0 からの X font server への接続を弾きます
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 7000 -j DENY

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

ip-down は以下のような感じです

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----
#!/bin/sh

# input チェインから ppp-in ルールを削除します
/sbin/ipchains -D input -i ppp0 -j ppp-in

# ppp-in チェインを空にします
/sbin/ipchains -F ppp-in

# ppp-in チェインを削除します
/sbin/ipchains -X ppp-in

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

これまでの ipfwadm では ppp0 だけの特別な設定を任意に追加,削除
するといったことが非常に困難でしたが,チェインを使うことにより非
常にスマートに設定することができます。


6. IP Masquerade の設定

これまで ipfwadm で設定していた IP Masquerade の設定は,ipchains
で行なうようになりました。以下のように記述します。

例10) ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ


本文ここまで。何か間違いがあったら指摘してやって下さい。

-- 
 ======= L i n u x   I n s i d e ============================
 おおつかまさひと | E-mail : negi _at_ KU3G.org
 OHTSUKA Masahito | WWW    : http://www.KU3G.org/negi/

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: