|
LPIC level2 << LPIC level202 >> 1.212:システムのセキュリティ 212.1 ルータを構成する ・ipchainsについては削除されています。 ・apropos で概要を確認します。 $ echo "ipchains iptables" | apropos -we `xargs` ipchains (8) - IP ファイアウォール管理 iptables (8) - IPv4 のパケットフィルタと NAT を管理す... [ iptables コマンド ]
filter:
(-t オプションが渡されなければ) これがデフォルトのテーブルで
ある。これには INPUT (マシン自体に入ってくるパケットに対する
チ ェイン)・ FORWARD (マシンを経由するパケットに対するチェイ
ン)・ OUTPUT (ローカルマシンで生成されたパケットに対するチェ
イン) という組み込み済みチェインが含まれる。
nat:
このテーブルは新しい接続を開くようなパケットに対して参照され
る。これには PREROUTING (パケットが入ってきた場合、すぐに そ
のパケットを変換するためのチェイン)・ OUTPUT (ローカルで生成
されたパケットをルーティングの前に変換するためのチェイン) ・
POSTROUTING (パケットが出て行くときに変換するためのチェイン)
という 3 つの組み込み済みチェインが含まれる。
mangle:
このテーブルは特別なパケット変換に使われる。これには、カーネ
ル 2.4.17 までは PREROUTING (パケットが入ってきた場合、すぐ
にそのパケットを変換するためのチェイン)・ OUTPUT (ローカルで
生 成 されたパケットをルーティングの前に変換するためのチェイ
ン) という 2 つの組み込み済みチェインが含まれる。カ ー ネ ル
2.4.18 からは、これらの他に INPUT (マシン自体に入ってくるパ
ケットに対するチェイン)・ FORWARD (マシンを経由するパケッ ト
に 対するチェイン)・ POSTROUTING (パケットが出て行くときに変
換するためのチェイン) という 3 つの組み込み済みチェインも 含
まれる。
書式
iptables [-t table] -[AD] チェイン ルールの詳細 [オプション]
iptables [-t table] -I チェイン [ルール番号] ルールの詳細 [オプション]
iptables [-t table] -R チェイン ルール番号 ルールの詳細 [オプション]
iptables [-t table] -D チェイン ルール番号 [オプション]
iptables [-t table] -[LFZ] [チェイン] [オプション]
iptables [-t table] -N チェイン
iptables [-t table] -X [チェイン]
iptables [-t table] -P チェイン ターゲット [オプション]
iptables [-t table] -E 旧チェイン名 新チェイン名
コマンド
-A, --append チェイン ルールの詳細
選 択されたチェインの最後に 1 つ以上のルールを追加する。送信元や
送信先の名前が 1 つ以上のアドレスに解決された場合は、可能なア ド
レスの組合せそれぞれに対してルールが追加される。
-D, --delete チェイン ルールの詳細
-D, --delete チェイン ルール番号
選 択されたチェインから 1 つ以上のルールを削除する。このコマンド
には 2 つの使い方がある: チェインの中の番号 (最初のルールを 1 と
する) を指定する場合と、マッチするルールを指定する場合である。
-L, --list [チェイン]
選択されたチェインにある全てのルールを一覧表示する。チェインが指
定されない場合、全てのチェインにあるリストが一覧表示される。他の
各 iptables コマンドと同様に、指定されたテーブル (デフォルトは
filter) に対して作用する。よって NAT ルールを表示するには以下 の
ようにする。
iptables -t nat -n -L
DNS の逆引きを避けるために、よく -n オプションと共に使用される。
-Z (ゼロ化) オプションを同時に指定することもできる。この場合、チ
ェインは要素毎にリストされて、 (訳註: パケットカウンタとバイトカ
ウンタが) ゼロにされる。出力表示は同時に与えられた他の引き数に影
響される。
iptables -L -v
を使わない限り (訳注: -v オプションを指定しない限り)、実際のルー
ルそのものは表示されない。
-F, --flush [チェイン]
選択されたチェイン(何も指定しなければテーブル内の全てのチェイン)
の 内容を全消去する。これは全てのルールを 1 個ずつ削除するのと同
じである。
-N, --new-chain チェイン
指定した名前でユーザー定義チェインを作成する。同じ名前のターゲッ
トが既に存在してはならない。
-X, --delete-chain [チェイン]
指定したユーザー定義チェインを削除する。そのチェインが参照されて
いてはならない。チェインを削除する前に、そのチェインを参照してい
るルールを削除するか置き換えるかしなければならない。引き数が与え
られない場合、テーブルにあるチェインのうち組み込み済みチェインで
ないものを全て削除する。
-P, --policy チェイン ターゲット
チェインのポリシーを、指定したターゲットに設定する。指定可能なタ
ーゲットは「ターゲット」の章を参照すること。 (ユーザー定義ではな
い) 組み込み済みチェインにしかポリシーは設定できない。また、組み
込み済みチェインもユーザー定義チェインもポリシーのターゲットに設
定することはできない。
オプション
-v, --verbose
詳細な出力を行う。 list コマンドの際に、インターフェース名・ (も
しあれば) ルールのオプション・TOS マスクを表示させる。パケットと
バイトカウンタも表示される。添字 ’K’, ’M’, ’G’ は 、 そ れ ぞ れ
1000, 1,000,000, 1,000,000,000 倍を表す (これを変更する -x フラ
グも見よ)。このオプションを append, insert, delete, replace コマ
ンドに適用すると、ルールについての詳細な情報を表示する。
-n, --numeric
数値による出力を行う。 IP アドレスやポート番号を数値によるフォー
マットで表示する。デフォルトでは、iptables は (可能であれば) こ
れらの情報をホスト名・ネットワーク名・サービス名で表示しようとす
る。
-x, --exact
厳密な数値で表示する。パケットカウンタとバイトカウン タ を 、 K
(1000 の何倍か)・M (1000K の何倍か)・G (1000M の何倍か) ではなく
、厳密な値で表示する。このオプションは、 -L コマンドとしか関係し
ない。
パラメータ
-p, --protocol [!] protocol
ルールで使われるプロトコル、またはチェックされるパケットのプロト
コ ル。指定できるプロトコルは、 tcp, udp, icmp, all のいずれか 1
つか、数値である。数値には、これらのプロトコルのどれかないし別の
プロトコルを表す数値を指定することができる。 /etc/protocols にあ
るプロトコル名も指定できる。プロトコルの前に "!" を置くと、そ の
プロトコルを除外するという意味になる。数値 0 は all と等しい。プ
ロトコル all は全てのプロトコルとマッチし、このオプションが省 略
された際のデフォルトである。
-s, --source [!] address[/mask]
送 信元の指定。 address はホスト名 (DNS のようなリモートへの問い
合わせで解決する名前を指定するのは非常に良くない) ・ネットワーク
IP アドレス (/mask を指定する)・通常の IP アドレス、のいずれかで
ある。 mask はネットワークマスクか、ネットワークマスクの左側にあ
る 1 の 数 を 指 定する数値である。つまり、 24 という mask は
255.255.255.0 に等しい。アドレス指定の前に "!" を置くと、その ア
ド レスを除外するという意味になる。フラグ --src は、このオプショ
ンの別名である。
-d, --destination [!] address[/mask]
送信先の指定。書式の詳しい説明については、 -s (送信元) フラグ の
説 明を参照すること。フラグ --dst は、このオプションの別名である
。
-j, --jump target
ルールのターゲット、つまり、パケットがマッチした場合にどうするか
を指定する。ターゲットはユーザー定義チェイン (そのルール自身が入
っているチェイン以外) でも、パケットの行方を即時に決定する特別な
組 み込み済みターゲットでも、拡張されたターゲット (以下の 「ター
ゲットの拡張」を参照) でもよい。このオプションがルールに指定され
なかった場合は、ルールにマッチしてもパケットの行方に何も影響しな
いが、ルールのカウンタは 1 つ加算される。
-i, --in-interface [!] name
パケットを受信することになるインターフェース名 (INPUT, FORWARD,
PREROUTING チェインに入るパケットのみ)。インターフェース名の前に
"!" を置くと、そのインターフェースを除外するという意味になる。イ
ン ターフェース名が "+" で終っている場合、その名前で始まる任意の
インターフェース名にマッチする。このオプションが省略された場合、
任意のインターフェース名にマッチする。
-o, --out-interface [!] name
パケットを送信することになるインターフェース名 (FORWARD, OUTPUT,
POSTROUTING チェインに入るパケットのみ)。インターフェース名の 前
に "!" を置くと、そのインターフェースを除外するという意味になる
。インターフェース名が "+" で終っている場合、その名前で始まる 任
意のインターフェース名にマッチする。このオプションが省略された場
合、任意のインターフェース名にマッチする。
ターゲット
ひとつのファイアウォールルールでは、パケットを判断する基準とターゲッ ト
と が指定される。パケットがマッチしない場合、チェイン内の次のルールが評
価される。パケットがマッチした場合、ターゲットの値が次のルールを指定 す
る 。 タ ー ゲ ッ ト の値は、ユーザー定義チェインの名前、または特別な値
ACCEPT, DROP, QUEUE, RETURN のうちの 1 つである。
ACCEPT はパケットを通すという意味である。 DROP はパケットを床に落す (捨
てる) という意味である。 QUEUE はパケットをユーザー空間に渡すという意味
である (カーネルがサポートしていればであるが)。 RETURN は、このチェイン
の 検討を中止して、以前の (呼び出し元) チェイン内の次のルールから検討を
再開するという意味である。組み込み済みチェインの最後に到達した場合、 ま
た は組み込み済みチェインでターゲット RETURN を持つルールにマッチした場
合、チェインポリシーで指定されたターゲットがパケットの行方を決定する。
REJECT
マ ッチしたパケットの応答としてエラーパケットを送信するために使われる。
エラーパケットを送らなければ、 DROP と同じであり、TARGET を終了し、ルー
ル の検討を終了する。このターゲットは、 INPUT, FORWARD, OUTPUT チェイン
と、これらのチェインから呼ばれるユーザー定義チェインだけで有効である 。
以下のオプションは、返されるエラーパケットの特性を制御する。
DNAT
このターゲットは nat テーブルの PREROUTING, OUTPUT チェイン、これらのチ
ェインから呼び出されるユーザー定義チェインのみで有効である。このター ゲ
ッ トはパケットの送信先アドレスを修正する (この接続の以降のパケットも修
正して分からなく (mangle) する)。さらに、ルールによるチェックを止めさせ
る。このターゲットにはオプションが 1 種類ある:
SNAT
こ のターゲットは nat テーブルの POSTROUTING チェインのみで有効である。
このターゲットはパケットの送信元アドレスを修正させる (この接続の以降 の
パケットも修正して分からなく (mangle) する)。さらに、ルールが評価を中止
するように指示する。このターゲットにはオプションが 1 種類ある:
LOG
マッチしたパケットをカーネルログに記録する。このオプションがルールに 対
して設定されると、 Linux カーネルはマッチしたパケットについての (大部分
の IP ヘッダーフィールドのような) 何らかの情報をカーネルログに表示す る
(カーネルログは dmesg または syslogd(8) で見ることができる)。これは "非
終了ターゲット" である。すなわち、ルールの検討は、次のルールへと継続 さ
れ る。よって、拒否するパケットをログ記録したければ、同じマッチング判断
基準を持つ 2 つのルールを使用し、最初のルールで LOG ターゲットを、次 の
ルールで DROP (または REJECT) ターゲットを指定する。
MASQUERADE
このターゲットは nat テーブルの POSTROUTING チェインのみで有効である 。
動 的 割り当て IP (ダイヤルアップ) 接続の場合にのみ使うべきである。固定
IP アドレスならば、SNAT ターゲットを使うべきである。マスカレーディン グ
は 、パケットが送信されるインターフェースの IP アドレスへのマッピングを
指定するのと同じであるが、インターフェースが停止した場合に接続を忘れ る
と いう効果がある。次のダイヤルアップでは同じインターフェースアドレスに
なる可能性が低い (そのため、前回確立された接続は失われる) 場合、この 動
作は正しい。このターゲットにはオプションが 1 つある。
REDIRECT
このターゲットは、 nat テーブル内の PREROUTING チェイン及び OUTPUT チェ
イ ン、そしてこれらチェインから呼び出されるユーザー定義チェインでのみ有
効である。このターゲットはパケットの送信先 IP アドレスをマシン自身の IP
ア ド レ ス に 変 換 す る 。 (ローカルで生成されたパケットは、アドレス
127.0.0.1 にマップされる)。このターゲットにはオプションが 1 つある:
例1)「eht0」で受信した、「192.168.1.1」宛てのパケットのうち、TCPパケットの通過を許可します
$ iptable -A FORWORD -i eth0 -p tcp -d 192.168.1.1 -j ACCEPT
例2)「eth1」で受信したパケットをすべて無視します
$ iptable -A INPUT -i eth0 -j DROP
[ ipchains コマンド ] ipchains は、kernel2.2.系で使われます。
書式
ipchains -[ADC] チェイン ルールの詳細 [オプション]
ipchains -[RI] チェイン ルール番号 ルールの詳細 [オプション]
ipchains -D チェイン ルール番号 [オプション]
ipchains -[LFZNX] [チェイン] [オプション]
ipchains -P チェイン ターゲット [オプション]
ipchains -M [ -L | -S ] [オプション]
チェイン(iptables とは、小文字を使用する点で異なります)
input 受信するパケット
output 出力するパケット
forward 転送するパケット
オプション
-A, --append
選 択したチェインの末尾に 1 つ以上のルールを追加する。名前解決の
結果、発信元アドレスと宛先アドレスの両方またはいずれかの名前が 1
つ以上の IP アドレスを持つ場合、ルールは各々の可能なアドレスの組
合せ毎に追加される。
-D, --delete
選択したチェインから、1 つ以上のルールを削除する。このコマンドに
は 2 つのバージョンがある - ルールは (最初のルールを 1 として数
え始めて) チェイン中の番号で指定されるか、一致するルールにて指定
される。
-L, --list
選択したチェインに含まれる全てのルールを一覧表示する。チェインを
指定しないと、全てのチェインが一覧表示される。チェインを指定しな
い 時に、 -Z (ゼロ) オプションとの組み合わせは有効である。正確な
出力は他の引数の指定によって行われる。
-N, --new-chain
指定した名前のユーザ定義チェインを新たに作成する。既存のターゲッ
トと同じ名前は使用できない。
-X, --delete-chain
指定したユーザ定義チェインを削除する。削除対象チェインへの参照が
存在してはならない (参照されている場合は、そのチェインを削除する
前に、参照元のルールを削除するか、或は他のチェインへ移動しなけれ
ば ならない)。引数が与えられなかった場合、 ipchains は組み込み済
みチェインを除く全てのユーザ定義チェインを削除しようとする。
-P, --policy
チェインのポリシーを指定したターゲットに設定する。正しいターゲッ
ト については、 ターゲットの項を参照。ポリシーを持つことができる
のはユーザ定義ではないチェインだけであり、組み込み済みチェインも
ユーザ定義チェインもポリシーのターゲットとはなり得ない。
-M, --masquerading
こ のオプションは、( -L オプションと組み合わせて) 現在マスカレー
ドされている接続を閲覧したり、( -S オプションと組み合わせて) カ
ーネルにマスカレードの値を設定する。
追加オプション
-v, --verbose
詳細表示。このオプションは、コマンドのインターフェースアド レ ス
・( もしあれば) ルールのオプション・TOS マスク・パケットとバイト
のカウンタを一覧表にして表示する。カウンタ表示の後の ’K’, ’M’,
’G’ は各々、 1000, 1,000,000, 1,000,000,000 倍を意味する。 (但し
、 -x フラグはこの表示方法を変更する。) -M と組み合わせて使う と
、デルタシーケンス番号 (delta sequence numbers) に関連する情報も
表示される。追加、挿入、削除、置換にこのオプションを適用すると、
ルールの詳細情報が表示されるようになる。
-n, --numeric
数値での出力。 IP アドレスとポート番号が数値形式で出力される。デ
フォルトでは、 ipchains はそれらをホスト名、ネットワーク名、或は
サービス名で(出来るだけ)表示しようと試みる。
-l, --log
マッチしたパケットをカーネルのログに記録する。ルールにこのオプシ
ョンが設定される時、 Linux カーネルは printk() 関数を通じて、 マ
ッ チしたパケット全ての(多くは IP ヘッダフィールドに関する) 情報
を出力する。
-x, --exact
番 号表示の拡張。パケット及びバイトカウンタの値を K (1000倍)、 M
(1000K倍) 或は G (1000M倍)で丸めた値でなく、正確な値で表示する。
このオプションは -L コマンドでのみ有効である。
ターゲット(ipchains -> MASQ、DENY のターゲットが、iptablesコマンドと異なります iptables -> MASQUERADE、DROP)
ファイアウォールルールでは、パケットの判定基準とターゲットを指定する 。
対 象パケットがマッチしないと、チェイン中の次のルールが検査される。ルー
ルに一致する場合、次のルールはターゲットの値によって指定される。ター ゲ
ッ ト の 値 は ユーザ定義チェインの名前か、または特別な値である ACCEPT,
DENY, REJECT, MASQ, REDIRECT, RETURN のうちの 1 つである。
ACCEPT は、対象パケットを通過させる。 DENY は、対象パケットを床へ落とし
、 捨て去る。 REJECT は、対象パケットを捨て去るという点では DENY と同じ
だが、 DENY よりも礼儀正しく、デバッグし易くなっている。何故なら、パ ケ
ッ トを捨てる際に対象パケットを捨てたことを示す ICMP メッセージを送信元
に返信するからである。 ( DENY と REJECT は、 ICMP パケットに関しては 動
作が同じであることに注意されたい。)
MASQ は forward チェインとユーザ定義チェインに対してのみ有効であり、且
つカーネルが CONFIG_IP_MASQUERADE 付きでコンパイルされている場合にだ け
使 用できる。これにより、パケットはあたかもローカルホストから発信された
かのようにマスカレードされる。更に、受信されるパケットは先にマスカレ ー
ド されたホストに対する返答として認識されると共に、自動的にマスカレード
外し (demasquerade) が行われ、 forward チェインのチェックから外される。
REDIRECT は input チェインとユーザ定義チェインに対してのみ有効であり、
カーネルが CONFIG_IP_TRANSPARENT_PROXY 付きでコンパイルされている場合に
だ け使用できる。このターゲットにより、リモートホスト宛に送信されたパケ
ットであってもローカルのソケットへ振り向けられる。リダイレクト先のポ ー
トにデフォルト値である 0 が指定されていると、そのパケットの宛先ポートが
リダイレクト先のポートとして使用される。このターゲットを用いる時は、 オ
プションの引数としてポート番号が指定できる。
ユ ーザ定義チェインの終りに達するか、またはターゲット RETURN を持つルー
ルにマッチした場合、以前の (呼び出し元の) チェイン中の次のルールが評 価
さ れる。組み込み済みチェインの終りに達するか、または組み込み済みチェイ
ンのルールのターゲットとして RETURN にマッチした場合、チェインに指定 さ
れたポリシーがそのパケットの運命を決定する。
ルール(パラメータ)
-p, --protocol[!] protocol
チェック対象となるルールまたはパケットのプロトコル。プロトコルに
は tcp, udp, icmp, all, のどれか一つを指定する。またはこれらのプ
ロトコルに対応したプロトコル番号や、これらのプロトコルに対応して
いない番号を指定できる。また、 /etc/protocols にあるプロトコル名
で の指定も許される。プロトコル指定の前に "!" を置くと、そのプロ
トコルを指定しないことになる。数値 0 は all と等価である。プロト
コ ル all は全てのプロトコルと一致し、このオプションが省略された
場合のデフォルト値である。 all は check コマンドと組み合わせては
ならない。
-s, --source, --src [!] address[/mask] [!] [port[:port]]
発 信元の指定。 address は、ホスト名・ネットワーク名・素の IP ア
ドレスのいずれでもよい。 mask は、ネットマスク・単なる数 (ネット
マ スクの左側から数えた 1 の個数) のいずれでもよい。したがって、
24 という mask の値は、 255.255.255.0 と等価である。アドレス指定
の前に "!" を置くと、そのアドレスを指定しないことになる。
発信元にはポート指定または ICMP タイプを含めてもよい。これはサー
ビス名、ポート番号、ICMP タイプの数値、あるいは
ipchains -h icmp
コマンドで表示される ICMP タイプ名のいずれかでよい。
これら ICMP 名の多くはタイプとコードの両方を参照することに注意さ
れたい。よって、 -d フラグの後の ICMP コードの指定は誤りである。
この節の残りの部分では、 port はポート指定または ICMP タイプのい
ず れかを意味する。対象とするポートの範囲を port:port という書式
で指定することもできる。最初のポートを省略すると、"0" とみなされ
る。最後のポートを省略すると、"65535" とみなされる。
ポートは、 tcp, udp, icmp プロトコルとの組み合わせでのみ指定可能
である。ポート指定の前に "!" を置くと、そのポートを指定しない こ
とになる。 check コマンドが指定された場合、厳密に 1 つのポートが
必要である。 -f (fragment) フラグが指定された場合、ポートの指 定
は許されない。
--source-port [!] [port[:port]]
発信元ポートまたは発信元ポート範囲の、個別指定を可能とする。詳細
については、前出の -s フラグに関する解説を参照のこと 。 フ ラ グ
--sport は、このオプションの別名である。
-d, --destination, --dst [!] address[/mask] [!] [port[:port]]
宛 先指定。構文についての詳細な説明は、 -s (source) フラグの解説
を参照のこと。ポートを持たない ICMP に対しては、"宛先ポート" は
数字の ICMP コードを表す。
--destination-port [!] [port[:port]]
ポートの個別指定を可能とする。詳細については、 -s フラグの解説を
参照のこと。フラグ --dport は、このオプションの別名である。
--icmp-type [!] typename
ICMP タイプの指定を可能にする (正しい ICMP タイプ名を確認する に
は、 -h icmp オプションを使用する)。宛先指定に ICMP タイプを付加
するよりも、これを利用するほうがより便利な場合が多い。
-j, --jump target
これはルールのターゲットを指定する - すなわち、ルールにマッチ し
たパケットの行く末である。ターゲットはユーザ定義チェイン (但し、
当該ルールが含まれているものを除く) か、パケットの運命を直接決定
する特定のターゲットのうちの一つが指定可能である。ルール中でこの
オプションが省略された場合には、パケットの運命には全く影響しない
が、ルールのカウンタの値は増加する。
-i, --interface [!] name
(input チェインにおいては) 受信したパケットが通過するインターフ
ェース名、 (forward 及び output チェインにおいては) 送信されるパ
ケットが通過するインターフェース名を指定する。このオプションが省
略された場合は空文字列と見なされ、全てのインターフェース名を指定
す ることと同じ意味になる。インタフェース名の前に "!" が置かれる
と、そのインターフェースを指定しないという意味になる。インタフェ
ー ス名の末尾の "+" は前方一致を示し、"+" の直前までの文字列で始
まるインタフェースの全てにマッチする。
例1) 192.168.0.0/24のIPアドレスからのパケットを破棄します。
$ ipchains -A input -s 192.168.0.0/24 -j DENY
例2) 192.168.1.1宛てのIPアドレスのTCPプロトコルの通信を通過させます。
$ ipchains -A forward -i eth0 -p tcp -d 192.168.1.1 -j ACCEPT
・debianにはありませんでしたが、
knoppixには「ipchains-save」コマンドと「ipchains-save」コマンドがあります。
$ echo "ipchains-save ipchains-restore" | apropos `xargs`
ipchains-save (8) - save IP firewall chains to stdout
ipchains-restore (8) - restore IP firewall chains from stdin
・「ipchains-save」のオプション
$ man ipchains-save | grep "\-v "
-v print out every rule
・「ipchains-save」の使用方法(設定の保存)
$ sudo sh -c "ipchains-save > ipchains-setting.txt"
・「ipchains-restore」のオプション
「-f」オプションを使うと強制上書きという考えです。
$ man ipchains-restore | grep "\-f \|\-p "
-f clear chains without asking
-p create every referred-to chain which doesn't exist (useful if
・「ipchains-restore」の使用方法(設定の復元)
$ sudo sh -c "ipchains-save < ipchains-setting.txt"
・同様に、「iptables」にも、「iptables-save」「iptables-restore」コマンドがあります。
こちらはdebianシステムにもあります。
$ echo "iptables-save iptables-restore" | apropos `xargs`
iptables-save (8) - IP テーブルを保存する
iptables-xml (8) - Convert iptables-save format to XML
iptables-restore (8) - IP テーブルを復元する
$ sudo sh -c "iptables-save > iptables-settings.txt"
$ sudo sh -c "iptables-restore < iptables-settings.txt"
$ LANG=ja_JP.utf8 man -Tutf8 iptables-save | grep -A 2 "\-c\|\-t"
iptables-save [-c] [-t table]
・「iptables-save」と「iptables-restore」のオプションです。
こちらは、「-n」オプションをつけないと、上書きがデフォルトです。
$ LANG=ja_JP.utf8 man -Tutf8 iptables-save | grep -A 2 "\-c\|\-t"
説 明
--
-c, --counters
全てのパケットカウンタとバイトカウンタの現在の値を出力する。
-t, --table tablename
出 力を 1 つのテーブルのみに制限する。指定されない場合、得られた
全てのテーブルを出力する。
$ LANG=ja_JP.utf8 man -Tutf8 iptables-restore | grep -A 3 "\-c\|\-n" | sed /"^$"/d
iptables-restore [-c] [-n]
説 明
iptables-restore は標準入力で指定されたデータから IP テーブルを復元する
--
-c, --counters
全てのパケットカウンタとバイトカウンタの値を復元する。
-n, --noflush
こ れ までのテーブルの内容をフラッシュしない。指定されない場合、
iptables-restore は、これまでの各 IP テーブルの内容を全てフラ ッ
シュ (削除) する。
--------------------------------------------------------------------------------
・ルータデーモン
「quagga」のデーモンは「zebrad」です。
RIPや、OSPFもサポートされています。
RIPやRIP2を使用するための「routed」のネットワークデーモンは
マニュアルはありますが、インストールは行なえません。
「routed」の上位コマンドである「gated」もインストールは行なえません。
OSPFを使う場合には、「gated」を使用します。
$ apropos routed
routed (8) - ネットワークルーティングデーモン
$ apt-cache search quagga
netscript-2.4 - Linux 2.4.x (and 2.6.x) router/firewall network configuration system
quagga-doc - documentation files for quagga
quagga - BGP/OSPF/RIP routing daemon
$ apropos quagga
bgpd (8) - a BGPv4, BGPv4+, BGPv4 - routing engine for use with Q...
isisd (8) - an IS-IS routing engine for use with Quagga routing so...
ospf6d (8) - an OSPFv3 routing engine for use with Quagga routing s...
ospfd (8) - an OSPFv2 routing engine for use with Quagga routing s...
ripd (8) - a RIP routing engine for use with Quagga routing softw...
ripngd (8) - a RIPNG routing engine for use with Quagga routing sof...
vtysh (1) - a integrated shell for Quagga routing software
zebra (8) - a routing manager for use with associated Quagga compo..
・「/etc/quagga/zebra.conf」が必要ですが、「examples」ディレクトリにサンプルがあります。
「/etc/init.d/quagga」を読むと、デフォルトでは、「/etc/quagga/debian.conf」を読み込みます。
・SNMPを組み込む手動インストールの方法が、「README.debian.gz」に記載されています。
# export WANT_SNMP=1
# apt-get -b source quagga
・デーモンごとに「 [daemon_name].conf 」といった書式で記述します。
プロトコル名にちなんだデーモン名になっています。
$ ls /usr/share/doc/quagga/examples/ /etc/quagga/
/etc/quagga/:
daemons debian.conf
/usr/share/doc/quagga/examples/:
bgpd.conf.sample ospf6d.conf.sample ripngd.conf.sample
bgpd.conf.sample2 ospfd.conf.sample vtysh.conf.sample
isisd.conf.sample ripd.conf.sample zebra.conf.sample
・拡張マッチングモジュールを使った単位時間当たりのマッチング回数の制限
DDos対策
不特定多数のコンピュータからの大量データ送信によるハングアップに対する対応
・の拡張マッチングモジュールは、「-m」で指定できます。
・「--icmp-type」に使用できるオプションのうち「echo」を探します。
入力方向なので、「echo-request」です。
$ /sbin/iptables -p icmp -h | grep "echo"
echo-reply (pong)
echo-request (ping)
・「limit」に使用できるオプションを検索します。
$ /sbin/iptables -m limit -h | grep -B 2 "minute\|burst"
--limit avg max average match rate: default 3/hour
[Packets per second unless followed by
/sec /minute /hour /day postfixes]
--limit-burst number number to match in a burst, default 5
「-A INPUT」 入力方向のパケット
「-p icmp --icmp-type echo-request」echo-requestに対する
「limit --limit 1/m」 単位時間あたりの平均マッチ回数
「--limit-burst num」 マッチする回数(デフォルトは5回)
「-j ACCEPT」 許可する設定
・送信元の「192.168.1.1」をルータと仮定、
自身のサーバに対するリクエスト回数を制限することで負荷を軽減します。
$ iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.1.1 -d 192.168.1.5 \
-m limit --limit 1/minute --limit-burst 10 -j ACCEPT
・TCP接続の確立準備を完了後、放置状態になった通信により、有効なリソースが減る攻撃に対する対策
SYN flood 攻撃
・SYNクッキーの有効にすることにより、有効な接続かどうかを判断できるようになります。
sudo sh -c 'echo "1" > /proc/sys/net/ipv4/tcp_syncookies
・正常に動作することを確認した後、「/etc/sysctl.conf」のコメントアウトを外して、
再起動後も有効になるようにします。
#net.ipv4.tcp_syncookies=1
・再起動後に有効になっているかチェックします。
有効になっていない場合に設定する方法もありますが、
ルートユーザか、起動時のスクリプトを想定していますので、
チェックに留めておく方がよいと思います。
$ cat /proc/sys/net/ipv4/tcp_syncookies | \
test `xargs` -eq "1" && echo "tcp_syncookies is OK"
tcp_syncookies is OK
# cat /proc/sys/net/ipv4/tcp_syncookies | \
test `xargs` -ne "1" && echo "1" > cat /proc/sys/net/ipv4/tcp_syncookies
・ブロードキャストに対してなど、大量のping 要求を行なうことでネットワークを使用出来なくする攻撃に対する対策
Smurf攻撃
ブロードキャストのpingに答えない設定を行なうことで対応します。
また、「iptables」によるecho-replay を制限するなどの対策も行なった方がよいかも知れません。
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
正常動作を確認したら、「sysctl.conf」のコメントを外します。
net.ipv4.icmp_echo_ignore_broadcasts = 1
212.2 FTPサーバの保護
・元のknoppixのままですと、「tftpd」か、「tftpd-hpa」しか選択肢はありませんが、
以前紹介したように、「/etc/apt/sources.list」を
「stable lenny etch」のみ有効にして、/var/cache/apt/archivesディレクトリにsambaディレクトリ
をマウントすると、それぞれのパッケージが試せます。
usb-vmknoppixを使用している場合は、sambaマウントでなくても、
「mount --bind」オプションでマウントできます。
$ apropos vsftpd
vsftpd (8) - とても安全な FTP デーモン
vsftpd.conf (5) - vsftpd の設定ファイル
$ echo "vsftpd pure-ftpd wu-ftpd proftpd" | for list in `xargs`;do apt-cache search ^${list}\$;done
vsftpd - The Very Secure FTP Daemon
pure-ftpd-ldap - Pure-FTPd FTP server with LDAP user authentication
pure-ftpd-mysql - Pure-FTPd FTP server with MySQL user authentication
pure-ftpd-postgresql - Pure-FTPd FTP server with PostgreSQL user authentication
pure-ftpd - Pure-FTPd FTP server
wu-ftpd - powerful and widely used FTP server
proftpd - versatile, virtual-hosting FTP daemon
$ whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd.conf /usr/share/man/man8/vsftpd.8.gz
anon_mkdir_write_enable
YES に設定した場合、anonymous(匿名)ユーザはある条件の下でディレ
クトリを新規に作成することが許可される。実際に機能さ せ る に は
write_enable オ プ シ ョンが有効になっていなければならず、また
anonymous ftp ユーザが親ディレクトリに対する書き込み権限を持って
いる必要がある。
デフォルト: NO
anon_other_write_enable
YES に設定した場合、anonymous ユーザにファイルのアップロードとデ
ィレクトリの作成以外の書き込み操作、すなわち削除と名前の変更を許
可する。一般的には推奨されないが、オプションの完全性のために含ま
れている。
デフォルト: NO
anon_upload_enable
YES に設定した場合、ある条件の下で anonymous ユーザにファイル の
アップロードを許可する。実際に機能させるには、 write_enable オプ
ションを有効にしなければならず、また anonymous ftp ユーザが親 デ
ィレクトリに対する書き込み権限を持っている必要がある。
デフォルト: NO
anon_world_readable_only
YES に設定した場合、 anonymous ユーザには誰でも読み込み可になっ
ているファイルのダウンロードのみを許可する。これは、ftp ユーザが
ファイルを所有できることを (特にアップロードされたファイルがある
場合に) 認めている。
デフォルト: YES
anonymous_enable
anonymous ログインを許可するかどうかを制御する。 YES にした場 合
、ユーザー名 ftp と anonymous の両方を anonoymous ログインとして
認識する。
デフォルト: YES
ascii_download_enable
YES に設定した場合、ダウンロード時の ASCII モードでのデータ転 送
を許可する。
デフォルト: NO
ascii_upload_enable
YES に設定した場合、アップロード時の ASCII モードでのデータ転送
を許可する。
デフォルト: NO
async_abor_enable
YES に設定した場合、特殊な FTP コマンド "非同期 ABOR" を許可する
。 この機能を使用するのは、分別のない FTP クライアントだけである
。さらに、この機能は取り扱いが難しいので、デフォルトで無効にされ
ている。この機能を有効にしなかった場合には、転送を中止したときに
不幸にも固まる FTP クライアントがあるので、これを有効にしたく な
るかもしれない。
デフォルト: NO
background
YES に設定し、vsftpd が "listen" モードで起動された場合、リスナ
ープロセスをバックグラウンドにする。すなわち、vsftpd を起動し た
シェルにすぐに制御が戻る。
デフォルト: NO
check_shell
注意! このオプションは PAM 対応ではない vsftpd でのみ意味を持つ
。 NO に設定した場合、ローカルユーザのログイン時の、シェルが有効
であるかどうかの /etc/shells チェックをしない。
デフォルト: YES
chmod_enable
YES に設定した場合、SITE CHMOD コマンドを許可する。注意! これは
ローカルユーザにのみ適用される。 anonymous ユーザは、決して SITE
CHMOD を使用できない。
デフォルト: YES
chown_uploads
YES に設定した場合、anonymous でアップロードされたファイルの所有
者を chown_username で設定したユーザにする。管理上、そして多分セ
キュリティの観点から便利である。
デフォルト: NO
chroot_list_enable
YES に設定した場合、ログイン後にホームディレクトリへと chroot()
されるローカルユーザのリストを指定できる。 chroot_local_user を
YES に 設 定した場合には、意味が異なってくる。リストはその場合
、chroot() jail へと移動されないユーザのリストとなる。デフォルト
で は 、 このリストは /etc/vsftpd.chroot_list ファイルであるが、
chroot_list_file 設定によってこれを変更することができる。
デフォルト: NO
chroot_local_user
YES に設定した場合、ローカルユーザは(デフォルトで)ログイン後にホ
ー ムディレクトリへと chroot() される。 警告: このオプションはセ
キュリティに密接に関連する。ユーザがアップロード権限を持っていた
り、シェルでのアクセスができる場合は特にである。何をしているかを
理解している場合にのみ有効にすること。これらのセキュリティの問題
は vsftpd に特有の問題ではないことに注意してほしい。ローカルユー
ザを chroot() jail に入れることができるすべての FTP デーモンにお
いて、この問題がある。
デフォルト: NO
connect_from_port_20
PORT で のデータ接続において、サーバが(送信元)ポートに 20(ftp-
data) を使うかどうか制御する。セキュリティ上の理由から、いくつか
のクライアントはポート 20 を要求する。逆に言えば、このオプション
を無効にすることで、わずかではあるが vsftpd をより少ない特権で動
作させることができる。
デフォルト: NO (ただし、サンプルの設定ファイルでは有効になってい
る)
deny_email_enable
YES に設定した場合、anonymous ユーザのパスワード(e-mail ア ド レ
ス) のうち、ログインを拒否したいもののリストを設定できる。デフォ
ルトでは、このリストは /etc/vsftpd.banned_emails ファイルであ る
が、 banned_email_file 設定によってこれを変更することができる。
デフォルト: NO
dirlist_enable
NO に設定した場合、すべてのディレクトリ表示コマンドは、アクセス
拒否 (permission denied) になる。
デフォルト: YES
dirmessage_enable
YES に設定した場合、FTP サーバ上のユーザが新たなディレクトリに初
めて入ったときに、メッセージを見せることができる。デフォルトでは
、ディレクトリの .message というファイルが調べられる が 、 mes‐
sage_file 設定によってこれを変更することができる。
デフォルト: NO (ただし、サンプルの設定ファイルでは有効になってい
る)
download_enable
NO に設定した場合、すべてのダウンロード要求はアクセス拒否にな る
。
デフォルト: YES
dual_log_enable
YES に 設 定 し た 場 合 、 デ フ ォルトで /var/log/xferlog と
/var/log/vsftpd.log という二つのログファイルを同時に生成する。前
者 は wu-ftpd 形式の転送ログで、標準的なツールによって解析するこ
とができる。後者は vsftpd 独自形式のログである。
デフォルト: NO
force_dot_files
YES に設定した場合、クライアントが "a" フラグを使用していなく て
も 、ドット (.) で始まるファイルとディレクトリも、ディレクトリリ
ストに表示する。
デフォルト: NO
guest_enable
YES に設定した場合、anonymous でないログインすべてを "guest" に
ク ラス分けする。 guest ログインは、 guest_username 設定で指定し
たユーザにマッピングする。
デフォルト: NO
hide_ids
YES に設定した場合、ディレクトリリストでのユーザ・グループの情報
を "ftp" と表示する。
デフォルト: NO
listen YES に設定した場合、スタンドアロンモードで起動する。これは inetd
などのスーパーサーバから起動してはいけないということを意味する。
そ の 代 わりに、vsftpd プログラムを一度だけ直接実行すればよい。
vsftpd 自身が、入ってくる接続を待ち、処理する面倒をみる。
デフォルト: NO
listen_ipv6
IPv4 ソケットの代わりに IPv6 ソケットを待ち受ける点を除 け ば 、
listen オプションと同じである。このオプションと listen オプショ
ンは、どちらか一方しか指定することができない。
デフォルト: NO
local_enable
ローカルユーザのログインを許可するかどうかを制御する。 YES に 設
定した場合、/etc/passwd にある普通のユーザアカウントをログインに
使う。
デフォルト: NO
log_ftp_protocol
YES に設定した場合、FTP のすべての要求と応答を記 録 し 、 xfer‐
log_std_format オプションを無効にする。デバッグに便利である。
デフォルト: NO
ls_recurse_enable
YES に設定した場合、"ls -R" の使用を許可するようになる。大きなサ
イトの一番上のレベルで ls -R を実行されると、多くの資源を消費 し
てしまうので、これはセキュリティ上のちょっとしたリスクである。
デフォルト: NO
no_anon_password
YES に設定した場合、anonymous のパスワードを尋ねるのを止める。す
なわち、anonymous ユーザーはパスワード無しでログインする。
デフォルト: NO
one_process_model
もし Linux 2.4 カーネルを使用しているならば、一つの接続に一つ の
プロセスを使用するという、異なったセキュリティモデルを使用するこ
とができる。これは純粋なセキュリティモデルから少し外れるが、性能
を得ることができる。自サイトで非常に多いユーザの同時接続をサポー
トし、自分が何をしているか知っている人だけが、このオプションを有
効にしたくなる。
デフォルト: NO
passwd_chroot_enable
chroot_local_user と共に YES に設定した場合、 chroot() jail の場
所はユーザごとになる。 jail は /etc/passwd にある各人のホーム デ
ィ レ クトリから得られる。ホームディレクトリを表わす文字列に /./
があれば、そのパスの場所が jail になる。
デフォルト: NO
pasv_enable
NO に設定した場合、データ接続の開始において PASV を許可しない。
デフォルト: YES
pasv_promiscuous
YES に設定した場合、 PASV セキュリティーチェックを無効にし、制御
用の接続と異なる IP アドレスからのデータ接続を許可する。何をして
いるかを理解している場合にのみ有効にすること。唯一の道理にかなっ
た利用法は、安全なトンネルの中で使うか、そうでなければ、おそらく
は FXP(訳注: リモートホスト間転送) を容易にするためのものであ る
。
デフォルト: NO
port_enable
NO に設定した場合、データ接続の開始において PORT を許可しない。
デフォルト: YES
port_promiscuous
YES に設定した場合、 PORT セキュリティーチェックを無効にし、制御
用の接続と異なる IP アドレスへのデータ接続を許可する。何をしてい
るかを理解している場合にのみ有効にすること。
デフォルト: NO
secure_email_list_enable
匿名ログインで許可する e-mail パスワードのリストを指定したい場合
にだけ YES に設定すること。仮想的なユーザーを必要とせずに、低 セ
キュリティなコンテンツへのアクセスを制限する、面倒の少ないやり方
として便利である。 YES に設定した場合には、 email_password_file
で指定されるファイルに書かれているパスワードが与えられない限り、
匿名ログインを許可しない。このファイルのフォーマットは 1 行に 1
パスワードで、余分な空白があってはいけない。デフォルトのファイル
名は /etc/vsftpd.email_passwords である。
デフォルト: NO
session_support
vsftpd がログインセッションを維持しようとするかどうかを制御す る
。 vsftpd がセッションを維持する場合、utmp と wtmp を更新しよう
と試みる。認証に PAM を使用している場合には、さらに pam_session
を open し、ログアウト時に close する。セッションのログ取得が必
要なく、vsftpd をより少ない処理で動作させ、かつ(または)より少 な
い権限で動作させたいならば、これを NO に設定することができる。注
- utmp と wtmp のサポートは PAM を有効にしてビルドした場合に限ら
れる。
デフォルト: YES
setproctitle_enable
有効にした場合、システムのプロセスリスト(例えば ps aux コマンド)
にセッションの状態に関する情報を表示する。つまり、表示されるプロ
セ ス名が vsftpd のセッションがどうなっているか (idle, download‐
ing など)に応じて変化する。セキュリティ上、これを off のままにし
ておきたいと思うのが普通である。
デフォルト: NO
syslog_enable
YES に設定した場合、/var/log/vsftpd.log に行くはずだったすべての
ログ出力を、代わりにシステムログに出力する。 FTPD ファシリティで
ログ出力をする。
デフォルト: NO
tcp_wrappers
有効にした場合、 vsftpd を tcp_wrappers をサポートしてコンパイル
してあれば、外から来る接続は tcp_wrappers のアクセス制御が適用さ
れる。さらに IP ごとの設定のための仕組みがある。 tcp_wrappers で
環境 変 数 VSFTPD_LOAD_CONF を セ ッ ト し た 場 合 ( 訳 注:
/etc/hosts.allow で指定することが可能)、その環境変数で指定したフ
ァイルを vsftpd の設定ファイルとして読み込む。
デフォルト: NO
text_userdb_names
ディレクトリリストを表示した場合、デフォルトではユーザとグループ
の フィールドが ID の数値で表示される。このオプションを YES にす
れば、名前を示す文字列になる。性能上の理由から、デフォルトは NO
である。
デフォルト: NO
use_localtime
有効にした場合、ディレクトリリストの表示にローカルのタイムゾーン
を使用する。デフォルトは GMT での表示である。 FTP の MDTM コマン
ドが返す時刻もこのオプションの影響を受ける。
デフォルト: NO
use_sendfile
使用しているプラットフォーム上で sendfile() システムコールを使う
場合の相対的効果を確認するための、内部的な設定。
デフォルト: YES
userlist_deny
このオプションは userlist_enable が有効な場合にのみ意味を持つ 。
NO にした場合、 userlist_file で指定したファイルに明示的にリスト
されたユーザ以外はログインが拒否される。ログインを拒否する場合、
ユーザにパスワードを尋ねる前に拒否をする。
デフォルト: YES
userlist_enable
有 効にした場合、 userlist_file で指定したファイルをユーザ名のリ
ストとして読み込む。このファイルに名前のあるユーザでのログインし
ようとすると、パスワードを尋ねられる前に拒否される。これは暗号化
されていないパスワードが(ネットワーク上を) 転送されてしまうの を
防ぐのに効果的である。 userlist_deny も参照のこと。
デフォルト: NO
virtual_use_local_privs
YES に設定した場合、仮想ユーザにローカルユーザと同じ権限を使用す
る。デフォルトでは、仮想ユーザは anonymous ユーザと同じ権限を 持
ち、それは(特に書き込み権限に関して)より制限されたものになりがち
である。
デフォルト: NO
write_enable
ファイルシステムを変更するようなすべての FTP コマンドを許可す る
かどうかを制御する。対象となるコマンドは STOR, DELE, RNFR, RNTO,
MKD, RMD, APPE, SITE である。
デフォルト: NO
xferlog_enable
有効にした場合、ログファイルにはアップロードとダウンロードの詳細
が記録される。デフォルトでは、ログファイルは /var/log/vsftpd.log
として置かれるが、 vsftpd_log_file の設定によって変更すること が
可能である。
デフォルト: NO (ただし、サンプルの設定ファイルでは有効になってい
る)
xferlog_std_format
有効にした場合、wu-ftpd で使われているような標準的な xferlog フ
ォーマットで転送ログファイルを作成する。既存の統計情報を生成する
プログラムを再利用できるので、これは便利である。しかしデフォルト
の書式は、より読み易いものである。この形式のログファイルのデフォ
ルトの場所は /var/log/xferlog であるが、 xferlog_file の設定によ
って、これを変更することが可能である。
デフォルト: NO
anon_max_rate
anonymous (匿名) クライアントの最大データ転送レート。秒あたり の
バイト数。
デフォルト: 0 (無制限)
pasv_max_port
PASV でのデータ接続に割り当てるポートの最大値。ファイアウォール
で指定するポートの範囲を狭めるのに使用できる。
デフォルト: 0 (任意のポートを使用)
pasv_min_port
PASV でのデータ接続に割り当てるポートの最小値。ファイアウォー ル
で指定するポートの範囲を狭めるのに使用できる。
デフォルト: 0 (任意のポートを使用)
212.3 セキュアシェル(SSH)
・ssh 関連のコマンドの簡易説明を表示します。
$ echo "ssh sshd sshd_config authorized_keys" | apropos `xargs`authorized_keys (5) - OpenSSH SSH daemon
debrsign (1) - remotely sign a Debian changes and dsc file pair using...
rlogin (1) - OpenSSH SSH client (remote login program)
rsh (1) - OpenSSH SSH client (remote login program)
slogin (1) - OpenSSH SSH client (remote login program)
ssh (1) - OpenSSH SSH client (remote login program)
ssh-add (1) - adds RSA or DSA identities to the authentication agent
ssh-agent (1) - authentication agent
ssh-argv0 (1) - replaces the old ssh command-name as hostname handling
ssh-copy-id (1) - install your public key in a remote machine's authoriz...
ssh-keygen (1) - authentication key generation, management and conversion
ssh-keyscan (1) - gather ssh public keys
ssh-keysign (8) - ssh helper program for host-based authentication
ssh_config (5) - OpenSSH SSH client configuration files
sshd (5) [authorized_keys] - OpenSSH SSH daemon
sshd (8) - OpenSSH SSH daemon
sshd_config (5) - OpenSSH SSH daemon configuration file
sshmitm (8) - SSH monkey-in-the-middle
sshow (8) - SSH traffic analysis tool
・「sshd_config」の設定で、「root」ユーザのログインはデフォルトで禁止されています。
$ man sshd_config | grep -A 3 "PermitRootLogin"
PermitRootLogin
Specifies whether root can log in using ssh(1). The argument
must be ``yes'', ``without-password'', ``forced-commands-only'',
or ``no''. The default is ``yes''.
・公開鍵認証を許可(ssh2のみ)
$ man sshd_config | grep -A 3 "PubkeyAuthentication"
PubkeyAuthentication
Specifies whether public key authentication is allowed. The
default is ``yes''. Note that this option applies to protocol
version 2 only.
・空白で区切ったユーザ名で、許可を設定出来ます。
user_name@host_nameでホスト名も含めて制限できます。
$ man sshd_config | grep -A 12 "AllowUsers\$"
AllowUsers
This keyword can be followed by a list of user name patterns,
separated by spaces. If specified, login is allowed only for
user names that match one of the patterns. Only user names are
valid; a numerical user ID is not recognized. By default, login
is allowed for all users. If the pattern takes the form
USER@HOST then USER and HOST are separately checked, restricting
logins to particular users from particular hosts. The allow/deny
directives are processed in the following order: DenyUsers,
AllowUsers, DenyGroups, and finally AllowGroups.
See PATTERNS in ssh_config(5) for more information on patterns.
・パスワード認証はデフォルトでは「yes」です。
$ man sshd_config | grep -A 2 "PasswordAuthentication\$"
PasswordAuthentication
Specifies whether password authentication is allowed. The
default is ``yes''.
・プロトコルには、バージョン1とバージョン2があります。
認証を行なう順序を指定できます。
バージョン1はセキュリティ上の脆弱性のため、推奨されていません。
$ man sshd_config | grep -A 6 "Protocol\$"
Protocol
Specifies the protocol versions sshd(8) supports. The possible
values are '1' and '2'. Multiple versions must be comma-sepa-
rated. The default is ``2,1''. Note that the order of the pro-
tocol list does not indicate preference, because the client
selects among multiple protocol versions offered by the server.
Specifying ``2,1'' is identical to ``1,2''.
・「X11Forwarding」はデフォルトでは「no」になっているとの説明がありますが、
knoppixの場合は、デフォルトで有効になっています。
$ cat /etc/ssh/sshd_config | grep "X11Forwarding"
X11Forwarding yes
X11Forwarding
Specifies whether X11 forwarding is permitted. The argument must
be ``yes'' or ``no''. The default is ``no''.
When X11 forwarding is enabled, there may be additional exposure
to the server and to client displays if the sshd(8) proxy display
is configured to listen on the wildcard address (see
X11UseLocalhost below), though this is not the default. Addi-
tionally, the authentication spoofing and authentication data
verification and substitution occur on the client side. The
security risk of using X11 forwarding is that the client's X11
display server may be exposed to attack when the SSH client
requests forwarding (see the warnings for ForwardX11 in
ssh_config(5)). A system administrator may have a stance in
which they want to protect clients that may expose themselves to
attack by unwittingly requesting X11 forwarding, which can war-
rant a ``no'' setting.
Note that disabling X11 forwarding does not prevent users from
forwarding X11 traffic, as users can always install their own
forwarders. X11 forwarding is automatically disabled if UseLogin
is enabled.
212.4 TCPラッパー
・TCPラッパーについての簡易説明を表示してみます。
$ echo "inetd\.conf hosts\.allow hosts\.deny libwrap tcpd" | apropos `xargs`
DebianNet (3pm) - create, remove, enable or disable entry in /etc/inetd....
inetd.conf (5) - internet super-server
update-inetd (8) - create, remove, enable or disable entry in /etc/inetd....
hosts.allow (5) - format of host access control files
hosts.deny (5) - format of host access control files
tcpd (8) - access control facility for internet services
tcpdchk (8) - tcp wrapper configuration checker
tcpdmatch (8) - tcp wrapper oracle
tcpdump (8) - dump traffic on a network
・「libwrap」については個別に確認してみます。
$ ldconfig -p | grep libwrap
libwrap.so.0 (libc6) => /lib/libwrap.so.0
・「whereis」コマンドで場所を確認します。
$ echo "inetd\.conf hosts\.allow hosts\.deny libwrap tcpd" | whereis `xargs`
inetd: /usr/sbin/inetd /etc/inetd.conf /usr/share/man/man8/inetd.8.gz
hosts: /etc/hosts /etc/hosts.allow /etc/hosts.deny /usr/share/man/man5/hosts.5.gz
hosts: /etc/hosts /etc/hosts.allow /etc/hosts.deny /usr/share/man/man5/hosts.5.gz
libwrap:
tcpd: /usr/sbin/tcpd /usr/share/man/man8/tcpd.8.gz
・「hosts.allow」「hosts.deny」で指定可能な代表的なオプションを表示します。
$ man hosts.deny | grep "ALL "
ALL The universal wildcard, always matches.
・DNSで正引きと逆引きが一致しないホストはすべて拒否します。
例えば、「netbios name」の指定だけでは一致しません。
$ man hosts.deny | grep -A 5 "PARANOID\$"
PARANOID
Matches any host whose name does not match its address. When
tcpd is built with -DPARANOID (default mode), it drops requests
from such clients even before looking at the access control
tables. Build without -DPARANOID when you want more control
over such requests.
・「hosts.allow」の設定順序は、「ALLOW」 -> 「DENY」です。
ALL : 127.0.0.1 LOCAL : ALLOW
ALL : ALL@ALL : DENY
・knoppixの起動についてのスクリプトは、「/etc/init.d/openbsd-inetd」です。
「/etc/inetd.conf」が見つかると読み込みます。
$ ls /etc/init.d/*inet*
/etc/init.d/openbsd-inetd
・例えば「https」の場合、以下のように設定されています。
$ grep "https" /etc/inetd.conf
#
212.5 セキュリティ業務 ・セキュリティに関する簡易説明を表示してみます。 $ echo "telnet nmap snort fail2ban nc iptables" | apropos -we `xargs` telnet (1) - user interface to the TELNET protocol nmap (1) - Network exploration tool and security / port scanner nc (1) - TCP/IP swiss army knife iptables (8) - administration tool for IPv4 packet filtering and NAT ・knoppixでは、「snort」と「fail2ban」は別途インストールする必要があります。 fail2banは,ログを監視しながら,指定時間内に指定回数以上のイベントが起きると, そのアクセス元のIPアドレスからのアクセスをiptablesを使って遮断するといった 管理を行なうことが出来るアプリケーションです。 ・IDSとは「Intrusion Detection System」の略です。 日本語では「侵入検知システム」と訳されます。 フリーのIDSのひとつに、snortがあります。 ・「/etc/snort」ディレクトリにルールファイルを置き、「/etc/snort/snort.conf」を編集します。 var HOME_NET 192.168.1.0/24 //監視対象とするネットワークアドレスを指定 var EXTERNAL_NET any //すべて許可する場合の設定 var SMTP $HOME_NET //SMTPサーバの指定、または、監視対象ネットワークアドレスの指定 var SMTP [192.168.1.1,192.168.1.2] //HTTPやSQL、DNS等、他にサーバがある場合、アドレスを指定します。 var RULE_SET ./ //「snort.conf」のある場所を指定します。「./」は同じディレクトリ内 ・「snort」を起動するためのユーザを作成します。 「apt-get」を使った場合、自動で作成されます。 # groupadd -g 5000 snort # useradd -u 50001 -g 5000 -d /etc/snort -s /bin/false snort ・主なオプション -D デーモンモードでSnortを起動。特に指定がなければ、ログを/var/log/snort/alertファイルに出力する -h 自分の属するネットワークを指定 -c 設定ファイルを指定 -l 出力されたログを保存するディレクトリを指定 -b ログをtcpdumpのフォーマットで保存 -d アプリケーション層のデータをダンプする -u Snortを起動するユーザーを指定 -g Snortを起動するユーザーの属するグループを指定 -e リンク層のパケットのヘッダを表示したり、ログとして保存する -i パケットをスニフするインターフェイス名を指定 -v コンソールにパケットを表示する ・動作モード 「sniffer mode」と「Packet Logger Mode」は単純なスニッファとして動作します。 ※旧Ethereal -> 現Wiresharkと基本的には同じ種類の動作を行ないます。 http://homepage2.nifty.com/protocol/wireshark/ 「Network Intrusion Detection Mode」がIDSとして動作します。 -------------------------------------------------------------------------------- 「sniffer mode」 -> コンソール出力 パケットの取りこぼしを極力避ける場合は、「-v」オプションを外します。 # /usr/local/bin/snort -v 「Packet Logger Mode」 -> ログに出力 「-l」オプションで、ログを保存するディレクトリを指定します。 # /usr/local/bin/snort -v -l /var/log/snort 「Network Intrusion Detection Mode」 -> IDSとして動作 ネットワーク型IDSとして機能します。 このモードではルールに沿った攻撃を検知することが可能になります # /usr/local/bin/snort -D -h 192.168.1.0/24 -c /etc/snort/snort.conf -l /var/log/snort -b -d -u snort -g snort ・「tail -f」コマンドで、検知した通信を確認します。 $ tail -f /var/log/snort/alert [**] [100:1:1] spp_portscan: PORTSCAN DETECTED from 192.168.1.100 (THRESHOLD 4 connections exceeded in 0 seconds) [**] 05/07-20:59:34.027914 -------------------------------------------------------------------------------- ・fail2banについて 設定ファイルは、「/etc/fail2ban/jail.conf」です。 「[DEFAULT]」 から、次の「 [jail_title] 」か、ファイルの最後までが設定内容です。 「[jail_title]」の設定内容は「[DEFAULT]」の設定内容を上書きします。 「filter」でログに現れるパターンを見つけます。 「action」で実行する処理を指定します。 「backend」には、一定間隔ごとにlogを監視するpollingというオプションと、 Gaminというファイルの変化を通知するデーモンを使うオプションがありますが、 一般的には「auto」を指定します。 [DEFAULT] ignoreip = 127.0.0.1 //正アクセスとして扱わないアクセス元を指定します bantime = 600 //不正アクセスと認めたときに,アクセスを何秒間遮断するか指定します findtime = 600 // findtime, maxretry : findtime秒間のうちに maxretry = 3 // filterで指定されたパターンにマッチするログが // maxretry回出現すれば不正アクセスとみなします。 backend = auto //ログの監視方法の指定 サンプル問題: 113.1 inet、xinetdと関連するサービスを構成して管理する(1) 113.1 inet、xinetdと関連するサービスを構成して管理する(2) 212.5 TCPwrapper 113.7 セキュアシェル(OpenSSH)を設定する 212.4 セキュアシェル (SSH) 212.3 FTP サーバーのセキュリティ 212.2 ルータを構成する 戻る TOP |