Linuxのカーネルモジュールとして実装され、動作する。
Linux 2.2 : ipchains
Linux 2.4, 2.6 : iptables
Netfilterという仕組みを使うと、ipchainseの設定ファイルや機能を2.4でも利用可能。
iptablesの構成例 (TurboLinux Server 7)
なお、iptablesコマンドのオプションや設定ファイルの位置などは CentOS5.2 でも同様である。
参考:
(IPマスカレードの説明は省略)
"-L" オプションでINPUT(侵入), FORWARD(通過), OUTPUT(送出)に対する各チェインの設定を表示する。
# iptables -L
個別のチェインに対する設定を表示するには "-L" に続けてチェイン名を指定する。
# iptables -L [チェイン]
INPUTチェインに対して192.168.0.0/24からのICMPパケットを全て破棄するルールを追加する :
# iptables -A INPUT -s 192.168.0.0/24 -p icmp -j DROP
このルールを削除する :
# iptables -D INPUT -s 192.168.0.0/24 -p icmp -j DROP
"-L" で表示されるルール番号を指定して削除する :
# iptables -D [チェイン] [ルール番号]
# iptables -[ADC] チェイン ルール [オプション] # iptables -[RI] チェイン ルール番号 ルール [オプション] # iptables -D チェイン ルール番号 [オプション] # iptables -[LFZ] チェイン [オプション] # iptables -[NX] チェイン # iptables -P チェイン ターゲット(DROPとか。) [オプション] # iptables -E 既存のチェイン名 新規チェイン名
チェイン操作のオプション
-A (Append) 指定したチェインに新しいルールを追加 -D (Delete) ルールを削除 -R (Replace) 指定したチェインのルール番号を、新しいルールで置換 -I (Insert) ルール番号を指定して置換 -L (List) 指定したチェインのルールを表示 -F (Flush) 指定したチェインのルールを全て削除 -Z (Zero) チェインのカウンタをリセット(後述) -N (New Chain) 新しいチェインを作成 -X (Delete Chain) ルールが空のチェインを削除 -P (Policy) 指定したチェインのポリシーを設定 -E (Rename Chain) ユーザー定義のチェインの名前を変更
-s !localhost → localhost以外のパケットとマッチ
!否定は他のほとんどのオプションでも使える。
OUTPUTチェインには指定できない。
FORWARDには-i, -o 両方指定できる。
例: -i eth0
PPP接続などで、ppp0かppp1か分からない場合 :
-i ppp+
INPUTチェインには指定できない。
FORWARDチェインには-i, -o 両方指定できる。
指定方法は -i と同じ。
指定できるプロトコルはtcp, udp, icmp のいずれか。
大文字小文字の区別はない。
例 : --sportオプション
# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
次の二つの拡張オプションはTCP, UDP用です。
/etc/servicesファイルに記述されたポート番号又はサービス名を指定可能。
範囲を指定するには":"で区切る。
ポート番号2000から3000番を指定
--sport 2000:3000
ポート番号0 から1024番までを指定
--sport :1024
ポート番号1025 から 65535 までを指定
--sport 1025:
TCP, UDP, ICMP拡張を調べる :
# iptables -p tcp --help # iptables -p udp --help # iptables -p icmp --help
その他の拡張(mac, limit, owner, state等)を調べる :
# iptables -m mac --help
など。
条件にマッチしたパケットを処理方法を指定する。"-j"オプションの後に指定する。
代表的なターゲットを以下に示す。
"-N" オプションを使うと、ユーザが新しくチェインを作れる。
# iptables -N userchain
これでuserchain と言う名前のチェインが新しく作られた。
ルールの操作などでこのチェインを対象とするには、 "-j userchain" と指定する。
あるルールによって処理されたパケットの数をカウントするルール。設定するにはターゲットの指定を省略する。
OUTPUTチェインを通過したtcp 80番ポート(http) のパケットをカウントするように指定する :
# iptables -A OUTPUT -p tcp --sport 80
カウンターのリセットには-Zオプションを使う。
# iptables -Z OUTPUT
iptablesコマンドによる設定は一時的なもので、マシンをリブートすると消えてしまう。
通常は、
# /sbin/service iptables save
として、現在設定されているルールを/etc/sysconfig/iptablesに上書き保存できる。
好きなファイルに保存するには"iptables-save"コマンドを使う。
# iptables-save > ファイル名
緊急停止用として、ルールを全てリセットし、ポリシーを全てDROPにする :
# /etc/rc.d/init.d/iptables panic
否定の指定で、
!xxx.xxx.xxx.xxx
とすると×。
! xxx.xxx...
と言う風に、半角空白をいれる。シェルの変数が混ざっちゃう?