inetdとTCPWrapper

メモ:

inetd

inetdは、クライアントからのリクエストに応じてプログラム(サーバー)を起動します。

inetdの利点としては、httpdやsendmailのようにサーバープログラムそれぞれが常駐しないためメモリーの使用量を少なくすることが出来ます。

inetdは常駐しており、クライアントからの要求があると要求先のポートに応じてプログラムを起動します。どのポート番号がどのプログラムに対応するかは、/etc/servicesファイルに定義されています。

ftp             21/tcp          # File Transfer [Control]
ftp             21/udp          # File Transfer [Control]
ssh             22/tcp          # Secure Shell Login
ssh             22/udp          # Secure Shell Login
telnet          23/tcp
telnet          23/udp
# 24 - private
smtp            25/tcp          mail

定義は、サービス名、ポートとプロトコル、エイリアス(別名)の順に定義します。

ポートからサービスは、/etc/servicesファイルでわかるので次にどのプログラムを実行するかになります。どのプログラムを実行するかは、/etc/inetd.confに定義します。

ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
svn stream tcp nowait svnuser /usr/sbin/tcpd /usr/local/bin/svnserve -i -r /var/svn

定義の意味は、順に次のようになります。

サービス名
/etc/servicesで定義されているサービス名
ソケットタイプ
dgram又はstreamから選択。通信方式を表し、一般的にUDPではdgram、TCPではstreamが利用される
プロトコル
udpやtcpなどのプロトコル名
waitステータス
wait又はnowaitから選択。プログラムを起動するタイミング
ユーザー(グループ)
プログラムを実行するユーザー又はグループ
プログラム
実行するプログラムのパス
プログラムの引数
プログラムへ渡す引数

上記例では、実行されるプログラムが全て/usr/sbin/tcpdになっています。これは、TCPWrapperと呼ばれtcpdがプログラムとの間に入りログの記録やアクセス制限等をおこなってくれます。

TCP Wrapper

TCPWrapperは、inetdから起動されるプログラムに対してログの記録やアクセス制限といった基本的なセキュリティーを確保してくれます。

inetd.confの設定は、実行するプログラムにtcpdを指定し引数として実際に実行されるプログラムのパス及び引数を指定します。実行するプログラムが、/usr/sbin/に配置されている場合、in.proftpdのように指定できます。(/usr/sbin/ = REAL_DAEMON_DIR)

上記例のsvn(Subversion)は、引数にプログラムのパスを指定しています。

TCP Wrapperによるアクセス制限

TCP Wrapperによるアクセス制限は、/etc/hosts.allow及び/etc/hosts.denyで設定します。

allowには、接続を許可するホストを指定しdenyには、拒否するホストを指定します。

書式は、次のようになります

サービス : ホスト [ : オプション ]

TCP Wrapperに含まれる?もの

tcpd
TCP Wrapperの本体
tcpdchk
TCP Wrapperの設定ファイルが正しいことをチェックするプログラム
tcpdmatch
設定を実験するために、サービス名とアクセス元ホスト名を指定してアクセスの可否を表示宇するプログラム
try-from
リモートホストから(rshを使って)呼び出し、ホスト情報を表示するプログラム
safe_finger
fingerにアクセスしてきた攻撃者の情報を収集するために使用するプログラム