#navi_header|技術| #outline|| * 概要 Linuxのカーネルモジュールとして実装され、動作する。 Linux 2.2 : ipchains Linux 2.4, 2.6 : iptables Netfilterという仕組みを使うと、ipchainseの設定ファイルや機能を2.4でも利用可能。 iptablesの構成例 (TurboLinux Server 7) - バージョン:iptables-1.2.2 - 起動スクリプト:/etc/init.d/iptables - 設定ファイル:/etc/sysconfig/iptables - ログ:/var/messages なお、iptablesコマンドのオプションや設定ファイルの位置などは CentOS5.2 でも同様である。 参考: - http://www.netfilter.org/index.html - http://www.justlinux.com/nhf/Security/IPtables_Basics.html - CentOS5.2 "Deployment_Guide.pdf" -> "Part VII. Security And Authentication" -> "Chapter 43. Securing Your Network" -> "8. Firewalls" or "9. IPTables" * コマンドラインからの使い方サマリ (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 (Source) パケットの送信元を指定 :#block||> - 直接IPで指定 - FQDN(turbo.turbolinux.gr.jp)で指定、 - ネットワークアドレス(192.168.0.0/24, 192.168.0.0/255.255.255.0) - !を頭に付ければ否定の効果。 -s !localhost → localhost以外のパケットとマッチ !否定は他のほとんどのオプションでも使える。 ||< : -d (Destination) パケットの宛先を指定 : "-s" と同じ書式で指定 : -i (In Interface) パケットが入って来るデバイス名を指定 :#block||> OUTPUTチェインには指定できない。 FORWARDには-i, -o 両方指定できる。 例: -i eth0 PPP接続などで、ppp0かppp1か分からない場合 : -i ppp+ ||< : -o (Out Interface) パケットが出て行くI/Oを指定 :#block||> INPUTチェインには指定できない。 FORWARDチェインには-i, -o 両方指定できる。 指定方法は -i と同じ。 ||< : -p (Protocol) プロトコルを指定 : #block||> 指定できるプロトコルはtcp, udp, icmp のいずれか。 大文字小文字の区別はない。 ||< : -j (Jump) ターゲットを指定 : (後述) ** TCP拡張, UDP拡張, ICMP拡張 例 : --sportオプション # iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT 次の二つの拡張オプションはTCP, UDP用です。 : --sport (Source Port) 送信元のポートをマッチング : #block||> /etc/servicesファイルに記述されたポート番号又はサービス名を指定可能。 範囲を指定するには":"で区切る。 ポート番号2000から3000番を指定 --sport 2000:3000 ポート番号0 から1024番までを指定 --sport :1024 ポート番号1025 から 65535 までを指定 --sport 1025: ||< : --dport (Destination Port) 宛先のポートをマッチング : 範囲指定は--sportと同じ。 TCP, UDP, ICMP拡張を調べる : # iptables -p tcp --help # iptables -p udp --help # iptables -p icmp --help その他の拡張(mac, limit, owner, state等)を調べる : # iptables -m mac --help など。 ** ターゲット指定 条件にマッチしたパケットを処理方法を指定する。"-j"オプションの後に指定する。 代表的なターゲットを以下に示す。 : ACCEPT : パケットを通過させる。 : DROP : パケットを破棄する。。 : REJECT : パケットを破棄し、破棄した旨のICMPメッセージを送信元に返す。 : LOG : マッチしたパケットのログを記録する。 : RETURN : INPUT, OUTPUT , FORWARDチェインの場合はチェインの最後へ処理が移り、そのチェインのポリシーが適用される。 ユーザー定義のチェインの場合は、呼び出したルールに戻り、引続き次のルールから調べられる。 ** ユーザー定義チェイン "-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... と言う風に、半角空白をいれる。シェルの変数が混ざっちゃう? #navi_footer|技術|