1


0

ポート4000のファイアウォールの内側で動作しているTcpListenerオブジェクトがあります。 明らかに、外部クライアントがTcpListenerに接続するためには、ポート4000をファイアウォールで開く必要があります。そうでなければ、外部接続要求は通過しません。

私の質問は、このように接続要求を受け入れるとどうなるかということです。

TcpClient client = server.AcceptTcpClient();

TcpClientは、システム割り当てポート番号を使用してローカルインターフェイス上で開かれます。 外部クライアントがこのTcpClientインスタンスと通信するためには、このポート番号をファイアウォール内で開く必要がありますか? もしそうなら、事前に開くことができるように使用するポート番号の範囲を指定することは可能ですか? それとも、ファイアウォールの背後にあるもの(この場合は私のサーバー)が接続を確立した、つまり受け入れたために、ファイアウォールはこのシステム割り当てポート番号での通信を自動的に許可しますか?

2 Answer


2


  • サーバマシン上では、ファイアウォールはクライアントが接続しているポートからの `TcpListener`がリッスンしているポートへの*着信接続*を許可する必要があります。

  • クライアントマシンでは、ファイアウォールは `TcpListener`が待ち受けているポートへの*発信接続*をクライアントが接続しているポートから許可する必要があります。

ほとんどのファイアウォール(Windowsファイアウォールなど)は、あらゆる宛先への発信接続を許可するように設定されているため、ポート4000でのあらゆる発信元からの着信接続を許可するルールを作成するだけで済みます。

これをもっと厳密に制限したい場合は、システム割り当てポートの代わりに TcpClientを特定のポートにバインドしてファイアウォールを作成します。このポートとの間でのみ接続を許可するようにサーバーとクライアントにルールを設定します。


0


Windowsファイアウォールでポートの範囲を指定するのは簡単ではありませんが、Windowsファイアウォールで新しいエントリを追加するときに、ポートではなくプログラムを選択し、すべての接続を受信するようにプログラムに許可してください。許可されている。