章 5章. サーバーセキュリティ

システムが公共ネットワーク上でサーバーとして使用される場合, 攻撃の対象になります。 このため、システムの強化とサービスのロックダウンはシステム管理者にとって最も重要となります。

特定の問題について調べる前に、次にあげるサーバーのセキュリティ強化に関する 一般的なヒントを再検討してください。:

5.1. TCP Wrappers と xinetd を使用したサービスの安全保護

TCP wrappers はさまざまなサービスにアクセス制御を提供します。SSH、Telnet、FTPなどの最新ネットワークサービスは TCP wrapper を使用します。TCP wrapper は受信要求と要求されたサービスの間で防護の役割を果たします。

TCP wrapper による利点は、追加アクセス、ロギング、バインド、リダイレクト、 リソースの利用制御などを提供するスーパーサービス、 xinetd と関連付けて使用すると増強されます。

ヒントヒント
 

サービスアクセスコントロールを冗長にするためにファイアウォールルールをTCPラッパーと xinetd を一緒に使用するとよいでしょう。IPTablesコマンドでの ファイヤウォール導入についての詳細は章7章 をご参照下さい。

TCPラッパーと xinetd の設定についての詳細は、 Red Hat Enterprise Linux リファレンスガイドTCPラッパーと xinetd の章を参照してください。

次のサブセクションでは各トピックの基本知識があることを想定し、特定のセキュリティオプションに焦点を置いています。

5.1.1. TCP Wrapper を使ってセキュリティを強化

TCPラッパーはサービスへのアクセスを拒否する以外にも多くの機能があります。 このセクションでは接続バナーの送信、特定ホストからの攻撃警告、ロギング機能の向上 などを行なうための使用方法を説明しています。 TCPラッパーの機能と制御言語の全一覧は hosts_options の man ページを参照してください。

5.1.1.1. TCP Wrappers と 接続バナー

威嚇目的のバナーをサービスへ接続したクライアントに送信することは、サーバーが稼動しているシステムを偽装しながらシステム管理者が常に警戒していることを攻撃可能者に知らせる良い方法です。サービスの TCPラッパーバナーを実行するには、banner オプションを使用します。

この例では、vsftpd のバナーを実行しています。 まず、バナーファイルを作成します。ファイルはシステムのどこに格納されても構いませんが、 デーモンと同じ名前でなければなりません。 この例では、ファイル名を /etc/banners/vsftpd とします。

ファイルの内容は次ようになります。:

220-Hello, %c
220-All activity on ftp.example.com is logged.
220-Act up and you will be banned.

%c トークンは、ユーザー名とホスト名、あるいはユーザー名とIPアドレスなどのさまざまなクライアント情報を供給してその接続をさらに脅かします。Red Hat Enterprise Linux リファレンスガイド にTCPラッパーに使用できるその他のトークンの一覧があります。

受信接続に対してこのバナーを表示するには、 次の行を /etc/hosts.allow ファイルに追加します。

vsftpd : ALL : banners /etc/banners/

5.1.1.2. TCP Wrapper と攻撃警告

サーバーを攻撃しているホストまたはネットワークが特定された場合、 TCPラッパーを使って、 spawn指令にてそのホストまたはネットワーク からの攻撃を次回から警告することができます。

この例では、206.182.68.0/24 ネットワークからのクラッカーがサーバーの攻撃を試みて 捕獲されています。/etc/hosts.deny ファイルに以下の行を入力すると、 その接続試行は拒否され特別のファイルにログされます。

 ALL : 206.182.68.0 : spawn /bin/ 'date' %c %d >> /var/log/intruder_alert

%d トークンは攻撃者がアクセスを試みたサービスの名前を提供します。

接続とログを許可するにはspawn指令を/etc/hosts.allow ファイルに 配置します。

注記注記
 

spawn指令がシェルコマンドを実行するため、 特定のクライアントがサーバーへの 接続を試みた場合、特別なスクリプトを作成して 管理者や知らせるか、コマンドを実行します。

5.1.1.3. TCPラッパーと向上したロギング

特定の接続タイプが他の接続タイプより懸念される場合、severity オプションを介してそのサービスのログレベル上げることができます。

この例で FTPサーバー上のポート23 (Telnetポート)に接続を試みている者はクラッカーだとします。クラッカーだと示すためにはデフォルトのinfoフラグの代わりにemergフラグをログファイルに配置し、接続を拒否します。

これを実行するには次のラインを/etc/hosts.denyに配置します:

in.telnetd : ALL : severity emerg

これはデフォルトのauthprivロギング装備を使用しますが、infoのデフォルト値からログメッセージを直接コンソールにログするemergに優先度を上げます。

5.1.2. xinetdでセキュリティーを強化する

xinetdスーパーサーバーは従属サーバーへのアクセスをコントロールする便利な ツールの1つです。このセクションではxinetdでのtrap サービス設定や xinetdサービスがサービス停止攻撃の防御に使用できるなリソース量のコントロール について説明します。使用可能オプションの詳細一覧はxinetdxinetd.confのmanページをご参照下さい。

5.1.2.1. trap の設定

xinetd の重要機能の1つとしてグローバルno_access リストへのホスト追加機能があげられます。 このリストに掲載されているホストは特定の期間又はxinetdが再起動するまで xinetdが監理するサービスへの接続を 拒否されます。 SENSOR属性を使用することにより達成されます。このテクニックはサーバーのポートスキャンを試みるホストをブロックする簡単な方法です。

SENSOR設定の第一歩として利用予定のないサービスを撰択します。この例ではTelnetが使用されています。

/etc/xinetd.d/telnetファイルを編集し、flagsの行を次の通り変更します:

	      flags           = SENSOR

次のラインをかっこ内に追加します:

	      deny_time       = 30

これによりポートへ接続を試みるホストは30分間拒否されます。 その他deny_time属性に使用可能な値として、xinetdが再起動されるまで接続を拒否する FOREVER や接続を容認しログする NEVER があります。

そして、下記ラインを最後のラインとして下さい:

	      disable         = no

SENSORを使用することにより極悪なホストを検出し、接続を拒否することができますが、 難点が2つほどあります。

  • SENSORはステルススキャンには対応できません。

  • SENSORが実行されていることを知る攻撃者は、IPアドレスを偽造し、アクセス禁止ポートに接続することで、特定のホストに対してサービス停止攻撃を仕掛けることができます。

5.1.2.2. サーバーリソースの管理

xinetdのもう一つの重要な機能は、その管理制御下のサービスが使用できるリソース量を制御する能力です。

この機能は下記ディレクティブによって実行されます。:

  • cps = <number_of_connections> <wait_period> — サービスに許可された一秒当たりの接続数を指示します。 このディレクティブには整数値のみ使用できます。

  • instances = <number_of_connections> — サービスに許可された総接続数を指示します。 このディレクティブには整数値、又は UNLIMITEDが使用できます。

  • per_source = <number_of_connections> — サービスに許可された各ホスト当たりの接続数を指示します。このディレクティブには整数値、又は UNLIMITEDが使用できます。

  • rlimit_as = <number[K|M]> — サービスが占有可能なメモリーアドレススペースの量をキロバイト又はメガバイト単位に指示します。このディレクティブには整数値、又は UNLIMITEDが使用できます。

  • rlimit_cpu = <number_of_seconds> — サービスのCPU占有可能時間を秒単位で指示します。このディレクティブには整数値、又は UNLIMITEDが使用できます。

このようなディレクティブを使用することにより、サービス停止の原因となる xinetd によるシステム負荷を防止します。