次のページ
前のページ
目次へ
======================================================================
ipchains-mini-HOWTO
Date : Fri 5, 1999
Written by : おおつかまさひと <negi@KU3G.org>
======================================================================
0. はじめに
ipchains は新カーネルで採用されたファイアウォール設定ツールで
す。これまでの ipfwadm とはちょいと操作性が違うので戸惑う人も多
いことでしょう。そんなわけでこの mini HOWTO をお送りします。
前提として ipfwadm をある程度使ったことがある方を対象にさせて
いただきます。
この文書は,筆者が 30 Jan, 1999 に fj.os.linux と KU3G ML にポ
ストした Message-Id: <m2iudp8qlw.fsf@clotho.KU3G.org> の記事に少々
の手直しをしたものです。また再配布は改変されない限り原則自由です。
1. 基礎知識
新カーネルはチェインという仕組を使ってファイアウォールの設定を
行ないます。チェインとは鎖のことで,フィルタリングルールのリスト
のことです。丁度,鎖の輪一つ一つがルール,それを繋げたものが鎖に
なる。そんな図を想像してみて下さい。
カーネルは,この鎖を頭から順にテストしていきます。
カーネルは最初から3つのチェインを持っています。input,output,
forward の3つです。ipfwadm で言う -I,-O,-F にあたります。
○ input
パケットが入ってくる時にチェックされるチェインです。
○ output
パケットが外に出ていく時にチェックされるチェインです。
○ forward
受け取ったパケットを他所に転送する時(こういう動作をルーティ
ングといいます)にチェックされるチェインです。
デフォルトでは,各チェインには何のルールもなく,また各チェイン
のデフォルトのルールは ACCEPT となっています。このデフォルトのルー
ルをポリシーと言い -P で設定できます。
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,output,forward 以外にも自分で自由
に作ることができます。
例5) ipchains -N ppp-in
これは ppp-in というチェインを作成します。
例6) ipchains -A ppp-in -p tcp -s 0/0 -d 192.168.0.1 smtp -j DENY
これは ppp-in というチェインに,「全ての smtp ポートへの接続を
DENY する」というルールを追加します。
先程も書きましたが -p はプロトコルの指定(tcp),-s はソースアドレ
スの指定(0/0 = 全て) -j はターゲット(DENY)です。
-d は自ホストの IP アドレス 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
# 「自サイトの SMTP ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip smtp -j REJECT
# 「自サイトの NetBIOS ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/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
# 「自サイトの X server ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 6000 -j DENY
# 「自サイトの X font server ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/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
注意) 新カーネルでは,デフォルトでパケットをフォワードしない設定
になっています。以下のようにしてフォワードを有効にします。
echo 1 > /proc/sys/net/ipv4/ip_forward
次のページ
前のページ
目次へ