Solaris 付属 tcp wrapper 設定
【概要】
Solaris 9 以降に付属する TCP Wrapper(tcpd)を使うための設定方法をまとめる。TCP Wrapper とは、inetd 経由で起動するサービスに対して、接続元のホスト名や IP アドレスに基づいてアクセスを許可・拒否するしくみである。設定には、/etc/default/inetd の編集、/etc/hosts.allow・/etc/hosts.deny の記述、(Solaris 9 以前では)/etc/inetd.conf の編集が必要である。
【目次】
/etc/default/inetd の設定
Solaris 9 (以降) には、TCP Wrapper が付属している。使うには設定が必要である。
/etc/default/inetd に、次の1行を追加する。
ENABLE_TCPWRAPPERS=YES
/etc/hosts.allow の設定
/etc/hosts.allow を、以下の内容のファイルに置き換える。
ALL : localhost 127.0.0.1 [::1] : allow sshd : <適切なIPアドレス> : allow ALL : PARANOID : RFC931 20 : deny sendmail : localhost : allow sendmail : ALL : deny ALL : ALL : deny
PARANOID は、逆引きしたホスト名を再度順引きした結果が一致しないホストにマッチするキーワードである(DNS の設定が疑わしいホストや、名前を詐称している可能性のあるホストを検出するために使う)。RFC931 は、RFC 931(IDENT)プロトコルでクライアント側のユーザ名を問い合わせるオプションであり、末尾の数字はタイムアウト秒数(この例では20秒)である。クライアント側で IDENT サーバが動いていない場合は問い合わせに失敗し、その分だけ接続確立が遅くなることがある。
/etc/hosts.deny の設定
/etc/hosts.deny を、以下の内容のファイルに置き換える。
ALL : ALL EXCEPT LOCAL
上の /etc/hosts.allow の最後の行(ALL : ALL : deny)で、すでに許可されなかったすべての接続を拒否しているが、/etc/hosts.deny 側にも同様のルールを置き、二重に防御している。
/etc/inetd.conf の設定(Solaris 9 以前)
(Solaris 9 あるいは 9 以前での設定) ついでに、/etc/inetd.conf も見直す。使わないサービスはすべてコメントアウトする。次の例のコメント中にある tcpd は、自前で TCP Wrapper をインストールしていた時代の設定例である。Solaris 9 以降の付属版では、ENABLE_TCPWRAPPERS=YES により inetd 自身がラップ処理を行うため、inetd.conf 側で tcpd を明示的に呼び出す必要はない。
# ftp stream tcp nowait root /usr/local/sbin/tcpd in.ftpd # telnet stream tcp nowait root /usr/local/sbin/tcpd in.telnetd # shell stream tcp nowait root /usr/local/sbin/tcpd in.rshd # login stream tcp nowait root /usr/local/sbin/tcpd in.rlogind # exec stream tcp nowait root /usr/local/sbin/tcpd in.rexecd # finger stream tcp nowait nobody /usr/local/sbin/tcpd in.fingerd
もし、特定のサービスを有効にしたいときは、/etc/inetd.conf は、次の例を参考に設定する(Solaris 9 での設定例)。ENABLE_TCPWRAPPERS=YES が設定済みであれば、tcpd を経由しなくても TCP Wrapper によるアクセス制御が働く。
ftp stream tcp6 nowait root /usr/sbin/in.ftpd -a
動作確認(tcpdmatch)
設定したら、tcpdmatch process_name address(例:tcpdmatch in.tftpd 127.0.0.1)でテストする。tcpdmatch は、実際に接続を発生させずに、hosts.allow・hosts.deny の設定内容から許可・拒否の判定結果を確認できるコマンドである。
/usr/local/sbin/tcpdmatch in.telnetd xxx.yyy.zzz.ddd /usr/local/sbin/tcpdmatch in.sshd xxx.yyy.zzz.ddd「xxx.yyy.zzz.ddd」の部分は、確認したい適切な IP アドレスに置き換える。