TCPWrappersとは何なのかを調べてみた
sshのハンドシェイクでこけてしまい、その原因がわからずハマりました。
原因としては、TCPWrappersで拒否されていました。
TCPWrappersとはなんだろうということで調べてみました。
TCPWrappersとは
TCPWrapperとは、ネットワークのアクセス制御をする機能です。
デフォルトでインストールされています。
Linuxの基本的なアクセス制御の仕組み

アクセス制御の仕組みとして、FirewallとTCP Wrappersがあります。
Firewallはiptablesで制御します。
なぜ2つの仕組みが存在するのかはわかりません(誰か教えてください)。
クライアント→Firewall→TCPWrappers→サービスという流れで処理を行います。
TCPWrappersは接続を許可するかどうかのファイルを参照し、許可リストにあればサービスに処理を受け渡します。
処理のログはsyslog daemon (syslogd)によってクライアントと接続先サービスの情報を /var/log/secure または /var/log/messages に書き込まれます。
TCPWrappersのアドバンテージ
TCPWrappersを使うことで、以下のメリットがあるとのこと。
- 接続したクライアントとそのサービスがログに残る
- 様々なプロトコルを集約して管理できる
##TCPWrappersの設定ファイル
以下の2つのファイルがあります。
- /etc/hosts.allow
- /etc/hosts.deny
TCPWrappersはクライアントからのリクエストを受けると、以下の処理を行います。
/etc/hosts.allowを参照します。クライアントがリストに存在した場合、接続を許可します。リストに存在しない場合は次のステップに進みます。/etc/hosts.denyを参照します。クライアントがリストに存在した場合、接続を拒否します。リストにない場合は接続を許可します。
注意点
/etc/hosts.allowから先に評価され、そこでリストに一致した場合/etc/hosts.denyは評価されません。/etc/hosts.allowと/etc/hosts.denyに同じクライアントを指定した場合は/etc/hosts.allowが優先されます。- ファイルの上から評価されていき、一致した時点で評価を打ち切ります。順番が重要です。
- TCPWrappersはキャッシュを持ちません。ですので、設定ファイルを書き換えたら即反映されます。デーモンをリスタートする必要はありません。
- 最後に改行を含めるとエラーメッセージが出るとのことなので、含めないほうがよさそうです。
warning: /etc/hosts.allow, line 20: missing newline or line too longというメッセージが/var/log/messagesまたは/var/log/secureに出力されるとのことです。