TCP_Wrappers に関するインストールメモ(2002/08/02)
通常一般に使用する 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.telnetd2.アクセス制限を記述します。下記のアクセス制限の記述は、自ホストと、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.13.設定が終わったら 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 console2.上記の定義では、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 install2./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 2254.logger コマンドを実行し FACILITY=local0, LEVEL=info の定義が有効であるか確認します。
# logger -p local0.info "test"
# cat /var/log/wrapper.log