IPV6_PROTECTION_LEVEL

IPV6_PROTECTION_LEVEL ソケット オプションを使用すると、開発者は IPv6 ソケットにアクセス制限を適用できます。 この制限により、プライベート LAN で実行されるアプリケーションを外部からの攻撃に対して簡単かつ堅牢に強化できます。 IPV6_PROTECTION_LEVEL ソケット オプションは、リッスンしているソケットのスコープを拡大または縮小し、必要に応じてパブリック ユーザーとプライベート ユーザーからの無制限のアクセスを可能にしたり、必要に応じて同じサイトのみにアクセスを制限したりします。

現在、IPV6_PROTECTION_LEVELには 3 つの保護レベルが定義されています。

保護レベル 説明
PROTECTION_LEVEL_UNRESTRICTED
Windows に組み込まれている IPv6 NAT トラバーサル機能を利用するアプリケーション (Teredo など) など、インターネット経由で動作するように設計されたアプリケーションで使用されます。 これらのアプリケーションは、IPv4 のファイアウォールをバイパスすることがあるため、開いているポートを対象としたインターネットからの攻撃に対して堅牢である必要があります。
PROTECTION_LEVEL_EDGERESTRICTED
インターネット全体で動作するように設計されたアプリケーションで使用されます。 この設定では、Windows Teredo 実装を使用した NAT トラバーサルは許可されません。 これらのアプリケーションは、IPv4 のファイアウォールをバイパスすることがあるため、開いているポートを対象としたインターネットからの攻撃に対して堅牢である必要があります。
PROTECTION_LEVEL_RESTRICTED
インターネット シナリオを実装していないイントラネット アプリケーションで使用されます。 これらのアプリケーションは、一般的に、インターネット型の攻撃に対してテストが行われていなかったり堅牢ではなかったりします。
この設定を使用する場合、受信トラフィックはリンクローカルのみに制限されます。

 

次のコード例では、それぞれに対して定義された値を提供します。

#define PROTECTION_LEVEL_UNRESTRICTED   10  /* for peer-to-peer apps */
#define PROTECTION_LEVEL_EDGERESTRICTED 20  /* Same as unrestricted, except for Teredo  */
#define PROTECTION_LEVEL_RESTRICTED     30  /* for Intranet apps     */

これらの値は相互に排他的であり、単一の setsockopt 関数呼び出しで結合することはできません。 このソケット オプションのその他の値は予約されています。 これらの保護レベルは、受信接続にのみ適用されます。 このソケット オプションを設定しても、送信パケットや接続には影響しません。

Windows 7 および Windows Server 2008 R2 では、IPV6_PROTECTION_LEVELの既定値は指定されておらず、 PROTECTION_LEVEL_DEFAULT は -1 に定義されています。これは、IPV6_PROTECTION_LEVELの無効な値です。

Windows Vista および Windows Server 2008 では、IPV6_PROTECTION_LEVELの既定値は PROTECTION_LEVEL_UNRESTRICTED され、 PROTECTION_LEVEL_DEFAULT は -1 に定義されています。これは、IPV6_PROTECTION_LEVELの無効な値です。

Windows Server 2003 および Windows XP では、IPV6_PROTECTION_LEVELの既定値が PROTECTION_LEVEL_EDGERESTRICTED され、 PROTECTION_LEVEL_DEFAULTPROTECTION_LEVEL_EDGERESTRICTEDするように定義されています。

Note

ソケットがバインドされる前に、IPV6_PROTECTION_LEVEL ソケット オプションを設定する必要があります。 それ以外の場合、 bind 呼び出しと setsockopt 呼び出しの間で受信されたパケットは PROTECTION_LEVEL_EDGERESTRICTEDに準拠し、アプリケーションに配信される可能性があります。

 

次の表では、各保護レベルをリッスン ソケットに適用する効果について説明します。

保護レベル

受信トラフィックが許可されている

SameSite

外部

NAT トラバーサル (Teredo)

PROTECTION_LEVEL_RESTRICTED

はい

いいえ

いいえ

PROTECTION_LEVEL_EDGERESTRICTED

はい

はい

いいえ

PROTECTION_LEVEL_UNRESTRICTED

はい

はい

はい

 

上の表の [同じサイト ] 列は、次の組み合わせです。

  • ローカル アドレスをリンクする
  • サイトのローカル アドレス
  • 同じサイトに属することが知られているグローバル アドレス (サイト プレフィックス テーブルと一致)

Windows 7 および Windows Server 2008 R2 では、IPV6_PROTECTION_LEVELの既定値は指定されていません。 ローカル コンピューターにエッジ トラバーサル対応ファイアウォール ソフトウェアがインストールされていない場合 (Windows ファイアウォールが無効になっているか、Teredo トラフィックを無視する他のファイアウォールがインストールされている場合)、IPV6_PROTECTION_LEVEL ソケット オプションを PROTECTION_LEVEL_UNRESTRICTED に設定した場合にのみ Teredo トラフィックを受信します。 ただし、Windows ファイアウォールまたはエッジ トラバーサル対応ファイアウォール ポリシーでは、ファイアウォールのポリシー設定に基づいてこのオプションが無視される場合があります。 このソケット オプションを PROTECTION_LEVEL_UNRESTRICTED に設定すると、アプリケーションは、ローカル コンピューターにインストールされているホスト ファイアウォールによってエッジ 走査トラフィックを受信する明示的な意図を伝えます。 そのため、エッジ トラバーサル対応ホスト ファイアウォールがインストールされている場合は、パケットの受け入れについて最終的な決定が行われます。 既定では、ソケット オプションは設定しません。

  • o ローカル コンピューターで Windows ファイアウォールが有効になっている (または別のエッジ トラバーサル対応ホスト ファイアウォールがインストールされている) 場合は、適用されるものはすべて監視されます。 一般的なエッジ トラバーサル対応ホスト ファイアウォールでは、既定で Teredo トラフィックがブロックされます。 したがって、アプリケーションでは、 PROTECTION_LEVEL_EDGERESTRICTEDされた場合と同様に既定値が使用されます。
  • o Windows ファイアウォールが有効でなく、ローカル システムに他のエッジ トラバーサル対応ホスト ファイアウォールがインストールされていない場合、既定値は PROTECTION_LEVEL_EDGERESTRICTEDされます。

Windows Vista および Windows Server 2008 では、IPV6_PROTECTION_LEVELの既定値は PROTECTION_LEVEL_UNRESTRICTED。 ただし、有効な値は、Windows ファイアウォールが有効になっているかどうかによって異なります。 Windows ファイアウォールは、IPV6_PROTECTION_LEVELに設定されている値に関係なく、エッジ トラバーサル対応 (Teredo 対応) であり、IPV6_PROTECTION_LEVELが PROTECTION_LEVEL_UNRESTRICTED場合は無視されます。 したがって、有効な値はファイアウォール ポリシーによって異なります。 Windows ファイアウォールが無効になっており、ローカル コンピューターに他のエッジ トラバーサル対応ファイアウォールがインストールされていない場合、IPV6_PROTECTION_LEVELの既定値は PROTECTION_LEVEL_UNRESTRICTED

Windows Server 2003 および Windows XP では、IPV6_PROTECTION_LEVELの既定値は PROTECTION_LEVEL_EDGERESTRICTED。 IPV6_PROTECTION_LEVEL ソケット オプションを PROTECTION_LEVEL_UNRESTRICTED に設定していない限り、Teredo トラフィックは受信されません。

IPV6_PROTECTION_LEVELによっては、インターネットからの未承諾のトラフィックを必要とするアプリケーションが、未承諾のトラフィックを受信できない場合があります。 ただし、これらの要件は、Windows Teredo インターフェイス経由で要請されたトラフィックを受信するために必要ありません。 Teredo との対話の詳細については、「 Teredo 経由で要請されたトラフィックを受信する」を参照してください。

設定された保護レベルのために受信パケットまたは接続が拒否されると、そのソケットでリッスンしているアプリケーションがないかのように拒否が処理されます。

Note

IPV6_PROTECTION_LEVEL ソケット オプションは、必ずしも IPv6 ソケットにアクセス制限を設定したり、Windows Teredo 以外の方法を使用したり、別のベンダーによる Teredo の別の実装を使用して NAT トラバーサルを制限したりするとは限りません。

 

getsockopt

Teredo 経由で要請されたトラフィックを受信する

setsockopt