おおつかです
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/
Follow-Ups:
- [fol] Re: ipchains (私家版) mini HOWTOMasahito Ohtsuka
- Prev by Date: [fol] Re: GS with BJC440j
- Next by Date: [fol] Re: GS with BJC440j
- Previous by thread: [fol] Re: numLock が解除されてしまう。
- Next by thread: [fol] Re: ipchains (私家版) mini HOWTO
- Indexes:[Main][Thread]