TCP_Wrappers に関するインストールメモ(2002/08/02) 
 

TCP_Wrappers とは

通常一般に使用する ftp, telnet サービスは、外部から操作出来るようにアクセス許可されていますが、この状態では、信頼できるユーザからのアクセスか悪意のあるユーザかを見分ける事は不可能です。nmap 等によるポートスキャンで悪戯でアクセスされるかもしれませんし・・・・

このため、ユーザ認証は非常に難しいです。しかし、ある限られた IP のみを許可するのであればどうでしょう? そうすれば、アクセス元を特定できるほか、万が一システムに重大な影響を及ぼされれた場合でも、ユーザを絞り込む事はきると思いませんか? また不正アクセスがあった場合も、そのログがあれば・・・・・。そんな事をしてくるのが、 TCP_Wrappers なのです。

  参考 : TCP/IP サービスの制限

設定方法

TCP_Wrappers を作成します。面倒くさい場合は、http://www.sunfreeware.com/ からパッケージをダウンロード
してくるのも ok さ (^^♪

% cd /opt/local/src
% wget ftp://ftp.porcupine.org/pub/security/tcp_wrappers_7.6-ipv6.1.tar.gz
% gzip -cd tcp_wrappers_7.6-ipv6.1.tar.gz | tar xf -
% cd tcp_wrappers_7.6-ipv6.1
% wget http://www5c.biglobe.ne.jp/~yatt/dist/tcp_wrappers_7.6-ipv6.patch
% patch -p1 < tcp_wrappers_7.6-ipv6.patch
% make sunos5
% su
# make install

設置方法

1.inetd.conf で起動するサービスを TCP_Wrapper 化します。 

# cd /etc/inet
# cp inetd.conf inetd.conf.org
# vi inetd.conf
    ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd
    telnet stream tcp6 nowait root /usr/sbin/in.telnetd in.telnetd
    ↓↓
    ftp stream tcp6 nowait root /usr/local/bin/ tcpd in.ftpd
    telnet stream tcp6 nowait root /usr/local/bin/tcpd in.telnetd

2.アクセス制限を記述します。下記のアクセス制限の記述は、自ホストと、192.168.0.0/255.255.255.0 のアクセスのみ許す記述です。

# vi /etc/hosts.deny
    ALL: ALL
# vi /etc/hosts.allow
    in.ftpd: 192.168.0. 127.0.0.1
    in.telnetd: 192.168.0. 127.0.0.1

3.設定が終わったら inetd を再起動します。※起動前に tcpdchk 等を忘れずに・・・

# ps -ef | grep inetd
root 200 1 0 7月 25 ? 0:02 /usr/sbin/inetd -s
# kill -HUP 200

設定ファイルのチェック方法

設定ファイルに記述した情報に間違いがあると最悪ですので /etc/inetd/inetd.conf, /etc/hosts.allow, /etc/hosts.deny を編集した後は、tcpdchk を実行しエラーが無い事を確認します。

# /usr/local/bin/tcpdchk
warning: /etc/inet/inetd.conf, line 177: /usr/sbin/ocfserv: not found: No such file or directory

アクセス制限のチェック方法

こちらも上記同様に、アクセス権限を間違えると最悪な状態になるので inetd 再起動前には、必ずアクセス制限をチェック確認しましょう。

# /usr/local/bin/tcpdmatch in.telnetd 192.168.0.3
warning: /etc/inet/inetd.conf, line 177: /usr/sbin/ocfserv: not found: No such file or directory
client: address 192.168.0.3
server: process in.telnetd
matched: /etc/hosts.allow line 2
access: granted

# /usr/local/bin/tcpdmatch in.telnetd 10.3.4.5
warning: /etc/inet/inetd.conf, line 177: /usr/sbin/ocfserv: not found: No such file or directory
client: address 10.3.4.5
server: process in.telnetd
matched: /etc/hosts.deny line 1
access: denied

アクセスログ状況(修正前)

TCP_Wrappers によるアクセスは、成功失敗を含めデフォルトでは /var/log/syslog に吐き出されます。この状態だと共通的に使用している syslog がパンクしてしまうのと管理が煩雑になってしまうため、アクセスログを別のファイルにする事とします。

1.ちなみにデフォルトの状態とは、TCP_Wrappers の Makefile を参照すると下記の様になっています。

FACILITY= LOG_MAIL       # LOG_MAIL is what most sendmail daemons use
SEVERITY= LOG_INFO      # LOG_INFO is normally not logged to the console

2.上記の定義では、FACILITY=mail, LEVEL=info に出力される事となり。デフォルト状態の /etc/syslog.conf では /var/log/syslog に出力される事となります。

FACILITY= LOG_MAIL       # LOG_MAIL is what most sendmail daemons use
SEVERITY= LOG_INFO      # LOG_INFO is normally not logged to the console

アクセスログ状況(修正後)

で修正方法ですが、TCP_Wrappers によるアクセスを /var/log/wrapper.log に吐き出させるように変更します。

1.FACILITY=local0, LEVEL=info に出力される様に TCP_Wrappers モジュールを再構成します。

% cd /opt/local/src/tcp_wrappers_7.6-ipv6.1
% vi Makefile
    FACILITY= LOG_LOCAL0 # LOG_MAIL is what most sendmail daemons use
    SEVERITY= LOG_INFO # LOG_INFO is normally not logged to the console
% make sunos5
% su
# make install

2./etc/syslog.conf に、FACILITY=local0, LEVEL=info に出力される定義と出力先のディレクトリを定義します。

# vi /etc/syslog.conf
    local0.info /var/log/wrapper.log
    #local0.info ifdef(`LOGHOST', /var/log/wrapper.log, @loghost)

3.syslogd を再起動させます。

# ps -ef | grep syslogd
root 225 1 0 10:22:55 ? 0:00 /usr/sbin/syslogd
# kill -HUL 225

4.logger コマンドを実行し FACILITY=local0, LEVEL=info の定義が有効であるか確認します。

# logger -p local0.info "test"
# cat /var/log/wrapper.log