tcp_wrappers
※セキュリティを高めるべく、各種サービスを「inetd」経由で
行うソフトです。指定したホストからの接続を拒否する、
各サービスごとに起動の有無を制御することが可能に
なります。
【ダウンロード】
ftp://ftp.ecc.u-tokyo.ac.jp/SECURITY/Wrapper/tcp_wrapper/
(こちらは現在リンク切れみたいですね)
ftp://ftp.porcupine.org/pub/security/index.html#software
(こちらの動作確認はしていませんが、ダウンロードは可能です)
【展開】
(以下の作業はrootで行ってください)
# cd /usr/src
# gzip -cd tcp_wrappers_7.6.tar.gz | tar
xvf -
【コンパイル】
# cd tcp_wrappers_7.6
#
ここでMakefileを編集します。
vi Makefile
(以下のコメント(行頭の#)をはずして有効にします。)
--------------------------------------------------------
・・・
#SysV.4 Solaris 2.x OSF AIX
REAL_DAEMON_DIR=/usr/sbin (←ここのコメントをはずす)
・・・
KILL_OPT= -DKILL_IP_OPTIONS (←ここのコメントをはずす)
--------------------------------------------------------
「:wq!」で終了します。
(まちがって、「/usr/sbin/...」のところのコメントをはずすと、使用時に
エラーになります。【体験談(笑)】 行末を必ず確認してください。
心配な方は、「grep -v "^#" Makefile | grep "/usr/sbin"」と入力して、
行末に「...」がないかを確認してください。)
# make clean
# make linux CC=gcc
(しかし、「sys_errlist」の型が競合しているというエラーが表示されました)
(よって、このままではコンパイルできません。トホホ......)
そこで、なんとか対処することにしました。
前準備として、古いLibwrap.aが/usr/libにあるので、/usr/local/lib/libwrap.aを
それにリンクするようにしておきます。
# cd /usr/local/lib
# ln -s /usr/lib/libwrap.a libwrap.a
もとのディレクトリにもどります。
# cd /usr/src/tcp_wrappers_7.6
ここで、エラーとなる「percent_m.c」を修正しちゃいます。
(定義が重複しているだけなので、コメントにしてしまいます!!)
# vi percent_m.c
--------------------------------------------------------
/* (←これを追加)
#ifndef SYS_ERRLIST_DEFINED
extern char *sys_errlist[] ;
extern int sys_nerr
#endif
*/ (←これを追加)
--------------------------------------------------------
「:wq!」で終了します。
気をとりなおして......
# make clean
# make linux CC=gcc
無事にコンパイルできると思います。
インストールは手動で行います。
# install -b -c -g bin -o root -m 755 tcpd
/usr/sbin/tcpd
# cp tcpdchk /usr/sbin/.
# cp tcpdmatch /usr/sbin/.
# cp safe_finger /usr/sbin/.
# cp try-from /usr/sbin/.
# cp libwrap.a /usr/local/lib/.
# cp tcpd.h /usr/include/.
※これでやっとインストールされました。
=======================================================
【設定】
まず、「/etc/inetd.conf」を設定します。
# cd /etc
# vi inetd.conf
(必要なサービスの行頭の「#」をとり除いてコメントをはずします(例))
-----------------------------------------------------
ftp stream tcp nowait root /usr/sbin/tcpd
in.ftpd -l -a (←FTPを有効に)
pop-3 stream tcp nowait root /usr/sbin/tcpd
popper -s (←qpopperを有効に)
-----------------------------------------------------
「:wq!」で保存終了します。
設定にエラーがないか調べます。
# tcpdchk
次に、「/etc/hosts.allow」を設定します。
(サービス名) : (IPアドレスなど) : allow
/ deny 以下は例です。
-----------------------------------------------------
ALL : 192.168.1.0/255.255.255.0 : allow (←LAN内のPCからのアクセスを許可)
ALL : ALL : spawn( /usr/sbin/safe_finger
-l @%h | /bin/mail -s %d-%h root ) &
: deny
(上の1行は、LAN外のアドレスからのアクセスは、rootにメールを送って拒否します)
-----------------------------------------------------
「:wq!」で保存終了します。
ここで、「inetd」-再起動します。
# kill -HUP (inetdのPID)
(inetdのPIDは「ps aux | grep inetd」でわかります)