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」でわかります)