TCP WRAPPER

 

tcp_wrapperは社外からのtelnetを禁止したり、あるネットワークからfingerされたら通知したりする機能を提供します。

サーバに仕掛けるのも簡単で、アクセスし た場合もできなかった場合もログを残してくれるという大変ありがたいプログラムです。

私は以下のところからソースを持ってきました。

ftp://ftp.chiba-u.ac.jp/pub/security/tools/tcp_wrapper/

・tcp_wrappers_7.6.tar.gz

ここではSolaris2.6のマシンにバージョン7.6をインストールした。

1.適当なディレクトリ(自分のホームディレクトリ)に持ってきたソースを解凍する。

% gzip -dc tcp_wrappers_7.6.tar.gz |tar xvf -

2.解凍したディレクトリに移動する。

% cd tcp_wrappers_7.6

3.Makefileの編集その1(一般的な編集)
まず「REAL_DAEMON_DIR」の部分を書きかえる。
ここではtelnetd、ftpdなどがあるディレクトリを指定しているものを選ぶ。
今回はSolaris2.6にインストールするので、

# SysV.4 Solaris 2.x OSF AIX
#REAL_DAEMON_DIR=/usr/sbin

この部分を以下のようにviで修正する。

# SysV.4 Solaris 2.x OSF AIX
REAL_DAEMON_DIR=/usr/sbin

これと同じような記述があるが、これは気にしなくていいらしい。

# SysV.4 Solaris 2.x OSF AIX
#REAL_DAEMON_DIR=/usr/sbin/...

また以下の部分もコメントをはずしておく。

KILL_OPT= -DKILL_IP_OPTIONS

4.Makefileの編集その2(ログの指定)
tcp_wrapperのログを独立してほしい場合にはFACILITYの記述を書き換える必要がある。

#FACILITY= LOG_MAIL     # LOG_MAIL is what most sendmail daemons use <---これを
FACILITY= LOG_LOCAL5    # LOG_MAIL is what most sendmail daemons use <---このように書きかえる

5.コンパイル
make + OS名で実行します。SunOS 5.x なら make sunos5、linuxなら make linuxというように実行。

% make sunos5
エラーが発生したら
% make clean
をして原因を追求してみてください。私はここでエラーが発生しましたが
以下のようにしたらコンパイル成功しました。
% make CC=gcc sunos5

6.バイナリのコピー
コンパイルで作成されたtcpd,tcpdchk,tcpdmatch,try-from,safe-fingerの5つのバイナリを
/usr/sbinにルートになってコピーする。

# cp tcpd tcpdchk tcpdmatch try-from safe_finger /usr/sbin
# chmod 700 /usr/sbin/tcpd
# chmod 711 /usr/sbin/tcpdchk /usr/sbin/tcpdmatch

7.アクセス制御(hosts.allow,hosts.deny)の作成

8./etc/inetd.confの編集
もとからあったものにすぐ戻せるようにコメントアウトしておくと便利だと思います。 

#
# Ftp and telnet are standard Internet services.
#
ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
#ftp    stream  tcp     nowait  root    /usr/sbin/in.ftpd       in.ftpd
#telnet stream  tcp     nowait  root    /usr/sbin/in.telnetd    in.telnetd

#
# Shell, login, exec, comsat and talk are BSD protocols.
#
shell   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
exec    stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
comsat  dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat
talk    dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
#shell  stream  tcp     nowait  root    /usr/sbin/in.rshd       in.rshd
#login  stream  tcp     nowait  root    /usr/sbin/in.rlogind    in.rlogind
#exec   stream  tcp     nowait  root    /usr/sbin/in.rexecd     in.rexecd
#comsat dgram   udp     wait    root    /usr/sbin/in.comsat     in.comsat
#talk   dgram   udp     wait    root    /usr/sbin/in.talkd      in.talkd

9./usr/sbin/tcpdchkで間違いがないかチェック
設定したhosts.allow,hosts.denyにおかしなとこがないかチェックする。
私の場合には以下のようなメッセージが表示されてしまった。 

# /usr/sbin/tcpdchk
warning: /etc/inet/inetd.conf, line 149: /usr/openwin/bin/Xaserver
: not found: No such file or directory

ここでの対応としてはこの表示にあるように、/etc/inetd.confの149行目をコメントアウトしてあげたら
なにもエラーが表示されなくなりました。
またこの時に、「tcpdchk -v」というオプション付きで実行するとより詳しい表示がされます。

10./usr/sbin/tcpdmatchで設定ルールの検証
サーバプログラム名とIPアドレスを引数で渡してやり、
それが設定ファイルによりどのように扱われるかをチェックしてあげる。
実行例を以下に載せます。

# /usr/sbin/tcpdmatch in.telnetd 172.21.172.23
client:   address  172.21.172.23
server:   process  in.telnetd
matched:  /etc/hosts.allow line 2
access:   granted

11./etc/syslog.confの編集 
ファイルに以下の行を追加してあげる。

# tcp_wrapper
local5.info     /var/log/tcpd.log
(なぜかここのスペースをtabにしないとログが作成されなかった。)

12.inetdの再起動

# ps -ef |grep inetd
    root   141     1  0   2月 26 ?        0:06 /usr/sbin/inetd -s
# kill -HUP 141

13.syslogdの再起動

# ps -ef |grep syslogd
    root   167     1  0   2月 26 ?       104:35 /usr/sbin/syslogd -n -z 12
# kill -HUP 167

14.あとはいろいろなことを試してみてください。
Copyright 2002 MINTIA.NET All rights reserved.