LPIC 202


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 (任意のポートを使用)


・pure-ftpd $ whereis pure-ftpd pure-ftpd: /usr/sbin/pure-ftpd /etc/pure-ftpd /usr/share/man/man8/pure-ftpd.8.gz ・標準では、「configure」オプションと、起動時のオプションによって設定されます。 以下のファイルに「python2」を使って設定を行なう場合のスクリプトサンプルがあります。 「/usr/share/doc/pure-ftpd/examples/xml_python_processors.txt.gz」 $ cat /etc/init.d/pure-ftpd | grep "inet" export STANDALONE_OR_INETD=inetd if [ "$UPLOADSCRIPT" -a "$STANDALONE_OR_INETD" != inetd ] && \ $ cat /etc/init.d/pure-ftpd | grep -A 6 "start)" start) test "$STANDALONE_OR_INETD" = standalone || exit 0 echo -n "Starting $DESC: " start-stop-daemon --start $SSDAEMONLOGOPTS --pidfile /var/run/pure-ftpd/pure-ftpd.pid \ --exec $WRAPPER -- $SUFFIX start_uploadscript Starting ;; $ cat /etc/init.d/pure-ftpd | grep -B 1 "conf" if [ "$UPLOADSCRIPT" -a "$STANDALONE_OR_INETD" != inetd ] && \ egrep -i '^[ ]*(yes|1|on)[ ]*' /etc/pure-ftpd/conf/CallUploadScript > /dev/null 2>&1 ・Debianパッケージの場合、「/etc/pure-ftpd/conf」ディレクトリが作成され、 ファイル名の中に「yes」や「no」の値が格納されています。 $ ls /etc/pure-ftpd/conf/ AltLog MinUID NoAnonymous PAMAuthentication PureDB UnixAuthentication ・オプション -a --trustedgid * -A --chrooteveryone -b --brokenclientscompatibility -B --daemonize -c --maxclientsnumber -C --maxclientsperip -d --verboselog -D --displaydotfiles * -e --anonymousonly * -E --noanonymous -f --syslogfacility -F --fortunesfile -g --pidfile -G --norename -h --help * -H --dontresolve * -i --anonymouscantupload -I --maxidletime -j --createhomedir -k --maxdiskusagepct -K --keepallfiles -l --login -L --limitrecursion -m --maxload -M --anonymouscancreatedirs -n --quota -N --natmode -o --uploadscript -O --altlog -p --passiveportrange -P --forcepassiveip -q --anonymousratio -Q --userratio -r --autorename -R --nochmod -s --antiwarez -S --bind -t --anonymousbandwidth -T --userbandwidth -u --minuid -U --umask -v --bonjour -V --trustedip -w --allowuserfxp -W --allowanonymousfxp -x --prohibitdotfileswrite -X --prohibitdotfilesread -y --peruserlimits -Y --tls -z --allowdotfiles -Z --customerproof ※debian のpure-ftpdパッケージには、 「perl ./pure-config.pl /etc/pure-ftpd.conf」のような設定を行なうファイルは存在しません。
・wu-ftpd ftpaccess 全体的な設定 ftpusers アクセスを拒否するユーザを設定します ftphosts アクセスを許可/拒否するホストを設定します デフォルトでは、許可されたホスト内のユーザはアクセスを許可されます。 $ whereis wu-ftpd wu-ftpd: /usr/sbin/wu-ftpd /etc/wu-ftpd /usr/share/man/man8/wu-ftpd.8.gz $ apropos wu-ftpd privatepw (8) - Change WU-FTPD Group Access File Information wu-ftpd (8) - Internet File Transfer Protocol server xferstats.wu-ftpd (8) - displays FTP usage statistics $ echo "ftpaccess ftpusers ftphosts" | xargs apropos ftpaccess (5) - ftpd configuration file ftpusers (5) - ftp の使用を許可しないユーザーをリス... ftphosts (5) - ftpd 個別ユーザホストアクセスファイル ・「ftphosts」では「allow」 -> 「deny」の順番で設定の説明が書かれています。 $ man ftphosts | grep "allow\|deny" allow [ ...] deny [ ...] ・「ftpusers」では、拒否するユーザを設定します。 「root」ユーザの拒否は誰が許可されるか分からない環境のため、必須です。 debianパッケージでは、PAM認証が行なわれます。 --- 例 /etc/ftpusers には以下のようなエントリがあるだろう: # # /etc/ftpusers # root uucp news --- $ man ftpaccess | grep "\[" autogroup [ ...] class [ ...] guestgroup [ ...] guestuser [ ...] realgroup [ ...] realuser [ ...] nice [] defumask [] tcpwindow [] file-limit [] [] data-limit [] [] guestserver [] noretrieve [absolute|relative] [class=] ... [-] allow-retrieve [absolute|relative] [class=]... [-] [ ...] dl-free [ ...] dl-free-dir [ ...] compress [ ...] tar [ ...] virtual
allow [ ...] virtual
deny [ ...] defaultserver deny [ ...] defaultserver allow [ ...] pasv-allow [ ...] port-allow [ ...] lslong [ ...] lsshort [ ...] lsplain [ ...] path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9._]*$ ^\. ^- upload [absolute|relative] [class=]... [-] ["dirs"|"nodirs"] [] anonymous-root [] guest-root [] deny-uid [...] deny-gid [...] allow-uid [...] allow-gid [...] restricted-uid [...] restricted-gid [...] unrestricted-uid [...] unrestricted-gid [...] site-exec-max-lines [ ...] dns refuse_mismatch [override] dns refuse_no_reverse [override] dns resolveroptions [options]
・proftpd 「apache」の設定ファイルに似た構文が使われます。 $ whereis proftpd proftpd: /usr/sbin/proftpd /etc/proftpd /usr/lib/proftpd /usr/share/proftpd /usr/share/man/man8/proftpd.8.gz $ apropos proftpd ftpasswd (8) - manipulates ProFTPD authentication files ftpcount (1) - show current number of connections for each proftpd se... ftpdctl (8) - ProFTPD control program ftpshut (8) - shut down all proftpd servers at a given time ftptop (1) - display running status on proftpd server connections proftpd (8) - Professional configurable, secure file transfer protoc... xferlog (5) - ProFTPD server logfile ・「proftpd.conf」にはコメントアウトされた設定サンプルがあります。 $ less /etc/proftpd/proftpd.conf | wc -l 171 $ man proftpd | grep -A 10 "FILES" FILES /usr/sbin/proftpd /etc/proftpd/proftpd.conf /usr/bin/ftpwho /usr/bin/ftpcount /usr/bin/ftptop /usr/sbin/ftpshut /var/log/xferlog /var/run/run/proftpd.pid /var/run/run/proftpd.scoreboard ・それぞれのFTPサーバでのchroot環境の構築方法

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
## https   stream  tcp nowait  sslwrap.sslwrap /usr/sbin/tcpd  /usr/sbin/sslwrap  -nocert -addr 127.0.0.1 -port 80


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