tcp_wrappers

keyword
tcp_wrappers tcp_wrappers_7.6 SECURITY security tool

●tcp_wrappers_7.6 とは

TCPサービスへのアクセスを監視し、ログ収集や接続許可・拒否などを行ない、サービスを制御できるようにする。 inetdから直接デーモンを起動するのではなく、tcpdが処理を行ない、tcpdからデーモンを呼び出す。

●取得ファイル

tcp_wrappers_7.6.tar.gz
tcpd_rbl_patch.txt(RBLとは(our Realtime Blackhole List).)
tcpd-blacklist-patch

●取得先

ftp://ftp.iij.ad.jp:/pub/security/cert/tools/tcp_wrappers/
ftp://ftp.chiba-u.ac.jp/pub/security/tools/tcp_wrapper/
ftp://info.cert.org:/pub/tools/tcp_wrappers/
ftp://ftp.aist-nara.ac.jp/pub/Security/tool/
ftp://ftp.porcupine.org/pub/security/
http://www.smallworks.com/anti-spam/(tcpd_rbl_patch.txt)
http://maps.vix.com/rbl/(tcpd_rbl_patch.txt)
http://www.zcu.cz/ftp/mirrors/security-tue(tcpd-blacklist-patch)

●インストール

  1. 準備

    MAPS RBL に登録されている悪質なホストからの接続を拒否し、さらに、 ブラックリストを別ファイルで指定できるようにするパッチをあてます。
    上記で取得したソースを解凍・展開、そしてパッチを当てる。
    (tcp_wrappers_7.6.tar.gz tcpd-blacklist-patch tcpd_rbl_patch.txt)

           %/usr/local/bin/tar xzvf tcp_wrappers_7.6.tar.gz
           %cd tcp_wrappers_7.6/
           %/usr/local/bin/patch < ../tcpd_rbl_patch.txt
           %cat ../tcpd-blacklist-patch | /usr/local/bin/patch
           
  2. Makefile の編集。
           %vi Makefile
           %diff Makefile Makefile.org
           47c47
           < REAL_DAEMON_DIR=/usr/sbin
           ---
           > #REAL_DAEMON_DIR=/usr/sbin
           494c494
           < STYLE = -DPROCESS_OPTIONS     # Enable language extensions.
           ---
           > #STYLE        = -DPROCESS_OPTIONS     # Enable language extensions.
           534c534
           < DOT= -DAPPEND_DOT
           ---
           > # DOT= -DAPPEND_DOT
           554c554
           < AUTH  = -DALWAYS_RFC931
           ---
           > #AUTH = -DALWAYS_RFC931
           
  3. コンパイル。
    コンパイルにおいては、make コマンドでいいのだが、ここで、OSを指定する必要がある。
    make とすれば、その方法が表示される。 ここでは、sunos5 を指定する。
           %make sunos5
           
  4. インストール
    コンパイルが終了したら、各コマンドを適切な箇所へコピーする。
           %su
           #cp tcpd tcpdchk tcpdmatch safe_finger try-from /usr/sbin/
           #cp *.3 /usr/man/man3
           #cp *.5 /usr/man/man5
           #cp *.8 /usr/man/man8
           #cp tcpd.h /usr/include/
           #cp libwrap.a /usr/lib/
           #cd /usr/sbin/
           #chown root tcpd tcpdchk tcpdmatch safe_finger try-from
           #chgrp root tcpd tcpdchk tcpdmatch safe_finger try-from
           #chmod 700 tcpd
           #chmod 711 tcpdchk tcpdmatch safe_finger try-from
           
  5. /etc/inetd.conf の編集
    制限をするサービスに対して、下記のように変更をする。
           ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd
           telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
           shell   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
           login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
           finger  stream  tcp     nowait  root    /usr/sbin/tcpd  in.fingerd
           

    (注)finger は 5番めが root でなく、nobody となっていたので、そこも 忘れずに編集。

    書換え後に下記のコマンドにおいて、チェックを行なう。 さらに、安全のため、パーミッションを以下のように変更する。

           #/usr/sbin/tcpdchk
           #chmod 600 /etc/inetd.conf 
           
  6. ログの設定
    tcp_wrapper は syslogd 経由でログを出力する。また、コンパイル時に
           FACILITY= LOG_DAEMON
           SEVERITY= LOG_NOTICE
           
    と指定したので、 syslogd の設定ファイル /etc/syslog.conf に 以下のように付け加える。(間隔はタブ)
           daemon.notice			/var/log/daemonlog
           
    上記のログファイルを作成する。 そして、編集した設定ファイルを syslogd に読み込ませるために syslogd に 対して HUP シグナルを送る。
           #cp /dev/null /var/log/daemonlog
           #chown root /var/log/daemonlog
           #chmod 600 /var/log/daemonlog
           #kill -HUP `cat /etc/syslog.pid` 
           
    これにより、/var/log/daemonlog にメッセージが記録される。
    また、上記のログを一定期間毎に保存していくため、シェルスクリプトとcron機能を利用し、自動処理させる。
    下記のようなスクリプトを作成し、cron により処理させる。

    newdaemonlog スクリプト(newsyslog を参考に。)
    #!/bin/sh
    LOGDIR=/var/log
    LOG=daemonlog
    if test -d $LOGDIR
    then
            cd $LOGDIR
            if test -s $LOG
            then
                    test -f $LOG.2 && mv $LOG.2  $LOG.3
                    test -f $LOG.1 && mv $LOG.1  $LOG.2
                    test -f $LOG.0 && mv $LOG.0  $LOG.1
                    mv $LOG    $LOG.0
                    cp /dev/null $LOG
                    chmod 600    $LOG
                    sleep 40
            fi
    fi
    kill -HUP `cat /etc/syslog.pid`
    
    上記スクリプトを設定
    #vi /usr/lib/newdaemonlog
    #chown root /usr/lib/newdaemonlog
    #chmod 555 /usr/lib/newdaemonlog
    #chgrp sys /usr/lib/newdaemonlog
    
    cron を下記のように設定。
    10 3 * * 0   /usr/lib/newdaemonlog
    
  7. アクセス制御のための設定
    /etc/hosts.allow 許可する条件
    /etc/hosts.deny 拒否する条件
    2つのファイルがあるとき、最初にallow、次にdenyの順でマッチする行を探す。
    一度条件にマッチすると他の条件は無視され、その条件で動作が決まる。
    2つとも基本的な文法は 下記のようである。
           daemon_list : hosts_list [: options ]
           
           listを複数指定する場合は、 カンマで区切る。
           daemon_list :起動されるデーモンのコマンド名(in.ftpd,in.telnetd など)
           hosts_list  :IPアドレス、ホスト名(DNS,NISなど)。
           
           IPアドレスによる指定方法
           133.38.2.1 (IPアドレス)
           133.38.2.  (サブネットアドレス)
           133.38.2.0/255.255.255.0  (ネットマスク指定)
           
           ホスト名による指定方法。
           test.subdomain.domain.jp (フルドメイン)
           .subdomain.domain.jp     (サブドメイン)
           
           その他:
           ALL     すべてのホストやデーモンを指定する方法。
           LOCAL   ドットを含まないホスト名
           EXCEPT   除外する項目を指定
           RBLHOST  MAPS RBL に登録されているホスト
           
    例として
           hosts.allow
           ALL: 133.38.xxx.0/255.255.255.aaa: (/usr/sbin/safe_finger @%h | /usr/ucb/Mail -s %d-%h root)&
           ALL: 133.38.xxx.0/255.255.255.0
           
           
           hosts.deny
           in.fingerd: ALL: (echo "finger access from User:%u Host:%h" | /usr/ucb/Mail -s %d-%h nagumo)&
           ALL EXCEPT in.fingerd: ALL: (/usr/sbin/safe_finger -l %h| /usr/ucb/Mail -s %d-%h root )&
           ALL: RBLHOST: (/usr/sbin/safe_finger @%h | /usr/ucb/Mail -s %d-%h root )&
           ALL: ALL: (/usr/ucb/Mail -s %d-%h root) &
           ALL: /etc/blacklist: DENY
          (別ファイルで指定)blacklist の中は
           ホスト名
           IPアドレス
           
    さらに、tcpdmatch コマンドを用いて設定確認できる。
    最後に、inetd に HUP シグナルを送り、設定を読み込ませておく。

●参考:

http://www.ipc.chiba-u.ac.jp/docs/tcp_wrapper.html
ttp://www1.odn.ne.jp/~wells/biblio/inetsec/tcpd1.html
http://www.phys.s.u-tokyo.ac.jp/people/sirahasi/security.html
http://pekoe.lair.net/diary/tcp_wrappers.html

南雲ホームへ
学科の南雲ホームへ

Written by nagumo
Last modified: Tue Feb 8 11:39:59 2000