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)
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
REAL_DAEMON_DIR=/usr/sbin
FACILITY= LOG_DAEMON SEVERITY= LOG_NOTICE
DOT= -DAPPEND_DOT
#AUTH = -DALWAYS_RFC931のコメント # を外す。 この設定をしても接続元のホストで identd の設定がない場合は、ユーザ名は unknown となる。
AUTH = -DALWAYS_RFC931
#STYLE = -DPROCESS_OPTIONS # Enable language extensions.
%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
%make sunos5
%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
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
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 にメッセージが記録される。
#!/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/newdaemonlogcron を下記のように設定。
10 3 * * 0 /usr/lib/newdaemonlog
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 コマンドを用いて設定確認できる。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