ポートにより、ネットワークとインターネットに接続されたデバイスは、指定されたチャネルを使用して対話できます。 専用 IP アドレスを持つサーバーは、インターネットに直接接続してポートを公開できますが、ローカル ネットワーク上のルーターの背後にあるシステムは、他の Web に対して開かれていない可能性があります。 この問題を解決するには、ポート フォワーディングを使用して、これらのデバイスをパブリックにアクセスできるようにします。
さまざまなデバイスで実行されるネットワーク化されたサービスとアプリは、接続を開始して通信を確立する手段として、特定の番号のポートを使用します。 異なるポートを同時に使用して、異なるタイプのトラフィックまたはリクエストを簡単に分離および解析できます。 通常、ポートは特定のサービスに関連付けられているため、クライアントは特定のポートでサーバーに接続し、サーバーがそのポートで接続を受け入れて適切に応答すると想定できます。
一般的に使用されるポートの一部を以下に示します。
- 21:FTP(ファイル転送プロトコル)
- 22:SSH(セキュアシェル)
- 23: テルネット(テレタイプネットワーク)
- 25:SMTP(簡易メール転送プロトコル)
- 80 : HTTP(ハイパーテキスト転送プロトコル)
- 194:IRC(インターネットリレーチャット)
- 443: HTTPS(HTTPセキュア)
インターネットでこのガイドを表示し、Web ブラウザーを使用している場合は、ポート 443 で動作する HTTPS を使用して接続している可能性があります。
ポートを使用すると、特定の要求を簡単に識別して対処できますが、ポート番号付けの規則は標準であり、規則ではありません。 ポートは、特定のポートでのクライアントとサーバー間の接続が一貫したプロトコルを使用している限り、人がホストすることを選択したものに使用できます。
Web ブラウザでは、IP アドレスまたは URL の末尾にあるコロンの後に非標準の HTTP ポートを指定して、そのポートを介して HTTP コンテンツをロードしようとすることができます。 Web サーバーが従来のポート 80 ではなくポート 8080 でローカル マシン上で実行されている場合、Web ブラウザで localhost:8080 または 127.0.0.1:8080 に移動することでこれにアクセスできますが、2 つのいずれかの場合前述のアドレスが「:8080」サフィックスなしで入力された場合、同じページがロードされませんでした。
localhost:8080
開いているポートは接続の試行を許可する必要がありますが、これらの試行を行うには、クライアント デバイスがデバイスへのネットワーク アクセスを必要とします。 これは、インターネットに直接接続されているサーバーや、ローカル エリア ネットワークを介した接続では必ずしも問題になるわけではありませんが、ルーターやファイアウォールで保護されているデバイスの特定のポートにアクセスしようとすると問題になります。
- お見逃しなく:SSHローカルポートフォワーディングを使用して、制限されたネットワークにピボットします
ほとんどのホーム ネットワークまたはオフィス ネットワークは、ルーターを介してインターネットに接続されています。 ルーターは、ネットワークのインターネット使用を管理し、トラフィックを 1 つの IP アドレスに集中させることができます。 すべての要求とパケットは、元の要求を作成したそれぞれのデバイスに分配される前に、ルーターを介して送信されます。 デフォルトでは、ルーターは特定のポートで着信要求を処理しません。 SSH 経由でルーターに接続しようとすると、ルーターはその要求を処理する方法がなく、ネットワーク上の誰に要求を転送するかを知りません。 この問題は、ルーター内でポート転送を構成することで解決できます。
ステップ 1: ルーターとコントロール パネルを識別する
通常、ルーターはポート 80 で HTTP 管理パネルを提供します。このコントロール センターには、ほとんどの場合、ルーターのローカル ネットワーク IP 192.168.0.1 または 192.168.1.1 を使用してアクセスできます。 Microsoft Windows では、コマンド プロンプト ウィンドウを開いて実行することで、接続されているルーターまたは「デフォルト ゲートウェイ」の場所を特定できます。ipconfig/すべて.
C:\> ipconfig/all
Windows IP Configuration
Host Name . . . . . . . . . . . . : █████████
Primary Dns Suffix . . . . . . . : █████████
Node Type . . . . . . . . . . . . : █████████
IP Routing Enabled . . . . . . . : █████████
WINS Proxy Enabled . . . . . . . : █████████
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . : █████████
Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter
Physical Address . . . . . . . . : █████████
DHCP Enabled . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : █████████
IPv4 Address . . . . . . . . . . : █████████
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained . . . . . . . . . : █████████
Lease Expires . . . . . . . . . . : █████████
Default Gateway . . . . . . . . . : 192.168.0.1
DHCP Server . . . . . . . . . . . : 192.168.0.1
DHCPv6 IAID . . . . . . . . . . . : █████████
Linux では、以下を使用して同じことができます。ネットスタット. 新しいターミナル ウィンドウを開き、次のコマンドを実行して、接続しているルーターの IP を確認します。
~$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enp0s25
█████████ ████████████ █████████ ███ ██████ ████████████
█████████ ████████████ █████████ ███ ██████ ████████████
macOS では、Linux と同じコマンドを使用できます。
~% netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.0.1 UGSc en0
█████████ █████████ █████████ ███ ████
█████████ █████████ █████████ ███ ████
█████████ █████████ █████████ ███ ████
█████████ █████████ █████████ ███ ████
█████████ █████████ █████████ ███ ████
█████████ █████████ █████████ ███ ████
ステップ 2: ルーター設定パネルにアクセスする
ルーターのローカル IP アドレスを特定したら、他の URL と同じように、Web ブラウザーでアドレスを開いて構成パネルにアクセスできます。 (注: などの一部のルーター増幅、実際にはそれを簡単にするモバイルアプリがあります)。

ルーター管理ページが開いたら、ルーターにログインします。 ユーザー名とパスワードは、自分で設定したもの (自分に適したものがわかっている場合) またはインターネット サービス プロバイダーによって設定されているか、ルーター メーカーのデフォルトの資格情報である可能性があります。 この情報は通常、ルーターのマニュアルでオンラインで確認できますが、ルーターの側面に物理的に記載されている場合もあります。
すべてのルーターのインターフェースはわずかに異なりますが、ログインしたら、「詳細」エリア、または「ポート転送」を含むものを探します。 以下の例では、関連する領域のタイトルは「高度なポート転送ルール」です。

これで、ルーターのポート転送設定の構成を開始できます。
ステップ 3: ポート フォワーディング ルールを定義する
ポート フォワーディング ルールの使用法を示すために、サンプル ユース ケースを使用します。 このシナリオでは、ユーザーは Raspberry Pi を自宅のネットワーク ルーターに接続しています。 Pi には SSH サービスが実行されており、ユーザーは正しいユーザー名とパスワードを持っていればログインできます。 Pi の現在の IP アドレスは 192.168.0.105 です。
- ユーザーはルールに「RBPi SSH」という名前を付けて、将来の管理のために識別しやすくします。 ルールの名前は、ポートの使用方法に影響しないため、個人的な好みを超えて重要ではありません。
- パブリック ポート (ソース ポートと呼ばれることもあります) の範囲は 22 から 22、または標準の SSH ポート 22 に設定されます。彼らはPiに接続したいと考えています。
- Pi のポート 22 で SSH デーモンが実行されているため、プライベート ポート (場合によっては宛先ポート) も 22 に設定されます。
- SSH は TCP トラフィックであるため、トラフィック タイプは TCP に設定されます。
- IP アドレスは、ローカル ネットワーク上の Pi の IP アドレス 192.168.0.105 に設定されます。
- 最後に、ルールの左側にあるチェックボックスをオンにして、新しい設定を有効にします。
ルーターのインターフェースは多少異なる場合がありますが、概念は同じです。

このルールを保存すると、ユーザーはインターネット上のどこからでもルーターの IP アドレスに SSH 接続し、Raspberry Pi サーバーに転送できるようになります。 これを使用して、ポート 80 で HTTP Web サーバーを作成したり、特定のポートでビデオ ゲーム サーバーを容易にしたりすることもできます。 一部の ISP はホスティング サーバーやその他のコンテンツに関するルールを定義していることに注意してください。ローカル ネットワークでインターネット アクセス可能なサーバーをホストすることを選択する前に、該当するルールを必ず確認してください。
ステップ 4: ポート スキャンと攻撃から保護する
ポート フォワーディングを介してポートをインターネットに公開するときに発生する脆弱性の 1 つに、ポート スキャンがあります。 インターネット上の攻撃者は、自動化されたドローンを使用して一連の IP アドレスをスキャンしたり、Shodan などのツールを使用して、特定のポートがアクティブになっている潜在的に脆弱なデバイスを見つけたりします。 SSH ポートは、データが盗まれ、マルウェアがインストールされる可能性があるシェル環境を表しているため、主要なターゲットです。
- お見逃しなく: Python で Shodan API を使用して、脆弱なデバイスのスキャンを自動化する方法
ポート フォワーディングの場合、ポート スキャンから保護するために、ルーター構成でパブリック ポートまたはソース ポートを変更すると有利な場合があります。 頻繁にスキャンされる 22 のような一般的なポートを使用するのではなく、9022 などのより一般的ではないポートを使用して、SSH 経由で Raspberry Pi に接続することもできます。スキャンによって発見される可能性のある小さい番号のポートを残す必要はありません。

このポートが変更された場合の使用上の唯一の違いは、ネットワークの外部から SSH 経由でデバイスに接続するクライアントは、デフォルトのポート 22 が使用されていると想定するのではなく、ポート 9022 を指定する必要があることです。 ポート 22 に接続しようとしても、Pi の SSH デーモンがそのポートで実行されている間、ポート 22 ではなくポート 9022 経由で転送されるため、ローカル ネットワークの外部では機能しません。
などのサービスもご利用いただけますFail2banは、攻撃者が使用している実際のポートを見つけた場合にブルート フォース攻撃からシステムを保護するように設計された侵入防止ソフトウェア フレームワークです。 Fail2ban のようなツールは、ネットワーク上で試行できるログイン試行回数をレート制限します。
Linux でのシステムレベルのポート転送
ルーターベースのポート フォワーディングはインターネットに接続するネットワーク構成に役立ちますが、Linux を使用している場合はシステム レベルでポート フォワーディングを確立することもできます。
ルーター ポートをネットワーク内のデバイスの特定のポートにリンクできるのと同じように、1 つのポートを別のポートにリンクして、使いやすくすることもできます。 たとえば、Cowrie ハニーポットをインストールすると、SSH デーモンがポート 22 からポート 9022 に移動され、ハニーポットが実行されているポート 2222 がポート 22 に転送され、インターネット上でスキャンされて攻撃されます。
Linux でローカル ポート フォワーディングの設定を開始するには、最初に Linux 自体で有効にする必要がある場合があります。 これを行うには、以下のコマンドを実行して、ip_forwardに1または真。
~$ echo "1" > /proc/sys/net/ipv4/ip__forward
IP 転送が有効になったら、転送するサービスの現在のポートを確認してください。 これは、Cowrie ハニーポットの構成中に、SSH デーモン構成を変更してサービスをポート 9022 に移動することによって行われます。
GNU nano 2.7.4 File: /etc/ssh/sshd_config Modified
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Port 9022
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
最後に、ローカル ポート フォワーディングを有効にするには、iptablesに使える。 以下のコマンドは、ポート 22 の要求をポート 2222 にリダイレクトし、そこでハニーポットがそれらを処理します。
~$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
ポート転送のその他の用途
ポート フォワーディングは、ポート 8080 をポート 80 に転送してテスト サーバーに簡単にアクセスできるようにしたり、特定のサービスに使用するポートを追加したりするなど、他の実装に適用できます。 ポート フォワーディングは、リモート アクセス、サーバー管理、ネットワーク構成、さらにはポストエクスプロイトやピボットにも有効な手法です。 それを理解することは、他の無数のセキュリティ プロジェクトの鍵となる可能性があります。
ポート フォワーディングに関するこのチュートリアルをお楽しみいただけたでしょうか。 このチュートリアルまたはポート転送全般について質問がある場合は、コメントを残すか、Twitter で私に連絡してください。@tahkion.