最 小コストで最 大 限 の 不 正 行 為 対 策

tcp̲wrapperとは？
tcp̲wrapperは外部からのTCP/IPのアクセス制御を行うプログラムです。
tcp̲wrapperは、"tcp̲wrapper"という名前のコマンドがあるわけではなく、1つのツール群、あるいは環境を指しています。各種デーモンプログラムを起動するときにラッパー（包み）として使われるtcpdもそうですし、また、関数ライブラリーとして用意しているlibwrap.aを使用してプログラムに組み込むような場合もtcp̲wrapperを使用していることになります。

実践

Linux

セキュリティー講座

このように、各種デーモン（サーバー）プログラムにコンパイル時に組み込んで使うこともできますが、今回はLinuxに初めからセットアップされている、inetdで起動されるデーモンプログラムについて説明します。
まずLinuxの/etc/inetd.confを見てください。その中にリスト1のような記述があります。
この/usr/sbin/tcpdが各種デーモンプログ
ラムに対してtcp̲wrapperを実現するためのプログラムです。
本連載では取り上げませんが、inetdのセキュリティーを強化しアクセス制御を行うツ

今回はサーバー側（ホスト側）のアクセス制御の1つであるtcp̲wrapperを説明ールとしてx i n e t d というものもありますしたいと思います。tcp̲wrapperは、既存のネットワークサーバープログラムを（Linuxの主なディストリビューションでは標改造することなく、ラップする（包む）ことによってアクセス制御や監視を行う、優れ準で入ってはいないようです）。基本的にはたツールです。現在ではLinuxのいずれのディストリビューションでもデフォルトでtcp̲wrapperと同じ考え方です。

入っています。それだけ現在ではポピュラーなツールとなっています。

inetdはデーモンを起動させる

第9回

tcp̲wrapperでアクセスを制御するinetdのことをマニュアルなどでは「インターネット スーパーサーバー 」といった言葉で表現しています。簡単に言えば各種デーモ

ソフトウェアコンサルタント すずきひろのぶ

ンプログラムを起動させるサーバープログラムだと思えばいいでしょう。
登録されているデーモンが使うポートを監視し、クライアントから接続があればデーモンを起動して、そのクライアントと接続させます。クライアント側からはinetdを意識することなくデーモンに接続します（図1）。
バックグラウンドにデーモンとして事前に334 INTERNET magazine 1999/10

インターネットマガジン／株式会社インプレスR&D©1994-2007 Impress R&D（たくさんの）プログラムを起動させておくの明は省きインストールされていることを前提ではなく、接続要求があった時点でプログラに話を進めたいと思います。

図1

inetdが常にポートを監視ムを起動する方法をinetdは提供しています。
これは、いつ使うか分からないプロセスを常アクセス制御ルールの記述を行うためのファ時動作させておき計算資源を浪費するよりも、イルは次の2つです。

必要な時に起動させたほうが得策という考え

・/etc/hosts.deny

クライアントの要求……アクセス禁止のルールを記述方に基づいています。
その反対に、利用頻度が非常に高いプログラムを、すぐに使えるようにしているのがhttpdの考え方です。すでに接続待ちになっているftpのポートに接続

デーモンに接続

inetdがデーモンを起動
クライアントからの接続をデーモンへ

・/etc/hosts.allow

ようになっています。たとえば……アクセス許可のルールを記述

ALL:ALL

複数のhttpdデーモンがあらかじめ用意されデフォルトでは、何も記述がありませんているので、クライアントの接続要求があれ（少なくともRedHat Linux 5.2では）。初期という表現であれば「すべてのデーモンにば、すぐにサービスを開始できます。もちろ

状態ではインストールされてはいるものの、何対して：すべてのクライアントに対して」といん長時間だれもアクセスしない状態では計算もアクセス制御を行っていない状態、つまり、う意味になります。これがhosts.denyにあれ資源を浪費するだけになってしまいます。

自由にアクセスできる状態です。

ば、すべてのデーモンは、すべてのクライアン

アクセス制御のルールを記述するファイル

アクセス制御ルールを記述する

トからのアクセスを拒否することになります。

/etc/hosts.denyや/etc/hosts.allowをホス
トアクセス制御ファイル（host access control

アクセス制御ルールを確認する

現在のRedHatでは/usr/sbin/tcpdがデフfiles）と呼びます。ドキュメント中あるいはォルトで/etc/inetd.confにセットされていま

マニュアルなどでは単にhosts̲accessといこれから/etc/hosts.deny記述を変更して、す。また、どのディストリビューションにも入う表現をしています。さて、この記述ルールそれが有効かどうかチェックする作業をしまっています。このため、コンパイルなどの説ですが非常に簡単です。ルールはリスト2 のす。まずはチェックのためのコマンド/usr/

リスト1

サーバーとデーモンの違い
デーモン（Deamon）は「バックグラウンドプロセスとして動作し、サービスを提供できるようになっているプログラム」というぐらいの意味になります。時間がくると登録してあった命令を実行するcronなどもデーモンと呼ばれます。

% more /etc/inetd.conf...
ftp
streamtcp
telnetstreamtcp
gopherstreamtcp...

nowaitnowaitnowait

root
root
root

in.ftpd -l -ain.telnetd
gn

リスト2

デーモンリスト:クライアントリスト [ : シェルコマンド ]一方、サーバーは「ネットワーク接続にオプションよりクライアントにサービスを提供すること」というような意味になります。外部か/usr/sbin/tcpd/usr/sbin/tcpd/usr/sbin/tcpd

オプションなどの使い方は次回説明します。

らのネットワーク接続を待つためには、サーバーのプログラムがバックグラウンドプ

リスト3ロセスとして動いている必要があります。
厳密には、サーバーはデーモンではありますが、デーモンは必ずしもサーバーとは限りません。しかし、本文中では、デーモン（デーモンプログラム）とサーバー（サーバープroot権限になる$ su
tcpdchkの実行# /usr/sbin/tcpdchk -v
warning: /etc/inetd.conf, line 35: gn: not found in /usr/sbin: No such file or directory...
warning: /etc/inetd.conf, line 87: /usr/sbin/in.identd: not found: No such file or directory
Using network configuration file: /etc/inetd.confログラム）という言葉を混在させていますが、同じような意味だと思ってください。

インターネットマガジン／株式会社インプレスR&D©1994-2007 Impress R&D

INTERNET magazine 1999/10335

sbin/tcpdchk を説明しましょう。これは/etc/inetd.confと実際のインストールには若ますが、もっとも安全なのは不必要なエント

tcp̲wrapperがどのような状態になっている干の差があります。そのために警告が現れてリーを無効にすることです。何かのオペレーかをチェックするためのコマンドです。

いるだけです。デーモンプログラムがインストションミスで偶然に使えてしまうような状況を避けるためです。

まず、ROOT権限になって、まだ何もしなールされていることは、セキュリティー的にはい状態でtcpdchkを動かしてみてください。

問題を起こしませんが、存在していないエン

この部分に関しては個々のサイトがどのよ

たくさんのワーニングが現れるはずです（リストリーはコメントアウトしておいてください。

うなデーモンを使うかによって異なってくるの。'No such file or directory'というメト3）
ッセージが出ているものは、/etc/inetd.conf

で、一概に「○○と△△のエントリーは無効

不必要なエントリーは無効にの実体であるデーモンプログラムが存在していないという警告です。にすること」とは言えません。自分のサイトのセキュリティーポリシーに従って無効にしにエントリー記述があるにもかかわらず、そ/etc/inetd.confの中から将来使う予定のてください（リスト4）。

ないデーモンのエントリーをコメントアウトしこれは大きな問題ではありません。インスてしまい、実行できないようにしましょう。

トール時にシステムにセットアップされるもちろんhosts.denyでもアクセス制御をしドメイン全体に公開するには本連載はフェイルセーフの方法をとっていリスト4るので、まず全部を接続不可の状態にしてお/etc/inetd.conf

いてから必要なデーモンのみ、接続を許可す

これは一例です。サイトのセキュリティーポリシーに従って無効にしてください。

# Shell, login, exec and talk are BSD protocols.
#shell stream
tcp
nowaitroot/usr/sbin/tcpd#login stream
tcp
nowaitroot/usr/sbin/tcpd#exec stream
tcp
nowaitroot/usr/sbin/tcpd#talk dgram
udp
wait
root/usr/sbin/tcpd#ntalk dgram
udp
wait
root
/usr/sbin/tcpd

る範囲に限って公開する方針をとります。洩
れがあっても「接続不可」の安全な方向に作

in.rshd
in.rlogind
in.rexecd
in.talkd
in.ntalkd

用することが期待できるからです。
まずドメイン全体を許可するという基本の書き方を説明します。大学や企業のようにネットワークが整備され、（内側のネットワークであっても）多数のマシンからアクセスがあ

下線部分は新たにコメントアウトした部分です。
shellとloginを無効にした理由:
・tcp_wrapperで制御されているtelnetでのアクセスを用いるため・今後SSHをインストールし代替して利用するためtalkとntalkを無効にした理由:
・talkもntalkも利用することがないのでる状況では、ドメイン全体にデーモンを公開する場合があるでしょう。そのような場合に有用です。
例 ftpをh2np.netドメイン全体に許す

リスト5

in.ftpd: .h2np.net/etc/hosts.allow
例 内部ネットワーク192.168.1.*からのみftpのアクセスを許す

ドメイン全体に対し（tcpdが設定している）デーモンへのアクセスを許すにはデーモン

in.ftpd: LOCAL,192.168.1.
この最後の .

は忘れやすいので注意

これは192.168.0.10である自分のマシンを許すためリストの部分を ALLと記述します。少し大ざっぱな管理になりますので、注意が必要です。できるだけ本当に必要なデーモンのみ

例 特定のネットワークアドレスのみからのtelnetのアクセスを許すに限っていく方向で考えてください。これはin.telnetd: LOCAL,192.168.1.8

あくまでも一例ということで御理解ください。

このクライアントのみtelnetを許す

カンマはリストを区切る。

例 すべてをh2np.netドメイン全体に許す
ALL: .h2np.net/etc/hosts.deny

ALL:ALL

ドメイン名での記述を使わず、直接ネット

hosts.allow→host.denyまずhosts.allowの内容が優先され、マッチするものが許可される。
次にhosts.denyが有効になり、マッチするものが拒否される。

ワークアドレスを記述する方法も有効です。
SOHOだと内部向けのDNSが用意されていない場合もあるので、このネットワークアドレ

336 INTERNET magazine 1999/10

インターネットマガジン／株式会社インプレスR&D©1994-2007 Impress R&D最 小コストで最 大 限 の 不 正 行 為 対 策スを記述する方法は有用だと思います。また、

図2

サイトのネットワーク構成図

想定しているようなSOHO環境（図2）では、ネットワークアドレス
192.168.0.1

内部ネットワークと境界ネットワークの2つしかないので記述も簡単ですし、何かしらDNSルーター（専用機）に障害があっても継続して利用できます。
hosts.allowとhosts.denyの例を使って、簡サイト

192.168.0.0

ネットワークアドレスが異なるセグメントは、

境
界
ネット

内部
ネ
ット

tcp̲wrapper
サーバー
192.168.0.10
ftp.telnet
可能

プロバイダー
ネットワークアドレス

単に解説してみましょう（リスト5）。in.ftpd

192.168.1.0
192.168.1.8というのはftpサーバの実行プログラム名です。

外部からは一切アクセス不可

LOCALという記述は、自分のマシンからの192.168.0.14

eth0

アクセスを許すという意味です。もし、この192.168.1.1

eth1
PCルーター
クライアントLOCALがなく、許可するIPアドレスのなかにも自分のマシンが含まれていない場合は自分ブロードキャストアドレスブロードキャストアドレス

192.168.0.255

192.168.1.255のマシンであってもアクセスが拒否されます。
ネットワークの指定は192.168.1.というようリスト6にドットで終わらせます。

# /usr/sbin/tcpdchk -v
Using network configuration file: /etc/inetd.conf

制御ルールを再チェックする>> Rule /etc/hosts.allow line 7:
daemons: in.telnetd
clients: LOCAL 192.168.1.
access:granted

自マシンと内部ネットワーク>> Rule /etc/hosts.allow line 8:
daemons: in.ftpd
clients: LOCAL 192.168.1.
access:granted

自マシンと内部ネットワーク>> Rule /etc/hosts.deny line 9:
daemons: ALL
clients: ALL
access:deniedすべてのクライアント

さて、これでhosts.denyとhosts.allowによって最小限の範囲からしかアクセスできないようになりました。これがきちんと有効になっているか、再度tcpdchkを使ってチェックしてみたいと思います。ここでは、ftpとtelnetの接続を内部ネット側（192.168.1.*）と自分自身にのみ許しています（リスト6）。

telnetデーモン
許可

ftpデーモン許可

すべてのデーモン
アクセス拒否

こんどは別の角度からチェックしてみましょう。現在の設定が正しいならば192.168.
1.10はアクセスできて192.168.0.99はアクセ

リスト7# /usr/sbin/tcpdmatch

スできないはずです。このように特定のアドレスからアクセスが可能かどうかをチェックするにはtcpdmatchというコマンドを使います（リスト7）。

client:server:matched:access:192.168.1.10
アクセス元アドレス
指定したクライアントIPアドレス

address 192.168.1.10
process in.telnetd/etc/hosts.allow line 7
granted# /usr/sbin/tcpdmatch

次回はtcp̲wrapperの続きをin.telnetd
デーモン名in.telnetd

指定したデーモン名マッチしたルール
許可している192.168.0.99
境界ネット上の架空のアドレス

次回は、tcp̲wrapperのログに関する情報

client:server:matched:access:address 192.168.0.99
process in.telnetd/etc/hosts.deny line 9
denied

指定したクライアントIPアドレス
指定したデーモン名マッチしたルール
拒否しているや、許可されていないポートへの接続があったときに自動的に報告が行われるといった機能について説明します。

インターネットマガジン／株式会社インプレスR&D©1994-2007 Impress R&D

INTERNET magazine 1999/10

337

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.