TOMOYO Linux には、特定のローカルポート番号が自動選択により割り当てられないように制限する機能があります。
Linux では、ポート番号として 0 を指定して bind() を呼び出した場合や、 bind() を呼び出さずに connect() を呼び出した場合などに、 /proc/sys/net/ipv4/ip_local_port_range というファイルで指定されている範囲の中から未使用のローカルポート番号が自動的に割り当てられます。しかし、このファイルで指定可能な値は最小値と最大値のみであり、特定のポート番号を除外する機能はありません。
例えば、ポート 8080 をプロキシサーバ用に予約しておきたい場合でも、このファイルに 1024 65535 という値が書き込まれているとポート 8080 が自動割り当てによって他のアプリケーションに割り当てられてしまい、プロキシサーバを起動しようとしたらポートが既に使用中であるために起動できないという場合が生じてしまいます。また、クライアントがサーバのポート 8080 に接続してみたら、プロキシサーバ以外のアプリケーションに繋がってしまったという場合も生じてしまいます。
TOMOYO Linux を利用すると、特定のポート番号を自動割り当ての対象から除外(つまり /proc/sys/net/ipv4/ip_local_port_range に複数の範囲を指定できるようにするのと同じ機能を提供)することができます。
この機能を利用するには、カーネルをコンパイルする際に以下のメニューを選択します。
|
File systems ---> [*] SAKURA (Domain-Free Mandatory Access Control) support File systems ---> [*] Autobind restriction support |
除外したいポート番号はポリシーで指定します。
/root/security/system_policy.txt というファイルに以下の書式で記述します。
|
deny_autobind ポート番号 または deny_autobind ポート番号の最小値-ポート番号の最大値 |
1024 未満のポートと 8080 を自動割り当ての対象から除外する為の例を示します。実際に指定する値はシステム毎に異なります。
|
deny_autobind 1-1023 deny_autobind 8080 |