最終更新日 2005/04/08
TCPWrapper
TCPWrapperとは
TCPWrapperの設定ファイル
TCPWrapperの設定ファイルの書式
TCPWrapperの設定ファイルの記述例
TCPWrapperのアクセス制御の流れTCPWrapperとは
TCPWrapperとは、「postfix」の開発者であるWietse Venema氏によって書かれたアクセス制御のプログラムです。TCPWrapperの機能を提供しているデーモンはtcpdになります。 tcpデーモン(TCPWrapper)のライブラリ「libwrap」を使用するプログラムの一元管理(アクセス制御)が可能になります。
スーパーサーバの「xinetd」が普及する以前は、「inetd」が使用されてきました。しかし、inetd単体ではアクセス制限ができなかったため、 アクセス制御のプログラムである「TCPWrapper」と組み合わせる形(inetd + TCPWrapper)で利用されてきました。
現在は、xinetdの普及によりxinetd単体でアクセス制限が可能となっています。 ただし、アクセス制御のライブラリ「libwrap」は、いまでも様々なデーモンで使用されています。 代用的なものとして、sshd, vsftpd, telnetd, portmapd, popdなどがあります。
xinetdとTcpWrapperを組み合わせることにより二重のアクセス制限ができ、セキュリティが強化されます。
TCPWrapperの設定ファイル
TCPWrapperの設定ファイルは、「/etc/hosts.allow」「/etc/hosts.deny」の2つになります。「/etc/hosts.allow」には許可するリストを記述します。「/etc/hosts.deny」には拒否するリストを記述します。
| 設定ファイル | 説明 |
| /etc/hosts.allow | 接続を許可をするデーモン・クライアントリストを記述 |
| /etc/hosts.deny | 接続を拒否をするデーモン・クライアントリストを記述 |
TCPWrapperの設定ファイル(書式)
TCPWrapperの設定ファイルに記述する書式は、「hosts.allow」「hosts.deny」とも同じになります。書式 <サービスリスト> : <クライアントリスト> [: コマンド]
- <サービスリスト>と<クライアントリスト>の間は、:(コロン)で区切ります。
- <サービスリスト>には、デーモン名またはプログラム名を記述します。
- <クライントリスト>には、IPアドレス・ネットワーク名などを記述します。
- <サービスリスト>と<クライアントリスト>両方とも複数してすることも可能です。複数指定する場合は、,(カンマ)で区切ります。
- [: コマンド]は、TCPWrapperが実際にアクセス制御をおこなった場合に実行するコマンドを指定します。(メールを出すなど)
ワイルドカード
| ワイルドカード | 説明 |
| ALL | すべてのサービスリスト・クライアントリスト |
| A EXCEPT B | B以外のA |
| LOCAL | 「.」(ドット)を含まないすべてのクライアントリスト(LAN) |
| PARANOID | ホスト名からDNS検索したアドレスとサービス要求元アドレスが不一致 |
コマンドフィールドに指定できる変数
| 変数 | 説明 |
| %a | クライアントのIPアドレス |
| %A | サーバのIPアドレス |
| %h | クライアントのホスト名(不明な場合はIPアドレス) |
| %H | サーバのホスト名(不明な場合はIPアドレス) |
| %u | クライアントのユーザ名(不明な場合は"unknown"表示) |
TCPWrapperの設定ファイル(記述例)
「/etc/hosts.allow」ファイル# # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # sshd : 192.168.0.1 in.telnetd : 192.168.0. |
#(シャープ)から始まる行はコメントアウト行になります。
1行目: 「sshd : 192.168.0.1」・・・・・・IPアドレス192.168.0.1からのSSH接続は許可します。
2行目: 「in.telnetd : 192.168.0.」・・・ネットワーク192.168.0.0/24からのTELNET接続は許可します。
「/etc/hosts.deny」ファイル
# # hosts.deny This file describes the names of the hosts which are # *not* allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # # The portmap line is redundant, but it is left to remind you that # the new secure portmap uses hosts.deny and hosts.allow. In particular # you should know that NFS uses portmap! ALL : all |
#(シャープ)から始まる行はコメントアウト行になります。
1行目: 「ALL : all」・・・・・すべてのサーバの接続に対して、すべてのクライアントからの接続を拒否する。
※通常は「/etc/hosts.deny」ファイルには「ALL : all」を記述し、一旦接続をすべて拒否し、その後で「/etc/hosts.allow」ファイルに許可するリストを追加する形を取ります。
セキュリティの基本は、ALLDENY(すべて拒否)で行います。
TCPWrapperのアクセス制御の流れ
- 「/etc/hosts.allow」の記述と一致する接続を許可する
- 上記1とは一致せず、「/etc/hosts.deny」の記述と一致する接続を拒否する
- 「/etc/hosts.allow」と「/etc/hosts.deny」の記述と一致しないものはすべて許可する
Top