次のページ 前のページ 目次へ

5. ネットワークの設定に関する一般的な情報

以下の節では実際にネットワークを設定する前に知っておいた方がよいことに ついてまとめておきます。これらは最も基本となる原理で、あなたが実際に 張ろうとしているネットワークの実際の種類によらず、全てのネットワークに 適用されます。

5.1 何から始めるか?

ネットワークを構築したり設定したりする前に用意しておくべき ものがいくつかあります。まず最も重要なものから。

最新のカーネルソース(なくてもかまいません)

以下の点に注意してください:

最近のディストリビューションのほとんどにはネットワーク機能を有効にした カーネルが付属 しているので、カーネルを再コンパイルする必要はないと思います。よく知ら れているハードウェアを使っていればうまく動作するはずです。例えば 3COM の NIC や NE2000 の NIC, Intel の NIC などです。しかし、カーネルを更 新する必要がある状況になった場合には、以下の手順をご覧ください。

現在お使いのカーネルには、おそらく使いたいネットワークに機能のサポートや 使いたいネットワークカード用のドライバが組み込まれていないのでしょう。 カーネルのソースを入手して、適切なオプションを指定し、カーネルを再構築する 必要があるでしょう。

ただし、これは RedHat, Caldera, Debian, SuSE といったメジャーな ディストリビューションを使っている場合にはもはや当てはまりません。一般 的なハードウェアを使っている限りは、ごく特殊な機能を使わなければカーネル を再コンパイルする必要はないはずです。

最新のカーネルは常に ftp.cdrom.com から入手できます。これは公式サイトではありませんが、大きい帯域幅 を持ち、たくさんのユーザを受け入れることができます。公式サイトは kernel.org ですが、できるだけ ftp.cdrom.com を使ってください。 ftp.kernel.org は非常に負荷が高い状態です。ミラーサイトを使ってください。

[訳注: 日本では ftp.jp.kernel.org を利用するとよいでしょう]

通常カーネルのソースは /usr/src/linux ディレクトリに展開し ます。パッチの当て方やカーネルの構築方法については Kernel-HOWTO を読んでください。 カーネルモジュールの設定方法については ``Modules mini-HOWTO'' をご覧ください。また、カーネルソースと Documentation ディレクトリに入っている README ファイルは、気合いの入った読者には非常に有益な情報が書かれています。

特別に言及しない限り、安定版のカーネルを使うことをお勧めします (バージョン番号の 2 つめの数字が偶数のバージョンです)。開発版のカーネル (2 つめの数字が奇数のバージョン)は内部構造が大きく変わっていたり、その 他さまざまな変更が行なわれているため、今まで動いていたソフトウェアがう まく動かないかもしれません。自分でそれらの問題を解決したり、それらの ソフトウェアに潜む問題を解決できないのであれば、開発版のカーネルは使わ ないほうがいいでしょう。

その一方、この文書で説明する機能の一部はバージョン 2.1 のカーネルの 開発段階で導入されたものです。そこで選ばなければなりません: 2.2 カーネルと全てのツールが更新されたディストリビューションを待って 2.0 に留まるか、2.1 を入手し、その新機能を利用するのに必要な各種 補助プログラムを探し回るかです。この節を書いている 1998 年 8 月の時点 では、2.1.115 が最新バージョンで、じきに 2.2 が出るものと考えられてい ます。

最新のネットワークツール

ネットワークツールとは、Linux のネットワークデバイスを設定するためのプ ログラムです。これらのプログラムを用いてネットワークデバイスにアドレス を割り当てたり、経路情報を設定したりします。

最近の Linux ディストリビューションには、大抵ネットワークツールも含ま れています。ですから、システムはディストリビューションからインストール していて、ネットワークツールはまだインストールしていないようなら、 インストールしてください。

ディストリビューションを使わずにシステムを構築した場合には、ネットワー クツールはソースコードを入手してコンパイルする必要があります。しかし、 これはそんなに難しい作業ではありません。

ネットワークツールは Bernd Eckenfels がメンテナンスしており、 ftp.inka.de から入手可能です。ここは ftp.uk.linux.org にミラーされています。

また、RedHat の最新パッケージを net-tools-1.51-3.i386.rpm から入手できます。

お使いのカーネルのバージョンにあったバージョンを入手して、インストール の際は付属の文書の指示に従ってください。

この文書を執筆している時点での最新版のネットワークツールをコンパイル してインストールするには以下のようにします:

        user% tar xvfz net-tools-1.33.tar.gz
        user% cd net-tools-1.33
        user% make config
        user% make
        root# make install
        

RedHat のパッケージを使う場合には以下のようにします:

        root# rpm -U net-tools-1.51-3.i386.rpm
        

さらに、ファイアウォールを設定したり、IP マスカレード機能を使いたい場合は、 ipfwadm コマンドも必要です。ipfwadm の最新版は ftp.xos.nl から入手できます。このコマンドにもいくつかのバージョンがあるので、 カーネルのバージョンに合ったものを入手してください。Linux の ファイアウォール機能は 2.1 の開発中に変更され、カーネル 2.2 では ipchains に置き換えられたので注意してください。 ipfwadm はカーネル 2.0 でしか使えません。 以下のディストリビューションには 2.0 以前のカーネルが付属していること がわかっています。

        Redhat 5.2 以前
        Caldera 2.2 より前のバージョン 
        Slackware 4.x より前のバージョン
        Debian 2.x より前のバージョン
        

この文書の執筆時点での最新版をインストールするには、 The Linux Documentation Project にある IPChains HOWTO を読んでください。

バージョン 2.2(または 2.1 後期)のカーネルを使っている場合は、 ipfwadm はファイアウォールの設定を行うための正しいプログラムでは ありません。このバージョンの NET-3-HOWTO では今のところファイアウォール の新しい設定方法は扱いません。ipchains に関する詳しい情報が必要ならば、 先に紹介した HOWTO を見てください。

各種ネットワーク用アプリケーションプログラム

ネットワークアプリケーションプログラムとは、telnetftp などと、それらのサーバプログラムのことです。これらの大部 分は、以前は David Holland がメンテナンスしていましたが、現在は netbug@ftp.uk.linux.org がメンテナンスしています。配布物は ftp.uk.linux.org から入手可能です。

IP アドレスの説明

インターネットプロトコル用のアドレスは 4 バイトから構成されています。 アドレスは「ドット区切りの 10 進表記」で表示するのが普通です。この書き 方では、それぞれのバイトを 10 進数(0-255)に変換し、頭の 0 は省略し、各 バイトを `.' で区切って示します。通常、ホストやルータの持つ ネットワークインターフェイスそれぞれに 1 つの IP アドレスを割り当てます。目 的によっては、一台のマシンの複数のポートに同じ IP アドレスを付けること も可能ですが、複数のインターフェイスには、それぞれ独自の IP アドレスを 付けるのが普通です。

インターネットプロトコルで構成されたネットワークは、一連の IP アドレス が集まって構成されています。1つのネットワークの IP アドレスには共通 部分が必要です。1つのネットワーク全体に共通なアドレスの部分 をアドレスの「ネットワーク部」と呼びます。残りの部分を「ホスト部」と呼 びます。1つのネットワークの中で共通しているネットワークアドレス分のビッ ト数をネットマスクと呼び、アドレスのうちどこまでがネットワーク部で、ど こからがホスト部かを定義しています。例えば、以下のような場合を考えてく ださい。

        -----------------        ---------------
        ホストアドレス           192.168.110.23
        ネットワークマスク       255.255.255.0
        ネットワーク部           192.168.110.
        ホスト部                            .23
        -----------------        ---------------
        ネットワークアドレス     192.168.110.0
        ブロードキャストアドレス 192.168.110.255
        -----------------        ---------------
        

ホストに付けられたアドレスのうち、ネットマスクとビットごとに論理積(AND)を取っ たものがネットワークアドレスになります。すなわち、ネットワークアドレス は、それぞれのネットワークに割り当てられたアドレスの最小のものになりま す。つまり、ネットワークアドレスはアドレスのホスト部を全て 0 にした ものです。

ネットワークに接続されているホストは自分自身のアドレスに送られたパケッ トを受けとりますが、それ以外にも「ブロードキャストアドレス」という特別 に設定されたアドレスに送られたパケットも受けとります。ブロードキャスト アドレスは、ネットワーク上にいる全てのホストにパケットを送りたい場合に 利用する特別のアドレスです。経路情報や各種の警告メッセージなどはブロー ドキャストアドレスへ送出され、ネットワーク上にいる全てのホストが同時に 受けとることができます。ブロードキャストアドレスはそのネットワークで利 用可能な最大の IP アドレスにすることが慣例になっています。例えば、上記 の例ではブロードキャストアドレスは 192.168.110.255 になってい ます。何らかの理由からネットワークアドレスとブロードキャストアドレスを 同じにしているサイトがあるかもしれません。実用上はどちらにしておいても 大差はありませんが、ネットワーク上の全てのホストは同じブロードキャスト アドレスを使わなければなりません。

IP プロトコルの開発の早期の段階で、管理上の理由から、いくつか の IP 番号のグループがネットワークを構成するようになり、またこれらの ネットワークがグループ分けされて、いわゆる「クラス」へと発展しました。 IP アドレスにおけるクラスはそのネットワークで 使用できるホストの数を決定します。ネットワークのクラスは以下のように分 けられています。

        ---------------------------------------------------------------
        |ネットワーク  | ネットマスク  | ネットワークアドレス         |
        |  のクラス    |               |                              |
        ---------------------------------------------------------------
        |    A         | 255.0.0.0     | 0.0.0.0    - 127.255.255.255 |
        |    B         | 255.255.0.0   | 128.0.0.0  - 191.255.255.255 |
        |    C         | 255.255.255.0 | 192.0.0.0  - 223.255.255.255 |
        |マルチキャスト| 240.0.0.0     | 224.0.0.0  - 239.255.255.255 |
        ---------------------------------------------------------------
        

どのような IP アドレスを使うかは何をしたいかに依存します。以下に示す ような作業を組みあわせて、必要なアドレスを決めてください。

既存のIPネットワークにLinuxマシンをインストールする場合

既存のIPネットワークにLinuxマシンを接続したい場合、ネットワークの管理 者に相談して以下の情報を教えてもらってください:

これらの情報を使ってあなたのLinuxマシンのネットワークデバイスを設定し ます。正しい設定をしない限りネットワークは使えません。

インターネットへ接続しないネットワークを新しく構築する場合

インターネットへ接続する予定の無いプライベートなネットワークを構築する 場合、どのような IP アドレスを使っても構いません。しかしながら、このよ うなネットワークに使うべき IP アドレスは予め決められています。以 下に示すアドレスを使えば、インターネットとはパケットをやりとりできない ため、誤ってインターネットに接続してしまっても安全です。RFC1597では以 下のアドレスがプライベートネットワーク用に割り当てられています。

        --------------------------------------------------------------
        |    プライベートネットワーク用に予約されたアドレス          |
        --------------------------------------------------------------
        |ネットワーク| ネットマスク  | ネットワークアドレス          |
        |  のクラス  |               |                               |
        --------------------------------------------------------------
        |    A       | 255.0.0.0     | 10.0.0.0    - 10.255.255.255  |
        |    B       | 255.255.0.0   | 172.16.0.0  - 172.31.255.255  |
        |    C       | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |
        --------------------------------------------------------------
        

プライベートネットワーク用のアドレスもクラスごとに用意されているので、 まず構築したいネットワークの規模を考えて、それにふさわしい規模のクラス の IP アドレスを使ってください。

5.2 設定コマンドの置き場所は?

Linux の起動方法にはいくつかの流儀があります。カーネルが起動したとき、 まず実行されるのが init と呼ばれるプログラムです。 init は起動されると設定ファイルである /etc/inittab を読みこみ、システムの起動作業を実行します。init にはいくつか の種類がありますが、全体としては Miguel van Smoorenburg が開発した System V 系のものに収束しました。

init プログラム自体は同じですが、システムの起動の仕方の設定はディ ストリビューションごとに異なります。

/etc/inittab ファイルには、普通は以下のような行があります。

        si::sysinit:/etc/init.d/boot
        

この行は実際の起動方法を管理するシェルスクリプトを指定しています。この ファイルは MS-DOS の AUTOEXEC.BAT と同等の機能を果します。

通常、他のいくつものスクリプトが boot スクリプトから呼び出されます。 ネットワークの設定も、このようなスクリプトのどれかで行われます。

以下の表にシステムごとの違いをまとめました。

---------------------------------------------------------------------------
ディストリ  | インタフェースの設定/経路設定  | サーバの初期化
ビューション|                                |
---------------------------------------------------------------------------
Debian      | /etc/init.d/network            | /etc/rc2.d/*
---------------------------------------------------------------------------
Slackware   | /etc/rc.d/rc.inet1             | /etc/rc.d/rc.inet2 
---------------------------------------------------------------------------
RedHat      | /etc/rc.d/init.d/network       | /etc/rc.d/rc3.d/*
---------------------------------------------------------------------------

Debian と RedHat はシステムのサービスを起動するスクリプトを ディレクトリ全体を使って管理しています(設定情報は普通、これらのファイルの中 にはありません。例えば RedHat は全てのシステム情報を /etc/sysconfig ディレクトリの下に置いており、起動スクリプトは ここから情報を取得します)。起動プロセスを把握したければ、筆者のお勧め は /etc/inittabinit に付属の文書を調べることです。 Linux Journal にもシステムの初期化に関する記事が載る予定です。 この記事が WWW で公開され次第、この文書からもリンクを張ります。

最近のディストリビューションには、一般的なネットワークインターフェイス を設定するためのプログラムは予め含まれています。次に示すような設 定用のプログラムがある場合、手動で設定する前に、これらを使って必要な設 定が可能かチェックしてみてください。

        -----------------------------------------
        ディストリ  | ネットワーク設定プログラム
        ビューション| 
        -----------------------------------------
        RedHat      | /usr/bin/netcfg
        Slackware   | /sbin/netconfig
        -----------------------------------------
        

5.3 ネットワークインターフェイスの作成

多くの Unix では /dev ディレクトリにネットワークデバイス用の スペシャルファイルがありますが、Linux の場合は違います。Linux では ネットワークデバイスはソフトウェアによって動的に作成されるので、 デバイスファイルは不要です。

ほとんどの場合、ネットワークデバイスは、デバイスドライバがハードウェア を検出して初期化する際に自動的に作成されます。例えばイーサネットデバ イスドライバは、 eth[0..n] というインターフェイスを イーサネットハードウェアに順に割り当てていきます。最初に検出された イーサネッカードが eth0、次が eth1 のようになります。

例外もいくつかあり (注目すべきは slipppp)、 これが使うネットワークデバイスはデバイスドライバではなくユーザプログラ ムが作成します。それぞれのデバイスに付けられる番号は、デバイスドライバ が割り当てるのと同様に順に振られていきますが、起動時にデバイスが自動的 に作成されるということはありません。なぜこのようになっているのかと言う と、イーサネットデバイスとは異なり、slipppp デバ イスは、マシンの稼働中に必要な数が変化するからです。詳細については後述 します。

5.4 ネットワークインターフェイスの設定

ネットワークの設定に必要なプログラムと情報が揃ったら、ネットワークインター フェイスの設定を始めましょう。ネットワークインターフェイスの設定とは、 ネットワークデバイスに適切なアドレスを割り当てたり、その他ネットワーク デバイスを設定するための適切な値を指定することです。このためのプログラ ムがifconfig(interface configure)コマンドです。

ifconfig は、通常以下のような書式で使います:

        root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
        

この例では、``eth0''イーサネットインターフェイスに `192.168.0.1' という IP アドレスと `255.255.255.0' というネットマスクを設定しています。コマンドの後ろにある `up' はインターフェイスをアクティブにする指定ですが、これはデフォルトの動作 なので、普通は省略できます。インターフェイスを停止させるには、単に ``ifconfig eth0 down'' を実行してください。

カーネルはインターフェイスを設定する際、あるデフォルト値を想定します。 例えば、あるインターフェイスに対してネットワークアドレスとブロードキャ ストアドレスを設定できますが、上記の例のようにこれを設定しなかった場合 には、カーネルは指定したネットマスクに基づいて、適切な値を推測します。 ネットマスクを与えなかった場合には、IP アドレスが属するネットワークク ラスに基づいて設定が行われます。上記の例では、このインターフェイスに クラス C のネットワークアドレスが割り当てられたことをカーネルが認識し、 ネットワークアドレスとして `192.168.0.0' を、 ブロードキャストアドレスとして `192.168.0.255 を自動的に割り 当てます。

ifconfigコマンドで指定できるオプションはいろいろあります。もっ とも重要なものを列挙すると、

up

このオプションはインターフェイスを利用可能(アクティブ)にします。

down

このオプションはインターフェイスを停止させます。

[-]arp

このオプションは、このインターフェイスで ARP(Address ResolutionProtocol) を使うかどうかを指定します。

[-]allmulti

このオプションは、全てのハードウェアマルチキャストパケットの受信を有効 にするか無効にするかを指定します。ハードウェアマルチキャストを使うと、 特殊な終点アドレスに向けられたパケットを複数のホストで受け取ることがで きます。デスクトップ用のビデオ会議アプリケーションを使っている場合には このオプションは重要ですが、普通は使われません。

mtu N

このパラメータはデバイスの MTU(Maximum Transfer Unit)を設定し ます。

netmask <アドレス>

このパラメータはデバイスが接続しているネットワークのネットワークマスク を設定します。

irq <IRQ 値>

このパラメータは特定の種類のハードウェアにしか使えませんが、デバイスの ハードウェアの IRQ を設定します。

[-]broadcast [アドレス]

このパラメータで、指定したブロードキャストアドレス宛のデータグラ ムを受け取るかどうかを設定できます。

[-]pointopoint [アドレス]

このパラメータは、slipppp などの一対一接続の場合 の接続先アドレスを指定します。

hw <type> <アドレス>

このパラメータは特定の種類のネットワークデバイスのハードウェアアドレス を設定します。イーサネットの場合はそれほど役に立ちませんが、AX.25 のよ うなネットワークの場合には便利です。

ifconfig コマンドはあらゆるネットワークインターフェイスに 使用可能です。pppddip といったユーザレベルのプロ グラムには、必要なデバイスを作成すると自動的にそれらを設定するものがあります。 この場合 ifconfig を手動で使う必要はありません。

5.5 リゾルバの設定

リゾルバ(Name Resolver) は Linux の標準ライブラリの一部で す。リゾルバの主な機能は、人間にとって分かりやすい ftp.funet.fi のようなホスト名を 128.214.248.6 のよう な IP アドレスに変換することです。

名前に含まれるものは?

すでにインターネットのホスト名については御存知だと思いますが、それらが どういう意味で、どのように構成されているかについては御存知ないかもしれ ません。インターネットのドメイン名は階層構造、すなわち木のような構造に なっています。ドメイン とは、一つのまとまり、すなわち複数の ホスト名を一つのグループにまとめたものです。ドメインサ ブドメイン に分割されているかもしれません。 トップレベルドメイン とはサブドメインではないドメインです。 トップレベルドメインについては RFC-920 で規定されています。非常に有名 なトップレベルドメインを以下に示します:

COM

営利組織

EDU

教育機関

GOV

政府機関

MIL

軍事機関

ORG

その他の組織

NET

インターネット関連の組織

Country Designator

特定の国を示す 2 文字のコード

歴史的経緯から、国を表さないトップレベルドメインに属するほとんどの ドメインはアメリカ合衆国にある組織が使っています。ただし、 アメリカ合衆国も独自の国コードである `.us' を持っています。現在で は、この話は .com.org には当てはまりません。アメリカ国外 の会社もこれらのドメインを使っています。

これらのトップレベルドメインそれぞれにはサブドメインがあります。国 を示す 2 文字のコードがトップレベルドメインになっている場合、 サブドメインとしてcomedu, gov, mil, org といった組織の種別を示すドメインが来ます。例えば com.augov.au はオーストラリアの営利組織と政府機関です。これは一般的 な決まりではない点に注意してください。というのも、実際の方針は それぞれのドメインのドメイン名管理機関によって異なるからです。

次のレベルはたいていその組織や団体の名称になります。それより細かい レベルのドメインはそれぞれの組織によって異なりますが、よくあるのは部門 別にサブドメインを設定する方法です。しかし、このレベル以下はどのような サブドメインを作ることも可能なので、それぞれの組織ごとに、ネットワーク の管理者がふさわしい分け方を設定しています。

もっとも左に位置する名前が、たいていの場合、そのマシンに付けられた 独自の名前で、ホスト名と呼ばれます。ホスト名よりも右側の部分 をドメイン名と呼び、両者を合せた完全な名前を「完全に記述 された名前(Fully Qualified Domain Name(FQDN))」と呼びます。

Terry のホストを例にしましょう。完全に記述された名前は `perf.no.itg.telstra.com.au' です。この場合、ホスト名は `perf' でドメイン名は no.itg.telstra.com.au です。 ドメイン名のうち、トップドメイン名は彼の国であるオーストラリアを示し、 彼のメールアドレスは営利組織なので次のレベルのドメインは .com です。会社の名前は `telestra' で、それ以下のサブドメイン名の 構造は組織の構造を反映したものになっています。ここに示した例では、彼の マシンはネットワーク管理部門(no, Network Operations)の 情報技術グループ(itg, Information Technology Group)に属してい ます。

普通、名前はずっと短くなっています。例えば、筆者の ISP は ``systemy.it'' ですし、筆者が所属する非営利の組織は ``linux.it'' です。どちらにも comorg といったサブドメインはないので、 筆者のホストは単に ``morgana.systemy.it'' であり、 rubini@linux.it が有効なメールアドレスです。ドメインの所有者には ホスト名やサブドメインを登録する権利がある点に注意してください。 例えば、筆者が属する LUG は pluto.linux.it というドメインを使って います。なぜなら、linux.it の所有者が LUG のためにサブドメインを 開放してくれたからです。

必要な情報

まず、あなたのホストがどういうドメインに属しているかを知る必要がありま す。リゾルバは名前の変換サービスを `ドメインネームサーバ(DNS)' に問い合わせるので、利用可能なネームサーバの IP アドレスも知っておく必 要があります。

関連するファイルは 3 つあり、それらを順に見ていくことにします。

/etc/resolv.conf

/etc/resolv.conf はリゾルバの使う一番重要な設定ファイルで す。このファイルの書式はごく簡単で、各行に 1 つのキーワードを配した テキストファイルになっています。よく使われるキーワードは以下の 3 種です:

domain

このキーワードはローカルのドメイン名を設定します。

search

このキーワードはホスト名を検索する際に用いるドメイン名のリストを指定し ます。

nameserver

このキーワードは、名前を解決する際に使うドメインネームサーバの IP ア ドレスを指定します。複数のサーバを指定できます。

例として、以下の /etc/resolv.conf を見てみましょう:

        domain maths.wu.edu.au
        search maths.wu.edu.au wu.edu.au
        nameserver 192.168.10.1
        nameserver 192.168.12.1
        

この例ではドメイン名を付けずにホスト名のみ指定した場合に、デフォル トで追加するドメイン名として maths.wu.edu.au を指定しています。 ホスト名に maths.wu.edu.au を付けた FQDN が見つからなかった場 合、ドメイン名を wu.edu.au にして再度調べます。ネームサーバの エントリは 2 つ設定してあり、リゾルバは 2 つのネームサーバに問い合わせます。

/etc/host.conf

/etc/host.conf ファイルはリゾルバの動作方法を設定する ファイルです。このファイルのフォーマットの詳細は `resolv+' の man ページにあります。ほとんど全ての環境では、以下の設定のままでいいで しょう:

                          
        order hosts,bind                                          
        multi on  
        

この設定の場合、リゾルバはネームサーバに問い合わせる前に、まず自分 自身の持つ /etc/hosts ファイルをチェックします(order hosts,bind)。 そして、/etc/hosts ファイルに複数の IP アドレスが登録されてい た場合、最初のアドレスだけでなく、全てのアドレスを報告します(multi on)。

/etc/hosts

/etc/hosts ファイルは、ローカルのホストの IP アドレスを登 録しておく表です。この表に登録されているホストの IP アドレスについては DNS を引く必要がありません。/etc/hosts の欠点は、登録している ホストの IP アドレスが変わった場合、手動でこのファイルを更新しなければ ならないことです。きちんと管理されたシステムでは、このファイルに登録さ れるホスト名は loopback インターフェイスを示すアドレスとローカルの ホストのアドレスのみです。

        # /etc/hosts
        127.0.0.1      localhost loopback
        192.168.0.1    this.host.name
        

一行目が示すように、一つの行に複数のホスト名を登録できます。この例 では 127.0.0.1 はループバックインターフェイスの IP アドレスです。

ネームサーバの実行

ローカルでネームサーバを実行したければ、これを行うのは簡単です。 DNS-HOWTO と、 お使いのバージョンの BIND (Berkeley Internet Name Domain)に含まれ ている文書を読んでください。

[訳注: DNS-HOWTO の日本語訳は DNS-HOWTO にあります]

5.6 ループバックインターフェイスの設定

ループバックインターフェイスとは、自分自身に接続するために用意された特 別な種類のインターフェイスです。このようなインターフェイスを用意してい るのにはいくつかの理由があります。例えば、実際のネットワークに接続せず にネットワーク用のソフトウェアをテストするなどの目的に使えます。慣例と して、ループバックインターフェイスには `127.0.0.1' というアドレス が使われます。ですから、どんなマシンを使っていようとも telnet で 127.0.0.1 に接続すれば、自分自身に接続することになります。

ループバックインターフェイスの設定は簡単で、次のようにするだけです(た だし、普通はこの作業は標準の初期化スクリプトが実行することに注意してく ださい)。

        root# ifconfig lo 127.0.0.1
        root# route add -host 127.0.0.1 lo
        

route コマンドについては次節で説明します。

5.7 経路制御(ルーティング)

経路制御は大きな話題であり、それだけで分厚い本を書くことができます。 一部の人を別にすれば、ほとんどの人はごく単純な経路制御しか必要ないと思 いますので、以下ではごく基本的な話題についてのみ扱うことにします。より 詳細な情報が必要ならば、この文書の最初に示した各種の文献に当たってくだ さい。

まず定義から始めましょう。IP 経路制御とは何でしょう? 私が使ってい る定義を以下に示します:

IP 経路制御とは、複数のネットワークに接続しているホストが受けとった IP データグラムをどのネットワークに送るかを決めることです。

例を使って示した方がいいでしょう。よくあるオフィス用のルータを想像して ください。このルータはインターネットへの PPP 接続や、ワークステーション の繋がっている多数のイーサネットセグメントや、別のオフィスへの PPP 接続などを備えていること でしょう。このルータがデータグラムを受けとった際、そのデータグラ ムを次にどのポートへ送り出すかを決めるのが IP 経路制御です。ルータでは ない普通のホストにも経路制御が必要です。なぜなら、ネットワークに接続し ている全てのホストは上述した自分自身を指すループバックインターフェイス とネットワーク上にある他のマシンと接続するためのインターフェイス(それ はイーサネットだったり、シリアルポートを使った PPP や SLIP だったりしま す)の 2 つのインターフェイスを持っているため、どちらのインターフェイス にパケットを送り出すか決める必要があるからです。

さて、実際の経路制御はどのように行なわれるのでしょう? それぞれのホスト は経路情報を登録した経路表(ルーティングテーブル)と呼ばれるリストを持っ ています。この表の各行には通常 3 つの欄があります。最初の欄は目的地と なるアドレス、2 つめはデータグラムが送られるべきインターフェイス名、3 つめは必須ではありませんが、お隣のネットワークへデータグラムを転送するホスト の IP アドレスです。最後の欄はゲートウェイフィールドと言います。Linux で は /proc/net/route に経路表が登録されているため、以下のコマン ドで経路表を見ることができます:

        user% cat /proc/net/route
        

あるいは以下のコマンドも使えます:

        user% /sbin/route -n
        user% netstat -r
        

経路制御の方法自体はごく簡単です。データグラムを受けとれば、その目的地 アドレス(誰宛に送られたのか)をチェックして、経路表の各行と比較します。 そのアドレスにもっともよく一致する行が選択され、データグラムはその行が 指定するインターフェイスへ送られます。 その行にゲートウェイフィールドが登録されていれば、データグラムは指定さ れたインターフェイスを経由してそのホストに送られます。ゲートウェイフィー ルドが無い場合、目的地アドレスはその行が指定したインターフェイスが接続 しているネットワーク上にあるものとみなされます。

この経路表を操作するには `route' という専用のコマンドを使いま す。このコマンドは引数をカーネルのシステムコールに変換して、カーネルの 経路表に追加したり、削除したり、変更したりします。

簡単な例を示します。イーサネットのネットワークを使っていると想像してく ださい。ネットワークはクラス C で、ネットワークアドレスは 192.168.1.0 です。あなたのマシンの IP アドレスは 192.168.1.10 、インターネットに接続しているルータのアドレス は 192.168.1.1 になっています。

インターフェイスを設定するための最初のステップは、上述した通り `ifconfig' です。

        root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
        

次に、経路表にエントリを登録して、「目的地アドレスとして 192.168.1.* に一致するデータグラム が届いたら、イーサネットデバイスに送る」ということをカーネルに教える必 要があります。そのためには以下のコマンドを使います。

        root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        

`-net' という引数に注意してください。この指定で route プログラムはこのアドレスがネットワークであると認識しま す。ここで -host を指定すると、一つの IP アドレスのみを指定し た経路になります。

この経路を登録することで、あなたのいるイーサネットセグメント上にいる全 てのホストと IP 接続できます。しかし、同じセグメント上にいないホストの 場合はどうするのでしょう?

起りうる全てのネットワークへの経路を登録することは不可能ですので、特別 の仕組みが用意されています。この仕組みを「既定の経路(デフォルトルート)」 と呼びます。「既定の経路」は全ての目的地アドレスにマッチしますが、優先 順位が低く、他にマッチする行があった場合、そちらの方が優先されることに なります。「既定の経路」の考え方は単純で、「その他全てをここに送る」と いうことです。今考えているネットワークでは以下のように「既定の経路」を 設定します:

        root# route add default gw 192.168.1.1 eth0
        

`gw' の指定により、 route コマンドはその次の引数が ゲートウェイまたはルータの IP アドレスまたはホスト名であると認識します。 このエントリに一 致する全てのデータグラムはこのアドレスに送られ、以降の経路制御はこのゲー トウェイかルータが考えることになります。

以上をまとめると次のようになります:

        root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
        root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        root# route add default gw 192.168.1.1 eth0
        

ネットワークを設定している `rc' ファイルを詳細に調べると少な くともその一つにこれとよく似た設定が見つかるはずです。これはごく一般的 な設定です。

次に多少複雑な経路の設定を見てみましょう。先に考えたルータを設定してい ると想像してください。このルータは PPP でインターネットに接続し、複数 の LAN セグメントが接続されています。具体的には 3 つのイーサネットセグメ ントと 1 つの PPP 接続があると考えましょう。その場合、経路設定は以下の ようになるでしょう。

        root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        root# route add -net 192.168.2.0 netmask 255.255.255.0 eth1
        root# route add -net 192.168.3.0 netmask 255.255.255.0 eth2
        root# route add default ppp0
        

このルータのつながったネットワークを使っているそれぞれのワークステー ションは、先に述べた、より簡単な形式の設定になり、ルータのみがネットワーク への経路を別々に登録することになります。それぞれのワークステーションの場 合、「既定の経路」を使ってルータにデータグラムを送りますが、ルータの場 合はそれらを適切な経路に送り出す必要があります。 上記のルータの設定でデフォルトの経路の設定に`gw' が無いのを不 思議に思うかもしれませんが、その理由は簡単で、PPP や SLIP といったシリ アル経由の接続は一対一の接続になっているからです。接続先が一台のマシン になっているため、他に選択の余地が無く、そのマシンをゲートウェイとして 設定する意味は無いわけです。イーサネットや arcnet、トークンリングといっ た種類のネットワークの場合、それらのネットワーク上には多数のホストがあ るので gw オプションを指定する必要があります。

さて、routed プログラムは何をしているのでしょう?

上述した経路設定は単純なネットワーク構成に適しており、取り得る経路は一 つしかありませんでした。もっと複雑なネットワーク構成になれば設定はもう 少し複雑になります。幸いなことに、大部分の人はそのような設定を使う必要 はありません。

上述してきた「手動経路設定」すなわち「静的経路設定」の大きな問題点は、 ネットワークの中のマシンやどこかの接続がダウンした場合、データグラムを 別の経路へ送るようにするには、(別の経路がある場合だけですが)設定を変更 するために必要なコマンドを手動で実行しなければならないことです。通常、この 作業は面倒で、手間がかかり、非実用的で、トラブルの原因になりがちです。 そのため、ネットワークにトラブルが生じた場合、別の経路を探して自動的に 経路表を変更するための様々な技術が開発されてきました。これらはまとめて 「動的経路制御プロトコル」と呼ばれています。

一般的な動的経路制御プロトコルのいくつかについては御存知かもしれません。 多分、これらのプロトコルの中で最も有名なものは RIP(Routing Information Protocol) と OSPF(Open Shortest Path First Protocol)でしょう。RIP は小〜 中規模な組織や、一つのビルの中といった小規模なネットワークで最も広く使 われているプロトコルです。OSPF は新しく開発されたプロトコルで、大規模 なネットワークの設定やネットワークの中に多数の経路がありうる場合により 適しています。 これらのプロトコルを実装したプログラムとして、`routed' - RIP のみ、と `gated' - RIP と OSPF、その他に対応、があります。 `routed' プログラムはたいていの Linux の配布パッケージに含ま れており、上述した `NetKit' パッケージにも入っています。

具体的な例を使って動的経路制御プロトコルがどのように働くのか見てみましょ う。以下のようなネットワークを考えます。

    192.168.1.0 /                         192.168.2.0 /
       255.255.255.0                         255.255.255.0
     -                                     -
     |                                     |
     |   /-----\                 /-----\   |
     |   |     |ppp0   //    ppp0|     |   |
eth0 |---|  A  |------//---------|  B  |---| eth0
     |   |     |     //          |     |   |
     |   \-----/                 \-----/   |
     |      \ ppp1             ppp1 /      |
     -       \                     /       -
              \                   /
               \                 /
                \               /
                 \             /
                  \           /
                   \         /
                    \       /
                     \     /
                  ppp0\   /ppp1
                     /-----\
                     |     |
                     |  C  |
                     |     |
                     \-----/
                        |eth0
                        |
                   |---------|
                   192.168.3.0 /
                      255.255.255.0

図のように、A、B、C の 3 つのルータがあります。それぞれのルータにはク ラス C の IP ネットワーク(ネットマスク 255.255.255.0)が設定された一つ のイーサネットのセグメントが接続されています。また、PPP を使って他のルー タに接続され、ネットワークは三角形になっています。

ルータ A の経路表が以下のようになるのは明らかなはずです:

        root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        root# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
        root# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
        

この設定はルータ A と B の間の接続が切れない限り正しく動きます。A と B の間の接続が切れると、A に接続されたイーサネット上のホストから B に接続 されたイーサネット上のホストへは接続できなくなります。なぜなら、ルータ A から B への経路は A の ppp0 を使うことになっており、この接続が切れてい るためです。一方、A と C の間の接続は生きているので、A のイーサネット上 のホストから C のイーサネット上のホストへは通信できます。一方、B と C の 間の接続は生きているので C のイーサネット上のホストから B のイーサネット上 のホストへも通信できます。

さて、ここで A は C と通信でき、C は B に通信できるとしたら、A から B へのデータグラムは C を経由して B に送ることが可能なはずです。このよう な問題を解決するために RIP のような動的経路制御プロトコルが開発されま した。A、B、C それぞれのルータで経路制御デーモンが動いていれば、どれか 一つの接続が切れても、そのネットワークの状態を反映するように自動的に経 路表が調整されます。経路制御デーモンの設定は簡単で、それぞれのルータで 2 つのことをするだけです。ルータ A の場合、

        root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
        root# /usr/sbin/routed
        

経路制御デーモン routed は起動時に使用可能なネットワーク ポート全てを自動的に探して、そのホストの経路表を更新できるようにそれぞ れのネットワークデバイスへメッセージを送ると同時に、他のホストから送ら れてくるメッセージを受けとります。

以上はごく簡単な動的経路制御の説明ですが、充分使えるはずです。より詳細 な説明が必要ならばこの文書の最初に挙げた参考文献を参照してください。

動的経路制御についての重要なポイントは以下の通りです:

  1. 目的地まで複数の経路があり、その中から一つの経路を選ばなければな らない状況にないかぎり、あなたの Linux マシンで動的経路制御デーモンを 動かす必要はありません。これは例えば、IP マスカレードを使おうとしてい る場合などです。
  2. 動的経路制御デーモンは、ネットワークの状態の変化に応じて自動的に 経路表を変更します。
  3. RIP は小〜中規模のネットワークに適しています。

5.8 ネットワーク経由の各種サービスとサーバの設定

ネットワーク経由の各種サービスとそのためのサーバを起動すれば、遠隔地に いるユーザが、ネットワーク経由であなたの Linux マシンを使うことができ ます。サーバプログラムはネットワークポートを監視します。ネットワークポート は特定のホストの特定のサービスを示す手段であり、telnet によるアクセス と ftp によるアクセスをサーバが区別する方法です。遠隔地のユーザが サーバマシンとの接続を確立すると、そのポートを監視しているサーバプログラム (ネットワークデーモンプログラム)は接続を受け付けて動作します。 ネットワークデーモンの動作方法には 2 つの種類があり、どちらの方法も実 際に用いられています。これらを以下に示します:

スタンドアローン型

ネットワークサービス用のプログラムは予め起動されて受け持ちの ポートを監視しており、接続があれば自分で必要なサービスを提供します。

inetd 経由で起動するタイプ

ined サーバはネットワーク接続を受けつけるための特別のデーモン プログラムです。このプログラムは接続を受け付けたとき、必要とされる プログラムを設定ファイルに従って起動します。どのサービスポートも tcp プロトコルと udp プロトコルのどちらを使うようにも設定できます。 ポートは別のファイルに記述されますが、これについては後述します。

設定すべき重要なファイルは 2 つあります。ポート番号をサービス名に 対応づける /etc/services と、inetd デーモンの 設定ファイルである /etc/inetd.conf ファイルです。

/etc/services

/etc/services ファイルは、人間にとって分かりやすいサービス 名と計算機が扱いやすいポート番号を対応させる単純なデータベースです。 このファイルの書式はごく単純で、普通のテキストファイルの各行に データベースのエントリが記述されています。それぞれのエントリは任意の数 の空白文字(タブかスペース)で分離された 3 つのフィールドから構成されま す。また、#から後はコメントとして無視されます。フィールドの構成は 以下のようになっています:

  name      port/protocol        aliases     # comment
  

name

は一語で書かれ、記述するサービスを示します。

port/protocol

このフィールドはさらに 2 つの部分に分かれます。

port

この行が示すサービスを提供するためのポート番号で す。よく使われるサービスには予めポート番号が割り当てられてい ます。詳しくは RFC-1340 をご覧ください。

protocol

このフィールドには tcp または udp を指定します。

注意しておかなければならないことは、18/tcp18/udp は全く異なる意味を持つということです。1つのサービスが同じポートの tcp と udp を使わなければならない技術的な理由はありません。普通はこの常識 通りに指定が行われ、/etc/services に両方のエントリが現れるの は特定のサービスが tcp でも udp でも使える場合だけで す。

aliases

はこのサービスの参照に使える別名を設定します。

ある行の `# 以降に書かれた部分はコメントとして無視されます。

/etc/services ファイルの実例

最近の Linux の各種ディストリビューションでは /etc/services ファイルが予め用意されています。もし 0 からシステムを組みあげなけれ ばならない場合のために、古い Debian ディストリビューションからコピーした /etc/services の例を以下 に紹介します:

# /etc/services:
# $Id: NET3-4-HOWTO.sgml,v 1.14 2000/12/18 02:12:43 morimoto Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992).  Not all ports
# are included, only the more common ones.

tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
msp             18/udp                          # message send protocol
chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source
ftp-data        20/tcp
ftp             21/tcp
ssh             22/tcp                          # SSH Remote Login Protocol
ssh             22/udp                          # SSH Remote Login Protocol
telnet          23/tcp
# 24 - private
smtp            25/tcp          mail
# 26 - unassigned
time            37/tcp          timserver
time            37/udp          timserver
rlp             39/udp          resource        # resource location
nameserver      42/tcp          name            # IEN 116
whois           43/tcp          nicname
re-mail-ck      50/tcp                          # Remote Mail Checking Protocol
re-mail-ck      50/udp                          # Remote Mail Checking Protocol
domain          53/tcp          nameserver      # name-domain server
domain          53/udp          nameserver
mtp             57/tcp                          # deprecated
bootps          67/tcp                          # BOOTP server
bootps          67/udp
bootpc          68/tcp                          # BOOTP client
bootpc          68/udp
tftp            69/udp
gopher          70/tcp                          # Internet Gopher
gopher          70/udp
rje             77/tcp          netrjs
finger          79/tcp
www             80/tcp          http            # WorldWideWeb HTTP
www             80/udp                          # HyperText Transfer Protocol
link            87/tcp          ttylink
kerberos        88/tcp          kerberos5 krb5  # Kerberos v5
kerberos        88/udp          kerberos5 krb5  # Kerberos v5
supdup          95/tcp
# 100 - reserved
hostnames       101/tcp         hostname        # usually from sri-nic
iso-tsap        102/tcp         tsap            # part of ISODE.
csnet-ns        105/tcp         cso-ns          # also used by CSO name server
csnet-ns        105/udp         cso-ns
rtelnet         107/tcp                         # Remote Telnet
rtelnet         107/udp
pop-2           109/tcp         postoffice      # POP version 2
pop-2           109/udp
pop-3           110/tcp                         # POP version 3
pop-3           110/udp
sunrpc          111/tcp         portmapper      # RPC 4.0 portmapper TCP
sunrpc          111/udp         portmapper      # RPC 4.0 portmapper UDP
auth            113/tcp         authentication tap ident
sftp            115/tcp
uucp-path       117/tcp
nntp            119/tcp         readnews untp   # USENET News Transfer Protocol
ntp             123/tcp
ntp             123/udp                         # Network Time Protocol
netbios-ns      137/tcp                         # NETBIOS Name Service
netbios-ns      137/udp
netbios-dgm     138/tcp                         # NETBIOS Datagram Service
netbios-dgm     138/udp
netbios-ssn     139/tcp                         # NETBIOS session service
netbios-ssn     139/udp
imap2           143/tcp                         # Interim Mail Access Proto v2
imap2           143/udp
snmp            161/udp                         # Simple Net Mgmt Proto
snmp-trap       162/udp         snmptrap        # Traps for SNMP
cmip-man        163/tcp                         # ISO mgmt over IP (CMOT)
cmip-man        163/udp
cmip-agent      164/tcp
cmip-agent      164/udp
xdmcp           177/tcp                         # X Display Mgr. Control Proto
xdmcp           177/udp
nextstep        178/tcp         NeXTStep NextStep       # NeXTStep window
nextstep        178/udp         NeXTStep NextStep       # server
bgp             179/tcp                         # Border Gateway Proto.
bgp             179/udp
prospero        191/tcp                         # Cliff Neuman's Prospero
prospero        191/udp
irc             194/tcp                         # Internet Relay Chat
irc             194/udp
smux            199/tcp                         # SNMP Unix Multiplexer
smux            199/udp
at-rtmp         201/tcp                         # AppleTalk routing
at-rtmp         201/udp
at-nbp          202/tcp                         # AppleTalk name binding
at-nbp          202/udp
at-echo         204/tcp                         # AppleTalk echo
at-echo         204/udp
at-zis          206/tcp                         # AppleTalk zone information
at-zis          206/udp
z3950           210/tcp         wais            # NISO Z39.50 database
z3950           210/udp         wais
ipx             213/tcp                         # IPX
ipx             213/udp
imap3           220/tcp                         # Interactive Mail Access
imap3           220/udp                         # Protocol v3
ulistserv       372/tcp                         # UNIX Listserv
ulistserv       372/udp
#
# UNIX specific services
#
exec            512/tcp
biff            512/udp         comsat
login           513/tcp
who             513/udp         whod
shell           514/tcp         cmd             # no passwords used
syslog          514/udp
printer         515/tcp         spooler         # line printer spooler
talk            517/udp
ntalk           518/udp
route           520/udp         router routed   # RIP
timed           525/udp         timeserver
tempo           526/tcp         newdate
courier         530/tcp         rpc
conference      531/tcp         chat
netnews         532/tcp         readnews
netwall         533/udp                         # -for emergency broadcasts
uucp            540/tcp         uucpd           # uucp daemon
remotefs        556/tcp         rfs_server rfs  # Brunhoff remote filesystem
klogin          543/tcp                         # Kerberized `rlogin' (v5)
kshell          544/tcp         krcmd           # Kerberized `rsh' (v5)
kerberos-adm    749/tcp                         # Kerberos `kadmin' (v5)
#
webster         765/tcp                         # Network dictionary
webster         765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations.  For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined.  This list specifies the port used by the server process as its
#> contact port.  While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convenience to the
#> community.
#
ingreslock      1524/tcp
ingreslock      1524/udp
prospero-np     1525/tcp                # Prospero non-privileged
prospero-np     1525/udp
rfe             5002/tcp                # Radio Free Ethernet
rfe             5002/udp                # Actually uses UDP only
bbs             7000/tcp                # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4 and are unofficial.  Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4       750/udp         kdc     # Kerberos (server) udp
kerberos4       750/tcp         kdc     # Kerberos (server) tcp
kerberos_master 751/udp                 # Kerberos authentication
kerberos_master 751/tcp                 # Kerberos authentication
passwd_server   752/udp                 # Kerberos passwd server
krb_prop        754/tcp                 # Kerberos slave propagation
krbupdate       760/tcp         kreg    # Kerberos registration
kpasswd         761/tcp         kpwd    # Kerberos "passwd"
kpop            1109/tcp                # Pop with Kerberos
knetd           2053/tcp                # Kerberos de-multiplexor
zephyr-srv      2102/udp                # Zephyr server
zephyr-clt      2103/udp                # Zephyr serv-hm connection
zephyr-hm       2104/udp                # Zephyr hostmanager
eklogin         2105/tcp                # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv      871/tcp                 # SUP server
supfiledbg      1127/tcp                # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp            1/ddp                   # Routing Table Maintenance Protocol
nbp             2/ddp                   # Name Binding Protocol
echo            4/ddp                   # AppleTalk Echo Protocol
zip             6/ddp                   # Zone Information Protocol
#
# Debian GNU/Linux services
rmtcfg          1236/tcp                # Gracilis Packeten remote config server
xtel            1313/tcp                # french minitel
cfinger         2003/tcp                # GNU Finger
postgres        4321/tcp                # POSTGRES
mandelspawn     9359/udp        mandelbrot      # network mandelbrot

# Local services

実際には、新しいサービスが作られるたびに /etc/services ファ イルは大きくなっていきます。自分が使っている /etc/services が 不完全かもしれないと不安であれば、新しいディストリビューションから /etc/services をコピーしてくるとよいでしょう。

/etc/inetd.conf

/etc/inetd.conf ファイルは inetd サーバデーモンの設 定ファイルです。このファイルはあるサービスへの要求が来たとき、 inetd がどのように処理するかを指定します。受けつけるサービス それぞれについて、どのネットワークデーモンをどのよ うに起動するかについて inetd に指定してやらねばなりません。

このファイルも書式はごく単純です。普通のテキストファイルで各行に提供す べきサービスが記述してあります。# 以降の部分はコメントと して無視されます。各行には任意の数の空白文字(タブかスペース)で区切られ た 7 つの欄があります。一般的な書式は以下の通りです:

  service  socket_type  proto  flags  user  server_path  server_args
  

service

/etc/services ファイルに指定したそれぞ れのサービス名です。

socket_type

この欄はこのエントリが使用するソケットの種類です。 使えるのは stream, dgram, raw, rdm, seqpacket です。詳細は技術的な話になるので省略しますが、経験 則で言うと、tcp を使ったほぼ全てのサービスは stream を使い、udp を使ったほぼ全てのサービスは dgram を使 います。これ以外のソケットを使うのはごく限られた特殊なサーバだけです。

proto

このエントリが使うプロトコルを示します。ここでの指 定は /etc/services の対応するエントリと一致しておらねばならず、 たいていは tcpudp のどちらかです。Sun の RPC(Remoto Procedure Call)を使ったサービスでは rpc/tcprpc/udp を使うことがあります。

flags

このフィールドには 2 種類しか設定がありません。 waitnowait かのどちらかです。 この欄は、inetd が起動したネットワークサービス用デーモンが 起動後すぐにソケットを解放して、即座に次の接続リクエストが受付け可能となる のか、ネットワークサービス用デーモンが動いている間は新しい接続 を受けつけずに待つのか、を指定します。この項目の指定方法を説明するのもちょっ と難しいのですが、経験則で言うと tcp を使ったサーバでは nowait に、udp を使ったサーバでは wait になっ ているはずです。いくつか例外もありますので、不確実な場合は例 を見てください。

user

このフィールドには、指定したネットワークサービスを起動する ユーザ名を指定します。このユーザ名は /etc/passwd に登録されて いなければなりません。ユーザを指定しておくのはセキュリティ上も役立ちま す。起動するユーザを nobody にしておけば、ネットワークサーバ のセキュリティが破られても被害を最小限に留めることが可能です。もっとも、 この欄はたいていの場合 root になっています。なぜならば、ほ とんどのサービスでは正しく機能するためにルート権限が必要だからです。

server_path

この欄は実際に実行するサーバプログラムを絶対パスで指定します。

server_args

この欄は行の残りの部分全てからなり、なくても 構いません。この欄はサーバデーモンプログラムを起動する際に渡す コマンドライン引数を指定するために使います。

/etc/inetd.conf の例

/etc/services ファイルと同じく、最近の Linux ディストリビューションには充分な /etc/inetd.conf ファイルが付 属しています。ここでも Debian ディストリビューション からコピーしてきた /etc/inetd.conf の例を示すことにしましょう。

# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <tobias@et-inf.fho-emden.de>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#echo           stream  tcp     nowait  root    internal
#echo           dgram   udp     wait    root    internal
discard         stream  tcp     nowait  root    internal
discard         dgram   udp     wait    root    internal
daytime         stream  tcp     nowait  root    internal
daytime         dgram   udp     wait    root    internal
#chargen        stream  tcp     nowait  root    internal
#chargen        dgram   udp     wait    root    internal
time            stream  tcp     nowait  root    internal
time            dgram   udp     wait    root    internal
#
# These are standard services.
#
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.telnetd
ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.ftpd
#fsp    dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.fspd
#
# Shell, login, exec and talk are BSD protocols.
#
shell   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rshd
login   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind
#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rexecd
talk    dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.talkd
ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.ntalkd
#
# Mail, news and uucp services.
#
smtp    stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.smtpd  
#nntp   stream  tcp     nowait  news    /usr/sbin/tcpd  /usr/sbin/in.nntpd
#uucp   stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico
#comsat dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.comsat
#
# Pop et al
#
#pop-2  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.pop2d
#pop-3  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.pop3d
#
# `cfinger' is for the GNU finger server available for Debian.  (NOTE: The
# current implementation of the `finger' daemon allows it to be run as `root'.)
#
#cfinger stream tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.cfingerd
#finger stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.fingerd
#netstat        stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/netstat
#systat stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx
#
# Tftp service is provided primarily for booting.  Most sites
# run this only on machines acting as "boot servers."
#
#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd
#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /boot
#bootps dgram   udp     wait    root    /usr/sbin/bootpd        bootpd -i -t 120
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin         stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind -k
#eklogin        stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind -k -x
#kshell         stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate      stream tcp      nowait  root    /usr/sbin/tcpd  /usr/sbin/registerd
#kpasswd        stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1       dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.mountd
#rstatd/1-3     dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rstatd
#rusersd/2-3    dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rusersd
#walld/1        dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident           stream  tcp     nowait  nobody  /usr/sbin/identd        identd -i

5.9 その他のネットワークに関連した設定ファイル

他にもさまざまなネットワークに関する設定ファイルがあります。通常これ らを修正する必要はありませんが、どのようなファイルが存在し、それらは何 を設定しているかを知っておいても損は無いでしょう。

/etc/protocols

/etc/protocols ファイルは、 TCP/IP パケットに埋めこまれている各 種プロトコルの識別番号とプロトコルを結びつけるデータベースです。 このファイルを使えば、プログラムから特定のプロトコルを識別番号では なく名前で参照できるようになり、tcpdump のようなプ ログラムも、番号ではなくプロトコル名で出力するようになります。この ファイルの一般的な書式は以下の通りです:

  protocolname  number  aliases
  

Debian ディストリビューション に付属の /etc/protocols ファイルは以下の通りです:

# /etc/protocols:
# $Id: NET3-4-HOWTO.sgml,v 1.14 2000/12/18 02:12:43 morimoto Exp $
#
# Internet (IP) protocols
#
#       from: @(#)protocols     5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

ip      0       IP              # internet protocol, pseudo protocol number
icmp    1       ICMP            # internet control message protocol
igmp    2       IGMP            # Internet Group Management
ggp     3       GGP             # gateway-gateway protocol
ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')
st      5       ST              # ST datagram mode
tcp     6       TCP             # transmission control protocol
egp     8       EGP             # exterior gateway protocol
pup     12      PUP             # PARC universal packet protocol
udp     17      UDP             # user datagram protocol
hmp     20      HMP             # host monitoring protocol
xns-idp 22      XNS-IDP         # Xerox NS IDP
rdp     27      RDP             # "reliable datagram" protocol
iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4
xtp     36      XTP             # Xpress Tranfer Protocol
ddp     37      DDP             # Datagram Delivery Protocol
idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport
rspf    73      RSPF            # Radio Shortest Path First.
vmtp    81      VMTP            # Versatile Message Transport
ospf    89      OSPFIGP         # Open Shortest Path First IGP
ipip    94      IPIP            # Yet Another IP encapsulation
encap   98      ENCAP           # Yet Another IP encapsulation

/etc/networks

/etc/networks ファイルは /etc/hosts ファイルとよく似 た機能を持っており、ネットワークアドレスとネットワーク名の対応表になっ ています。/etc/hosts ファイルとの違いは各行に 2 つの欄しか無 いことで、各行は以下のように構成されます:

  networkname networkaddress
  

例えばこのようになります:

        loopnet    127.0.0.0
        localnet   192.168.0.0
        amprnet    44.0.0.0
        

route コマンドを使う際、目的地がネットワークで、そのネットワー クアドレスが /etc/networks に登録されていれば、route コマンドの出力はアドレスではなく名前になります。

5.10 ネットワークのセキュリティとアクセス制御

まず最初に注意しておきますが、悪意を持った攻撃からマシンとネットワーク のセキュリティを守るのは複雑な技術が必要になります。私自身この分野につ いてはとてもエキスパートとは言えません。そのため、以下に有益であろう手 段を紹介しますが、もしセキュリティについて真剣に考えるならば自分自身で 調べてみることをお勧めします。 Security-HOWTO を含めて、 インターネット上にはこの問題についての情報が豊富にあります。

重要な経験則は 「使うつもりのないサーバは起動しない」 ことです。Linux の各種ディストリビューションでは予め全てのサービスが設 定され、それらが自動的に起動するようになっています。最低限の安全を確保 するために、まず /etc/inted.conf に目を通して、使うつもりのな いサービスをコメントアウト(行頭に # を付ける)しておきましょう。 コメントアウトしておいた方がいいサービスは shellloginexecuucpftp といったサービスと、 finger, netstat, systat といった情報提供 用サービスです。

セキュリティとアクセス制御のメカニズムにはさまざまな種類がありますので、 以下ではごく基本的なものだけを説明します。

/etc/ftpusers

/etc/ftpusers ファイルは、特定のユーザを ftp 経由でログインさせない ための簡単な仕組みです。/etc/ftpusers は ftp 接 続があった際に ftp デーモンプログラム ftpd が読みこみます。こ のファイルは単に ftp を許可しないユーザを列挙しただけのものです。この ファイルは以下のような内容です:

        # /etc/ftpusers - users not allowed to login via ftp
        root
        uucp
        bin
        mail
        

/etc/securetty

/etc/securetty ファイルを使うと、どの tty デバイスから root がログオンできるかを指定できます。 /etc/securetty ファイルは login プログラム(通常は /bin/login)が読みます。このファイルにはルートのアクセスを許可 する tty を列挙します。その他の tty からはルートでアクセスできません。

        # /etc/securetty - tty's on which root is allowed to login
        tty1
        tty2
        tty3
        tty4
        

tcpd を使ったホスト別アクセス制御機構

tcpd プログラムは /etc/inetd.conf で見たように、指定 されたサービスをより安全に実行するために、ログインとアクセス制御の機能 を提供します。

inetd から起動されると、tcpd は指定したサービスへの アクセスを許可するか拒否するかを記述した 2 つのファイルを読み込みます。

tcpd/etc/hosts.allow/etc/hosts.deny の 2 つのファイルをこの順に調べ、一致する記述があるかどうかをチェック します。一致する記述がなければそのサービスは全ての人に許可しているもの とみなします。以下では、これらのファイルについて順に説明していきます。 詳しくはそれぞれの man ページを読んでください(まず hosts_access(5) から始めるのがよいでしょう)。

/etc/hosts.allow

/etc/hosts.allow ファイルは /usr/sbin/tcpd 用の設定 ファイルです。hosts.allow ファイルにはどのマシンからの接続を 許可するかの設定を記述します。

このファイルの書式はごく単純です。

        # /etc/hosts.allow
        #
        # <service list>: <host list> [: command]
        

service list

は、このルールを適用するサーバプログラムをコンマで区切って記述します。 サーバプログラムには ftpd telnetd fingerd などがあります。

host list

ホスト名をコンマで区切って記述します。ホスト名の代わりに IP アドレスを 使うことも可能です。ワイルドカードキャラクタを使って複数のホストや IP アドレスを指定可能です。例えば、gw.vk2ktj.ampr.org と書くと 1 つのホストを指定したことになりますが、.uts.edu.au とするとこの文字列で終るホスト(このドメインに属するホスト)全てを指定し たことになります。44. とすると、この IP アドレスで始まるホス ト全てに一致します。設定を簡単にするためにいくつか特別のキーワードが用 意してあります。例えば ALL は全てのホスト名にマッチし、 LOCAL. を含まないホスト名、すなわちそのマシンと 同じドメインにあるマシンにマッチし、PARANOID は登録されている ホスト名と IP アドレスがマッチしない全てのマシン(名前を詐称しているマ シン)に一致します。もう一つ、役に立つキーワードに EXCEPT があ ります。これは例外リストになります。例については後述します。

command

省略してもよいパラメータで、この行の規則が適用された際に実行されるコ マンドへのフルパスを指定します。この機能を使えば、接続してきたホストに 誰がログインしているかを調べたり、誰かが接続しようとしたときにメールなどの 手段を用いて管理者に報せることが可能です。ここには様々な変数が用意され ており、たとえば %h は接続してきたホスト名(ホスト名が分らな い場合には IP アドレス)に変換され、%d は呼び出されたデーモン 名に変換されます。

例を示します:

  # /etc/hosts.allow
  #
  # Allow mail to anyone
  in.smtpd: ALL
  # All telnet and ftp to only hosts within my domain and my host at home.
  telnetd, ftpd: LOCAL, myhost.athome.org.au
  # Allow finger to anyone but keep a record of who they are.
  fingerd: ALL: (finger @%h | mail -s "finger from %h" root)
  

/etc/hosts.deny

/etc/hosts.deny/usr/sbin/tcpd プログラムの設定ファ イルであり、どのホストからの接続を拒否するかを設定します。

以下に簡単な例を示します:

  # /etc/hosts.deny
  #
  # Disallow all hosts with suspect hostnames
  ALL: PARANOID
  #
  # Disallow all hosts.
  ALL: ALL
  

PARANOID の指定は実際のところ不要です。なぜならば、その次の エントリで全ての接続を拒否しているからです。必要に応じてこれらのエント リのどちらかをデフォルトにするのもいいでしょう。

/etc/hosts.denyALL:ALL を設定しておき、 有効にしたいサービスとホストだけを /etc/hosts.allow で許可す るのが最も安全な設定でしょう。

/etc/hosts.equiv

hosts.equiv ファイルは、パスワード無しにあなたのマシンにアク セスできるホストとユーザを指定します。この機能は全てのマシンがあなたの 管轄下にある安全な環境では便利ですが、それ以外の状況ではセキュリティ的 には危険です。あなたのマシンのセキュリティは、このファイルに登録したホ ストの中のセキュリティが最も弱いマシンと同じレベルになってしまいます。 セキュリティを高めるためにはこの機能は使わないようにして、 各ユーザにも .rhosts ファイルを使わないようにさせましょう。

ftp デーモンの適切な設定

多くのサイトで、匿名(anonymous) ftp サーバを動かして、特定の ユーザ ID が無い人々にもファイルのダウンロードやアップロードを許可して います。この機能を使う場合は ftp デーモンが匿名アクセスを正し く処理できるように設定されているかを確認してください。 ftpd(8) の man ページは、この設定のためにかなりの紙幅を費やし ているので、それらの指示に従って設定しているか、常に注意してください。 重要なポイントは /etc/passwd ファイルのコピーを匿名 ftp 用の /etc/ ディレクトリで使わないことです。絶対に必要なアカウント 以外は passwd ファイルから削除しておきましょう。そうしないと総当たり式 の攻撃でパスワードを解読されてしまう危険性があります。

ファイアウォール

あなたのマシンやサーバにまでデータグラムが届きさえしないようにすること はセキュリティ的に優れた方法です。この方法については Firewall-HOWTO で詳しく説明されています。(それよりずっと簡単ですが)本文書でも後述します。

その他のお勧め

宗教的なところもありますが、その他の注意しておくべきポイントを述べてお きます。

sendmail デーモン

これは有名なプログラムですが、 しばしばセキュリティ 的な問題についても報告されます。どうするかはおまかせしますが、私は sendmail は動かさないことにしました。

NFS とその他 Sun の RPC を使うサービス

これについても慎重になる べきです。これらのサービスはさまざまな方法で悪用可能です。NFS のような サービスの代わりを見つけるのは困難ですが、これらを設定する際には誰にマウ ント許可を与えるかに充分注意する必要があります。


次のページ 前のページ 目次へ