サービスに対するアクセスの制御

Red Hat Linux システムのセキュリティを維持することが特に重要です。システムのセキュリティを管理する一つの方法として、システムのサービスに対するアクセスを注意深く管理することがあります。特定サービスに対する公衆アクセスを許可する必要があるかもしれません (たとえば、Web サーバを運営する場合の httpd)。ただし、サービスを提供する必要がないならば、サービスをオフにする必要があります - そうすることによって、バグを悪用される可能性が最小になります。

システムサービスへのアクセスを管理する手段はいくつかあります。どの手段を使用するのかを、サービス、システムの構成、および Linux に関するユーザの専門知識のレベルにしたがって決定する必要があります。

サービスに対するアクセスを拒否するための最も簡単な方法は、単純にサービスをオフにすることです。xinetd によって管理されるサービス (このセクションの後半で詳述します) と、/etc/rc.d 階層に属するサービスの起動/停止を設定するには、ntsysv ユーティリティや chkconfig を使用します。これらのツールの方が他の手段 - /etc/rc.d の下にあるディレクトリ群の中にある多数のシンボリックリンクを手作業で編集したり、/etc/xinetd.d の中の xinetd 設定ファイル群を編集したり - よりも使い易いと感じることでしょう

ntsysv はサービスを有効化/無効化するための単純なインタフェースを提供します。ntsysv を使用すれば、xinetd によって管理されるサービスのオン/オフを切り替えることができます。また、ntsysv を使用して、/etc/rc.d 階層に含まれるサービスを起動/停止することもできます。どちらの場合でも、オプションなしの ntsysv コマンドによって現在のランレベルに関する設定が行われます。別のランレベルに関する設定を行うには、ntsysv --levels 016 のようなコマンドを使用します。(この例では、ランレベル 0、1、6 用のサービスを設定することになります。)

ntsysv インタフェースは、テキストモードのインストールプログラムのような動き方をします。一覧を上下にナビゲートするには、[↑] と [↓] を使用します。スペースバーによってサービスの選択/選択解除を行ないます。また、[OK] ボタンや [Cancel] ボタンを「押す」場合にもスペースバーを使用します。サービスの一覧と [OK] ボタン、[Cancel] ボタンの間を移動するには、[Tab] キーを使用します。* はサービスがオンになっていることを示します。[F1] キーを押すと、各サービスに関する簡単な説明がポップアップします。

サービスを有効化/無効化するために、chkconfig を使用することもできます。chkconfig --list コマンドを使用した場合は、システムサービスの一覧と、各サービスがどのランレベル 0-6 で起動される (on) のか、停止される (off) のかが表示されます (一覧の末尾には、xinetd によって管理されるサービス用のセクションがあります。このセクションの後半で説明します)。

chkconfig を使用すれば、特定のサービスが動作しているのか否かを調査することもできます。たとえば、以下のコマンドは、finger デーモンに関するチェックを行います。

$ chkconfig --list finger
finger          on

上記のように、finger は現在のランレベルでオンになっています。

chkconfig --list によって /etc/rc.d のサービスを照会する場合は、以下のようにランレベルごとのサービス設定が表示されます。

$ /sbin/chkconfig --list anacron
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off

さらに重要なのは、chkconfig を使用すれば、指定したランレベルでサービスが起動する (しない) ように設定できることです。たとえば、ランレベル 3、4、5 において nscd をオフにしたい場合は、以下のようなコマンドを使用します。

chkconfig --level 345 nscd off

使用法の詳細については、chkconfig の man ページを参照してください。

インターネットサービスへのアクセスを制御するもう一つの方法として、xinetd を使用することがあります。xinetd は inetd よりも安全な代替手段です。xinetd はシステム資源を保護し、アクセス制御とロギングを実施します。また、特殊目的のサーバ群を起動するために使用することができます。xinetd を使用すれば、特定ホストへのアクセスのみを許可したり、特定ホストへのアクセスを禁止したり、一定の時間帯にのみサービスへのアクセスを許可したり、受信接続の割合や接続による負荷を制限したりすることができます。

xinetd は停止することなく動作し続け、すべてのポート上で管理対象のサービスをリスニングします。管理対象のサービスのいずれかに対する要求が到着すると、xinetd は当該サービスに適したサーバを起動します。

xinetd 用の設定ファイルは /etc/xinetd.conf ですが、このファイルを内容を調べて見れば、その中には 2、3 のデフォルト値と /etc/xientd.d ディレクトリをインクルードするための命令しかないことが分かるでしょう。/etc/xinetd ディレクトリの中のファイル群は、xinetd によって管理される各サービスの設定オプションを含んでいます。したがって、xientd を設定するためには、これらのファイルを編集する必要があります。

/etc/xinetd.d に含まれるファイルの設定方法については、xinetd (8) man ページと xinetd.conf (8) man ページを参照してください。http://www.xinetd.org/ にある xinetd の Web ページもまた、優れた情報源です。

多くの UNIX システム管理者は、TCP ラッパを使用して一定のネットワークサービスへのアクセスを管理することに慣れています。xinetd によって管理されるすべてのネットワークサービス (および libwrap のサポートが組み込まれているプログラム) は、TCP ラッパを使用してアクセスを管理することができます。xinetd は、/etc/hosts.allow および /etc/hosts.deny ファイルを使用することによってシステムサービスへのアクセスを設定することができます。TCP ラッパを使用したい場合は、hosts_access (5) man ページを参照してください。

システムサービスへのアクセスを管理するためのもう一つの方法として、ipchains によって IP ファイアウォールを設定することがあります。Linux の初心者は、ipchains が最良の策ではないかもしれないことを理解してください。初心者にとって ipchains の設定は複雑かも知れませんし、またその扱い方を最もよく知っているのは、経験のある UNIX/Linux のシステム管理者です。

その一方で、ipchains を使用するメリットは、その柔軟性にあります。たとえば、一定のホストに対するアクセスを一定のサービスに許可するようにカスタマイズしたい場合でも、ipchains ならば可能です。ipchains の詳細については、http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html にある Linux IPCHAINS-HOWTO を参照してください。Linux IPCHAINS-HOWTO は、ドキュメンテーション CD にも格納されています。

その他に、家庭用マシン用の一般的なアクセス規則を設定するためのユーティリティを探している場合、またはあなたが Linux の初心者である場合には、gnome-lokkit ユーティリティを試してみるべきです。gnome-lokkit は、あなたがどのようにマシンを使いたいかを尋ねる GUI ユーティリティです。ユーザの応答にしたがって、gnome-lokkit は自動的に単純なファイアウォールを設定します。