Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.2. サーバーセキュリティー

システムがパブリックネットワーク上のサーバーとして使用されると、攻撃のターゲットになります。このため、システムをハードニングし、サービスをロックダウンすることは、システム管理者にとって中程度の重要性があります。
特定の問題に対処する前に、サーバーセキュリティーの強化に関する以下の一般的なヒントを確認してください。
  • すべてのサービスを最新の脅威から保護します。
  • 可能な限りセキュアなプロトコルを使用します。
  • 可能な場合は、マシンごとに 1 つのネットワークサービス種別のみを提供します。
  • すべてのサーバーを注意して監視して、疑わしいアクティビティーを確認します。

2.2.1. TCP Wrapper および xinetd でのサービスのセキュリティー保護

TCP Wrapper は、さまざまなサービスに対してアクセス制御を提供します。SSH、Telnet、FTP などの最新のネットワークサービスは、受信要求と要求されたサービスとの間の保護を提供する TCP Wrapper を使用します。
TCP Wrapper が提供する利点は、追加のアクセス xinetd、ロギング、バインディング、リダイレクト、およびリソース使用制御を提供するスーパーサーバーです。
注記
TCP Wrapper とともに iptables ファイアウォールルールを使用し、サービスアクセス制御内に冗長性を作成 xinetd することが推奨されます。iptables コマンドを使用したファイアウォール 「ファイアウォール」 の実装の詳細は、を参照してください。
以下のサブセクションでは、各トピックの基本知識を想定し、特定のセキュリティーオプションに重点を置いています。

2.2.1.1. TCP Wrapper によるセキュリティーの強化

TCP Wrapper は、サービスへのアクセスを拒否するよりもはるかに多くのことができます。このセクションでは、それらを使用して接続バナーの送信方法、特定のホストからの攻撃の警告、ロギング機能の強化方法を説明します。TCP Wrapper 機能および制御言語の詳細は、hosts_options man ページを参照してください。利用可能なフラグについては、オンラインで利用可能な xinetd.conf man ページを http://linux.die.net/man/5/xinetd.conf 参照してください。このフラグは、サービスに適用可能なオプションとして機能します。
2.2.1.1.1. TCP Wrapper および接続バナー
ユーザーがサービスに接続する際に適切なバナーを表示することは、システム管理者が注意していることを攻撃者が把握できるようにするのに適した手段です。また、ユーザーに提示するシステムに関する情報を制御することもできます。サービスの TCP Wrappers バナーを実装するには、banner オプションを使用します。
この例では、のバナーを実装してい vsftpdます。まずはバナーファイルを作成します。システムの任意の場所に指定できますが、デーモンと同じ名前を付ける必要があります。この例では、ファイルはという名前で /etc/banners/vsftpd、以下の行が含まれます。
220-Hello, %c 
          220-All activity on ftp.example.com is logged.
          220-Inappropriate use will result in your access privileges being removed.
%c トークンは、ユーザー名、ホスト名、ユーザー名および IP アドレスなどのさまざまなクライアント情報を提供し、接続をさらに調整します。
このバナーを受信接続に表示するには、以下の行を /etc/hosts.allow ファイルに追加します。
vsftpd : ALL : banners /etc/banners/
2.2.1.1.2. TCP Wrapper および Attack の警告
特定のホストまたはネットワークがサーバー攻撃を検出すると、TCP Wrapper を使用して、spawn ディレクティブを使用して、そのホストまたはネットワークからの後続の攻撃を管理者に警告できます。
この例では、206.182.68.0/24 ネットワークからの攻撃者がサーバー攻撃の試行を検出していることを前提としています。/etc/hosts.deny ファイルに以下の行を設定して、そのネットワークからの接続試行を拒否し、特別なファイルへの接続をログに記録します。
ALL : 206.182.68.0 : spawn /bin/echo `date` %c %d >> /var/log/intruder_alert
%d トークンは、攻撃者がアクセスしようとしているサービスの名前を提供します。
接続とログを許可するには、spawn ディレクティブを /etc/hosts.allow ファイルに置きます。
注記
spawn ディレクティブは shell コマンドを実行するため、管理者に通知したり、特定のクライアントがサーバーに接続しようとするときにコマンドを実行する特別なスクリプトを作成することが推奨されます。
2.2.1.1.3. TCP Wrapper および強化されたロギング
特定の種類の接続が他の接続に問題がある場合は、severity オプションを使用して、そのサービスのログレベルを昇格できます。
この例では、FTP サーバーのポート 23(Telnet ポート)への接続を試みるユーザーが攻撃者であることを前提としています。これを指定するには、デフォルトの emerg フラグではなくログファイルにフラグを付け info、接続を拒否します。
これを行うには、に以下の行を追加し /etc/hosts.denyます。
in.telnetd : ALL : severity emerg
これはデフォルトのロギングファシリティー authpriv を使用しますが、のデフォルト値から info に優先度が付けられ emerg、ログメッセージはコンソールに直接送信されます。

2.2.1.2. xinetd によるセキュリティーの強化

本セクションでは、を使用 xinetd してトラップサービスを設定し、その xinetd サービスで使用できるリソースレベルを制御する方法を説明します。サービス のリソース制限を設定すると、サービス拒否(DoS)を阻止することができます。DoS)攻撃。xinetd およびの man ページは、利用可能なオプションの一覧 xinetd.conf を参照してください。
2.2.1.2.1. トレースの設定
の重要な機能 xinetd は、ホストをグローバル no_access リストに追加する機能です。この一覧のホスト xinetd は、指定期間または再起動するまで、によって管理 xinetd されるサービスへの接続を拒否します。これは、SENSOR 属性を使用して実行できます。これは、サーバーでポートのスキャンを試行するホストを簡単にブロックする方法です。
を設定する最初のステップは、使用予定外のサービスを選択すること SENSOR です。この例では、Telnet を使用しています。
ファイルを編集し /etc/xinetd.d/telnetflags 行を読み取りに変更します。
flags           = SENSOR
以下の行を追加します。
deny_time       = 30
これにより、ホストによってポートへの接続が 30 分間拒否されます。deny_time 属性の他の許容値は FOREVER です。これ xinetd は再起動するまで有効になる NEVER と、接続とログ記録を可能にする NEVER です。
最後に、最後の行は以下のようになります。
disable         = no
これにより、トラップ自体が有効になります。
を使用すると、望ましくないホストからの接続を検出して停止するのに SENSOR は適していますが、以下の 2 つの欠点があります。
  • スキャンに対しては動作しません。
  • が実行していることを認識している攻撃者 SENSOR は、IP アドレスを偽装し、禁止されているポートに接続することで、特定のホストに対してサービス攻撃をマウントできます。
2.2.1.2.2. サーバーリソースの制御
のもう 1 つの重要な機能 xinetd は、制御下でサービスのリソース制限を設定することです。
これは、以下のディレクティブを使用してこれを行います。
  • cps = <number_of_connections> <wait_period> : 受信接続の速度を制限します。このディレクティブは、以下の 2 つの引数を取ります。
    • <number_of_connections> : 処理する 1 秒あたりの接続数。受信接続の速度がこれよりも大きい場合、サービスは一時的に無効になっています。デフォルト値は gene(50)です。
    • <wait_period> : 無効にした後にサービスを再度有効にするまで待機する秒数。デフォルトの間隔は 10(10 秒)です。
  • 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 サービスがシステムに過度になり、サービス拒否が発生するのを防ぐことができます。