TCP Wrapper の設定


TCP Wrapper

TCP Wrapper とは、inetd から起動されるプログラムに対して、どこからサービス 要求が出されたか調べ、ログを記録すると共に、アクセス制御を行うための ソフトウェアです。inetd から起動されるプログラムだけを監視対象としているので 万全とは言えませんが、主要なサービスに対するアクセス制御を手軽に実現するための ツールとして、最低限インストールしなければならないセキュリティツールです。

TCP Wrapper のインストール

TCP Wrapper は非常に幅広く使われているセキュリティ基本ツールであり、様々な anonymous FTP サーバから入手可能です。例えば、
ftp://ftp.chiba-u.ac.jp/pub/security/tools/tcp_wrapper/
より入手できます。ここでは、
tcp_wrappers_7.6.tar.gz
を入手しました。
FreeBSD や Linux ではバイナリパッケージが用意されているので、そちらを 使うのが便利です。FreeBSD の場合は、
# pkg_add tcp_wrappers-7.6.tgz
でインストールは終了です。
バイナリパッケージが用意されていない場合は、ソースファイルからコンパイルし、 インストールします。まず、入手したソースファイルを展開しディレクトリを移動 します。
% tar xvfz tcp_wrappers_7.6.tar.gz
% cd tcp_wrappers_7.6
コンパイルは例えば、OS が SunOS 5.x (Solaris 2.x) なら、以下のようにします。
% make CC=gcc REAL_DAEMON_DIR=/usr/sbin make sunos5
ここで、REAL_DAEMON_DIR には inetd から起動されるデーモンプログラム (in.ftpd や in.telnetd など)が置かれているディレクトリを指定します。 また、SunOS 4.1.x の場合は、
% make CC=gcc REAL_DAEMON_DIR=/usr/etc make sunos4
となります。その他の OS も同じようにしてコンパイルできます。詳しくは Makefile を御覧ください。
コンパイルが終了すると、以下の 5 つのプログラムができています。
tcpd
TCP Wrapper の本体
tcpdchk
TCP Wrapper の設定ファイルが正しいことをチェックするプログラム
tcpdmatch
設定を実験するために、サービス名とアクセス元ホスト名を指定してアクセスの可否を表示するプログラム
try-from
リモートホストから(rshを使って)呼び出し、ホスト情報を表示するプログラム
safe_finger
finger にアクセスしてきた攻撃者の情報を収集するために使用するプログラム
TCP Wrapper にはインストーラが付いていないので、root になってから、これらの プログラムを REAL_DAEMON_DIR にコピーします。
% su
Password:
# cp tcpd tcpdchk tcpdmatch try-from safe_finger REAL_DAEMON_DIR
また、以下のようにしてオンラインマニュアルを所定の位置にコピーしておくと 便利です。
# cp hosts_access.3 /usr/local/man/man3
# cp hosts_access.5 /usr/local/man/man5
# cp tcpd.8 tcpdchk.8 tcpmatch.8 /usr/local/man/man8
以上で TCP Wrapper のインストールは終了です。

TCP Wrapper の設定

TCP Wrapper は、inetd がクライアントからのリクエストに応じてサーバを起動する 仕組みを利用しています。inetd はサーバの代わりに tcpd を起動し、tcpd が クライアントのアクセス権をチェックすると共に、結果をログに記録します。アクセス が認められるクライアントであれば、tcpd は本来のサーバプログラムを起動 します。
ここでは、アクセス制限の方針としては、 とします。
アクセス可否の決定と、リクエストに対するアクションを決定するのは、 /etc/hosts.allow と /etc/hosts.deny という 2 つのファイルで行います。 /etc/hosts.allow ファイルにはアクセスを許可する条件を指定し、/etc/hosts.deny ファイルにはアクセスを拒否する条件を指定します。クライアントからの接続要求は、 まず /etc/hosts.allow ファイルとの一致がチェックされ、次に /etc/hosts.deny ファイルとの一致がチェックされます。どちらにも一致しなかった場合には接続が 許可されます。
どちらのファイルも記入方法は同じであり、付属のオンラインマニュアル hosts_access(5) に詳細やサンプルが書かれているので、そちらを参考にして 下さい。ファイルの形式は、
デーモンのリスト :   クライアントのリスト [: シェルコマンド ]
というようになります。
ここでは、/etc/hosts.deny ファイルで全てのアクセスを禁止しておいて、必要最小限 のものを /etc/hosts.allow ファイルで許可するというようにします。

設定のテスト

TCP Wrapper の設定が終了したら、まず tcpdchk を実行し、設定ファイルにミスが 無いことを確認します。ミスが無ければ何も表示されません。
# cd REAL_DAEMON_DIR
# ./tcpd
次に、様々なサービスと様々なホストを指定して tcpdmatch を実行し、意図した アクセス制限が実現されていることを確認します。tcpdmatcp コマンドは
# tcpdmatch サービス名 ホスト名(IPアドレス)
のようにパラメータを取ります。例えば、
# tcpdmatch in.telnetd mip13.ce.t.kanazawa-u.ac.jp
client:   hostname mip13.ce.t.kanazawa-u.ac.jp
client:   address  133.28.117.200
server:   process  in.telnetd
matched:  /etc/hosts.deny line 1
access:   denied
のように実行します。この例ではアクセスが拒否されています。
最後に、様々なホストやプロバイダ等から実際にアクセスしてみて、意図する アクセス制限が行われており、ログがきちんと残ることを確認します。

戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Mon Oct 4 07:30:16 JST 1999