14.6. TCP Wrappers

執筆: Rhodes Tom [FAMILY Given].

TCP Wrappers は、 すべてのサーバデーモンに対するサポートをその管理下で提供できるように、 inetd スーパサーバ の機能を拡張します。 この方法を使うことで、ログへの対応、 接続に対してメッセージを返したり、 内部の接続だけを許可するようにデーモンを設定することが可能となります。 これらの機能のいくつかはファイアウォールでも実装できますが、 TCP Wrappers は、 システムを守るためのレイヤを追加し、 ファイアウォールが提供する以上の管理機能を提供します。

TCP Wrappers は、 適切に設定されたファイアウォールの置き換えと考えるべきではありません。 TCP Wrappers は、 ファイアウォールや他のセキュリティ強化のツールと組み合わせて使うべきです。

14.6.1. 初期設定

FreeBSD 上で TCP Wrappers を有効にするには、 rc.conf から -Ww オプションで inetd(8) サーバが起動されることを確認してください。 その後、/etc/hosts.allow を適切に設定してください。

注記:

他の TCP Wrappers の実装と異なり、 hosts.deny は廃止されました。 すべての設定オプションは /etc/hosts.allow に書かれている必要があります。

最も簡単な設定におけるデーモンの接続ポリシは、 /etc/hosts.allow の中で、 オプションごとに許可またはブロックするように設定するというものです。 FreeBSD のデフォルトの設定では、inetd(8) から起動されたすべてのデーモンの接続を許可します。

基本的な設定は、通常 daemon : address : action という形式です。ここで、 daemon は、 inetd(8) が起動するデーモンの名前です。 address の部分は、有効なホスト名、 IP アドレスまたは、 括弧 ([ ]) で囲まれた IPv6 アドレスです。 action は、 allow または deny です。 TCP Wrappers は、 最初にマッチしたルールが適用されます。 これは、設定ファイルに対するルールにマッチするかどうかのスキャンは、 昇順に行われることを意味しています。 マッチすると、ルールが適用され、 検索のプロセスは終了します。

例として、POP3 の接続を mail/qpopper デーモン経由で許可するには、以下の行を hosts.allow に追加してください。

# This line is required for POP3 connections:
qpopper : ALL : allow

この行を追加したら、 inetd(8) を再起動してください。

# service inetd restart

14.6.2. 高度な設定

TCP Wrappers は、 接続を取り扱う以上の制御を行う高度な設定も提供しています。 ある時は、 接続しているホストまたはデーモンにコメントを返すことが適切であることがあります。 別の場合では、おそらくログエントリを記録したり、 管理者にメールで送る必要があることもあるでしょう。 またその他の状況としては、 サービスをローカルの接続のみの使用に制限する必要がある場合もあります。 これらはすべて、ワイルドカード と呼ばれる設定のオプション (拡張文字および外部コマンドの実行) で可能となります。

14.6.2.1. 外部コマンド

接続は拒否しなければならないが、 その理由を接続の確立を試みた相手に送りたい状況を考えてください。 このアクションは、twist を使うことで実現可能です。 接続が試みられると、twist はシェルコマンドまたはスクリプトを実行します。 この場合の例は、 hosts.allow に書かれています。

# The rest of the daemons are protected.
ALL : ALL \
	: severity auth.info \
	: twist /bin/echo "You are not welcome to use %d from %h."

この例では、 You are not allowed to use daemon from hostname. というメッセージを、 アクセスファイルの中で設定されていないすべてのデーモンに対して返します。 接続元に対し、 確立された接続が破棄された直後に返答することは有効です。 返信に使われるメッセージは、引用符 (") で囲む 必要 があります。

警告:

攻撃者や攻撃者のグループは、 これらのデーモンの接続のリクエストであふれさせることにより、 サーバに対して DoS 攻撃を仕掛けることができます。

他の可能性は spawn を使うことです。 twist と同様に、 spawn は、暗黙のうちに接続を拒否し、 外部のシェルコマンドやスクリプトを実行できます。 twist と異なり、spawn は、 接続を確立した相手に対し、返事を返すことはありません。 たとえば、以下のような設定の行を考えてみてください。

# We do not allow connections from example.com:
ALL : .example.com \
	: spawn (/bin/echo %a from %h attempted to access %d >> \
	  /var/log/connections.log) \
	: deny

この行は、*.example.com からの接続をすべて拒否します。 ホスト名、IP アドレスおよびアクセスを試みたデーモンが、 /var/log/connections.log に記録されます。

この例では、置換文字 %a および %h が使われています。 置換文字の完全な一覧は hosts_access(5) をご覧ください。

14.6.2.2. ワイルドカードオプション

ALL オプションは、 デーモン、ドメインまたは IP アドレスのすべてのインスタンスのどれかにマッチするかどうかに使われます。 他のワイルドカードは、偽造された IP アドレスを提供するホストにマッチするかどうかに用いられる PARANOID です。 たとえば、PARANOID を使うことで、 ホスト名と異なる IP アドレスからの接続があった時のアクションを定義できます。 以下の例では、ホスト名から検索される IP アドレスと異なる IP アドレスを持つ sendmail(8) への接続のすべてのリクエストを拒否します。

# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : deny

注意:

クライアントもしくはサーバの DNS の設定が間違っている場合に、 PARANOID ワイルドカードを使うと、 サーバがとても使いづらくなります。 管理者の慎重さが求められます。

ワイルドカードおよび関連する機能についてもっと知りたい場合には、 hosts_access(5) をご覧ください。

上記の設定が動作するには、hosts.allow の中で、 最初の設定の行がコメントアウトされている必要があります。

本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。