
コンピュータネットワークにおいて、ポート転送またはポートマッピングは、ネットワークアドレス変換(NAT)の応用であり、パケットがルータやファイアウォールなどのネットワークゲートウェイを通過する際に、あるアドレスとポート番号の組み合わせから別の組み合わせに通信要求をリダイレクトします。この技術は、通信の宛先IPアドレスとポート番号を内部ホストに再マッピングすることにより、保護またはマスカレードされた(内部)ネットワーク上のホスト上のサービスをゲートウェイの反対側(外部ネットワーク)のホストで利用できるようにするために最もよく使用されます。[1] [2]
目的
ポート転送は、インターネットホストなどのリモートコンピュータからローカルエリアネットワーク(LAN)内の特定のコンピュータまたはサービスへの 接続を容易にします。[3]
一般的な住宅ネットワークでは、ノードはルータまたはネットワーク アドレス変換装置 (NAT/NAPT)に接続されたDSLまたはケーブル モデムを介してインターネットにアクセスします。プライベート ネットワーク上のホストは、イーサネット スイッチに接続されているか、ワイヤレス LANを介して通信します。NAT デバイスの外部インターフェイスは、パブリック IP アドレスで構成されます。一方、ルータの背後にあるコンピュータは、それぞれプライベート IP アドレスのみで通信するため、インターネット上のホストからは見えません。
ポート転送を構成する場合、ネットワーク管理者は、特定のホストにあるプライベート ネットワーク内のサービスとの通信専用に、ゲートウェイ上のポート番号を 1 つ確保します。外部ホストは、ネットワーク内部サービスと通信するために、このポート番号とゲートウェイのアドレスを知っている必要があります。多くの場合、ポート転送では、Web サービス (HTTP) のポート番号 80 など、よく知られているインターネット サービスのポート番号が使用され、一般的なインターネット サービスをプライベート ネットワーク内のホストに実装できます。
代表的な用途は次のとおりです。
- プライベートLAN内でパブリックHTTPサーバーを実行する
- インターネットからプライベートLAN上のホストへのセキュアシェルアクセスを許可する
- インターネットからプライベートLAN上のホストへのFTPアクセスを許可する
- プライベートLAN内で公開ゲームサーバーを実行する
管理者は、ゲートウェイのオペレーティング システムでポート転送を構成します。Linuxカーネルでは、これはiptablesまたはnetfilterカーネル コンポーネントのパケット フィルター ルールによって実現されます。Yosemite (OS 10.10.X)より前のBSDおよびmacOSオペレーティング システムでは、これをIpfirewall (ipfw) モジュールで実装しますが、Yosemite以降のmacOSオペレーティング システムでは、これをPacket Filter (pf) モジュールで実装します。
ゲートウェイ デバイスで使用する場合、ポート転送は、宛先アドレスとポートを変換する単一のルールで実装できます ( Linuxカーネルでは、これは DNAT ルールです)。この場合、送信元アドレスとポートは変更されません。ネットワークのデフォルト ゲートウェイではないマシンで使用する場合、送信元アドレスを変換マシンのアドレスに変更する必要があります。そうしないと、パケットがトランスレータをバイパスし、接続が失敗します。
ポート転送がプロキシ プロセス (アプリケーション層ファイアウォール、SOCKSベースのファイアウォール、TCP 回線プロキシなど) によって実装されている場合、パケットは実際には変換されず、データのみがプロキシされます。これにより、通常、送信元アドレス (およびポート番号) がプロキシ マシンのアドレスに変更されます。
通常、一度に特定の転送ポートを使用できるのはプライベート ホストの 1 つだけですが、発信元ホストの送信元アドレスによってアクセスを区別するように構成できる場合もあります。
Unix 系オペレーティング システムでは、ポート フォワーディングを使用することがあります。この場合、1024 未満のポート番号は、ルート ユーザーとして実行されているソフトウェアによってのみ作成できます。スーパーユーザー権限で実行すると (ポートをバインドするため)、ホストにセキュリティ リスクが生じる可能性があります。そのため、ポート フォワーディングを使用して、低い番号のポートを別の高い番号のポートにリダイレクトし、アプリケーション ソフトウェアを権限の少ない一般的なオペレーティング システム ユーザーとして実行できるようにします。
ユニバーサルプラグ アンド プレイプロトコル (UPnP) は、住宅用インターネット ゲートウェイにポート転送のインスタンスを自動的にインストールする機能を提供します。UPnP は、インターネット ゲートウェイがシンプル サービス検出プロトコル(SSDP)を介してプライベート ネットワーク上でその存在を通知するネットワーク サービスであるインターネット ゲートウェイ デバイス プロトコル(IGD) を定義します。インターネット ベースのサービスを提供するアプリケーションは、このようなゲートウェイを検出し、UPnP IGD プロトコルを使用してゲートウェイのポート番号を予約し、ゲートウェイがパケットをリスニングソケットに転送するようにすることができます。
種類
ポート転送は、ローカルポート転送、リモートポート転送、動的ポート転送の3種類に分けられます。[4]
ローカルポート転送
ローカルポート転送は、最も一般的なタイプのポート転送です。これは、ユーザーがローカルコンピュータから別のサーバーに接続できるようにするために使用されます。つまり、セキュアシェル(SSH) クライアントと同じコンピュータで実行されている別のクライアントアプリケーションからデータを安全に転送します。ローカルポート転送を使用すると、特定の Web ページをブロックするファイアウォールをバイパスできます。[5]
SSH クライアントからの接続は、SSH サーバーを経由して、目的の宛先サーバーに転送されます。SSH サーバーは、指定されたポート (SSH クライアントを実行するホストのローカル ポート) から、セキュア トンネルを経由して、指定された宛先ホストとポートにデータをリダイレクトするように構成されます。ローカル ポートは SSH クライアントと同じコンピューター上にあり、このポートは「転送ポート」です。同じコンピューター上で、同じ宛先ホストとポートに接続したいクライアントは、転送ポート (宛先ホストとポートに直接接続するのではなく) に接続するように構成できます。この接続が確立されると、SSH クライアントは転送ポートをリッスンし、アプリケーションからそのポートに送信されたすべてのデータを、セキュア トンネルを経由して SSH サーバーに転送します。サーバーはデータを復号化し、宛先ホストとポートにリダイレクトします。[6]
ローカルポート転送の用途:
- ローカルポート転送を使用してメールを受信する[7]
- SSH トンネルを使用してラップトップから Web サイトに接続します。
リモートポート転送
この形式のポート転送により、セキュア シェル (SSH) 接続のサーバー側にあるアプリケーションは、SSH のクライアント側にあるサービスにアクセスできるようになります。[8] SSH に加えて、同様の一般的な目的でリモート ポート転送を利用する独自のトンネリング スキームがあります。 [9]つまり、リモート ポート転送により、ユーザーはトンネルのサーバー側 (SSH など) から、トンネルのクライアント側にあるリモート ネットワーク サービスに接続できます。
リモート ポート転送を使用するには、宛先サーバー (トンネルのクライアント側) のアドレスと 2 つのポート番号を知っておく必要があります。選択するポート番号は、使用するアプリケーションによって異なります。
リモート ポート転送により、他のコンピューターがリモート サーバーでホストされているアプリケーションにアクセスできるようになります。次の 2 つの例をご覧ください。
- ある会社の従業員が自宅でFTPサーバーをホストしており、職場のコンピューターを使用する従業員にFTPサービスへのアクセスを許可したいと考えています。これを行うには、従業員はFTPサーバーのアドレスを含め、FTPの正しいポート番号(標準のFTPポートはTCP/21)を使用して、会社の内部コンピューターでSSHを介してリモートポート転送を設定できます[10]
- リモートデスクトップセッションを開くことは、リモートポート転送の一般的な用途です。SSHを介して、仮想ネットワークコンピューティングポート(5900)を開き、宛先コンピュータのアドレスを含めることでこれを実現できます。[6]
リバースポート転送
別名:リバースSSHトンネル。簡単に言えば、ラップトップがこのようにリモートマシンに接続すると、そのリモートマシンのIPへの着信コールがラップトップに転送され、応答が返されます。[11]
動的ポート転送
ダイナミックポートフォワーディング(DPF)は、ファイアウォールのピンホールを利用してファイアウォールやNATを横断するオンデマンド方式です。その目的は、1つまたは複数の宛先サーバーにデータを送受信するための仲介役として機能する信頼できるサーバーにクライアントが安全に接続できるようにすることです。[12]
DPF は、SSH などのローカル アプリケーションを SOCKS プロキシ サーバーとして設定することで実装できます。このサーバーは、ネットワークまたはインターネット経由でのデータ転送を処理するために使用できます。Web ブラウザーなどのプログラムは、トラフィックをプロキシ経由で転送するように個別に構成する必要があります。プロキシは、別のサーバーへの安全なトンネルとして機能します。プロキシが不要になったら、プログラムを元の設定に再設定する必要があります。DPF は手動で行う必要があるため、あまり使用されません。[6]
接続が確立されると、DPF は信頼できないネットワークに接続しているユーザーに追加のセキュリティを提供するために使用できます。データは元の宛先に転送される前に、安全なトンネルを経由して別のサーバーに渡される必要があるため、ユーザーは LAN 上で発生する可能性のあるパケット スニッフィングから保護されます。[13]
DPF は、さまざまな用途に使用できる強力なツールです。たとえば、コーヒー ショップ、ホテル、または最低限のセキュリティを備えたネットワークを介してインターネットに接続しているユーザーは、データを保護する方法として DPF を使用する場合があります。DPF は、企業ネットワークなどの外部 Web サイトへのアクセスを制限するファイアウォールを回避するためにも使用できます。
参照
- ポート制御プロトコル(PCP)
- NAT ポート マッピング プロトコル(NAT-PMP)
- ファイアウォールのピンホール
- NATトラバーサル
- パケット転送
- ポートアドレス変換(PAT)
- ポートトリガー
- UDP ヘルパー アドレス
参考文献
- ^ 「ポート転送の定義」。PC Magazine。2012年6月3日時点のオリジナルよりアーカイブ。 2008年10月11日閲覧。
- ^ Rory Krause. 「SSH ポート転送を使用してリモート ロケーションで印刷する」 。Linux Journal。2008年 10 月 11 日閲覧。
- ^ Jeff "Crash" Goldin. 「ホーム Web サーバーの設定方法」。Red Hat。2008年 10 月 4 日のオリジナルからアーカイブ。2008年 10 月 11 日閲覧。
- ^ OpenSSH ポート転送
- ^ 「ローカルおよびリモート ポート転送と、Secure IT Client 7.1 以降の Reflection - 技術ノート 2433」。Support.attachmate.com。2012 年 11 月 9 日。2014年 1 月 30 日閲覧。
- ^ abc 「SSH/OpenSSH/PortForwarding - Community Ubuntu Documentation」。Help.ubuntu.com。2013-12-13。2014-01-30取得。
- ^ 「例 - ローカル ポート転送を使用してメールを受信する (システム管理ガイド: セキュリティ サービス)」。Docs.oracle.com。2014年 1 月 30 日取得。
- ^ 「Secure Shell によるトンネリング - 付録 A: リモート ポート転送」。Vandyke.com。2005 年 6 月 12 日。2014年 1 月 30 日閲覧。
- ^ 「ローカルポート転送とリモートポート転送」。NetworkActiv 。 2016年11月4日時点のオリジナルよりアーカイブ。2014年6月8日閲覧。
- ^ 「FTP ポート番号 21 - ポート 21 TCP」。Compnetworking.about.com。2013 年 12 月 19 日。2014 年 2 月 3 日時点のオリジナルよりアーカイブ。2014年 1 月 30 日閲覧。
- ^ 「リバース SSH トンネリング - 最初から最後まで」JFrog 2021-08-15 . 2024-10-15閲覧。
- ^ 「DPF メカニズム」。Pages.cs.wisc.edu。2014年 1 月 30 日閲覧。
- ^ 「SSH ダイナミック ポート フォワーディング (ハッキング イラスト シリーズ InfoSec チュートリアル ビデオ)」。Irongeek.com。2014年 1 月 30 日閲覧。
外部リンク
- Alan Stafford. 「Warp Speed Web Access: 帯域幅の共有」。PC World。2008年 3 月 18 日にオリジナルからアーカイブ。2008 年 10 月 11 日に取得。
- UPnP を使用したプログラムによるポート転送と NAT トラバーサル – UPnP とインターネット ゲートウェイ デバイス プロトコル (IGD) を使用してポート転送を自動化する無料ソフトウェア
- C# での TCP 転送ソース コード – TCP 転送を説明/PoC する C# のソース コード。
- Open.NAT – UPNP および PMP をサポートする NAT デバイスでポート転送を可能にする、軽量で使いやすい .NET クラス ライブラリ。
- ポートチェッカー ポート転送テストツール
