SSHトンネリングを使用して制限付きサーバーにアクセスして安全に閲覧する方法
SSHクライアントはSecureShellサーバに接続します。これにより、まるであなたが別のコンピュータの前に座っているかのように端末コマンドを実行できます。しかしSSHクライアントでは、ローカルシステムとリモートSSHサーバーの間のポートを「トンネリング」することもできます。.
SSHトンネリングには3つの異なるタイプがあり、それらはすべて異なる目的に使用されます。それぞれがSSHサーバーを使用してトラフィックをあるネットワークポートから別のネットワークポートにリダイレクトすることを含みます。トラフィックは暗号化されたSSH接続を介して送信されるため、転送中に監視または変更することはできません。.
あなたはこれを行うことができます SSH
Linux、macOS、および他のUNIX系オペレーティングシステムに含まれるコマンド。 sshコマンドが組み込まれていないWindowsでは、SSHサーバーに接続するための無料ツールPuTTYをお勧めします。 SSHトンネリングにも対応.
ローカルポート転送:ローカルシステムでリモートリソースにアクセス可能にする
「ローカルポート転送」を使用すると、インターネットに公開されていないローカルネットワークリソースにアクセスできます。たとえば、自宅からオフィスのデータベースサーバーにアクセスしたいとします。セキュリティ上の理由から、そのデータベースサーバはローカルオフィスネットワークからの接続を受け入れるようにのみ設定されています。しかし、オフィスのSSHサーバーにアクセスでき、そのSSHサーバーがオフィスネットワークの外部からの接続を許可している場合は、自宅からそのSSHサーバーに接続し、オフィスにいるかのようにデータベースサーバーにアクセスできます。多くの場合、これが当てはまります。1つのSSHサーバーをさまざまなネットワークリソースを保護するよりも攻撃から保護する方が簡単だからです。.
これを行うには、SSHサーバーとのSSH接続を確立し、ローカルPCの特定のポート(ポート1234など)からデータベースのサーバーのアドレスとオフィスネットワーク上のそのポートにトラフィックを転送するようにクライアントに指示します。そのため、ポート1234で現在のPCの「localhost」でデータベースサーバーにアクセスしようとすると、そのトラフィックはSSH接続を介して自動的に「トンネリング」され、データベースサーバーに送信されます。 SSHサーバーは中央にあり、トラフィックをやり取りします。ローカルPC上で実行されているかのように、任意のコマンドラインまたはグラフィカルツールを使用してデータベースサーバにアクセスできます。.
ローカル転送を使用するには、通常どおりSSHサーバーに接続します。 -L
引数。構文は次のとおりです。
ssh -L local_port:remote_address:remote_port [email protected]
たとえば、オフィスのデータベースサーバがオフィスネットワークの192.168.1.111にあるとします。あなたはでオフィスのSSHサーバーにアクセスすることができます ssh.youroffice.com
, SSHサーバーのユーザーアカウントは ボブ
. その場合、コマンドは次のようになります。
ssh -L 8888:192.168.1.111:1234 [email protected]
このコマンドを実行すると、localhostのポート8888でデータベースサーバーにアクセスできるようになります。そのため、データベースサーバがWebアクセスを提供している場合は、http:// localhost:8888をWebブラウザに接続してアクセスできます。データベースのネットワークアドレスを必要とするコマンドラインツールを使用している場合は、localhost:8888を指定します。 PCのポート8888に送信されるすべてのトラフィックは、オフィスネットワークの192.168.1.111:1234にトンネリングされます。.
SSHサーバーと同じシステム上で実行されているサーバーアプリケーションに接続したい場合は、もう少し混乱します。たとえば、オフィスコンピュータのポート22でSSHサーバーが稼働しているとしますが、同じシステムの同じアドレスのポート1234でデータベースサーバーも稼働しているとします。自宅からデータベースサーバーにアクセスしたいのですが、システムはポート22でSSH接続のみを受け入れており、そのファイアウォールは他の外部接続を許可していません。.
この場合は、次のようなコマンドを実行できます。
ssh -L 8888:localhost:1234 [email protected]
現在のPCのポート8888でデータベースサーバにアクセスしようとすると、トラフィックはSSH接続を介して送信されます。 SSHサーバーを実行しているシステムに到達すると、SSHサーバーはそれを「localhost」のポート1234に送信します。これはSSHサーバー自体を実行しているのと同じPCです。そのため、上記のコマンドの「localhost」は、リモートサーバーから見た「localhost」を意味します。.
Windows上のPuTTYアプリケーションでこれを実行するには、Connection> SSH> Tunnelsを選択します。 “ Local”オプションを選択してください。 「送信元ポート」に、ローカルポートを入力します。 「Destination」には、remote_address:remote_portの形式で宛先アドレスとポートを入力します。.
たとえば、上記と同じSSHトンネルを設定したい場合は、次のように入力します。 8888
送信元ポートとして localhost:1234
目的地として。その後「追加」をクリックし、次に「開く」をクリックしてSSH接続を開きます。もちろん、接続する前にメインの「セッション」画面でSSHサーバー自体のアドレスとポートを入力する必要があります。.
リモートポート転送:リモートシステム上でローカルリソースにアクセス可能にする
「リモートポート転送」はローカル転送の逆であり、それほど頻繁には使用されていません。それはあなたがあなたのローカルPC上のリソースをSSHサーバー上で利用可能にすることを可能にします。たとえば、前に座っているローカルPC上でWebサーバーを実行しているとしましょう。しかし、あなたのPCはサーバソフトウェアへの着信トラフィックを許可しないファイアウォールの内側にあります。.
リモートSSHサーバーにアクセスできると仮定すると、そのSSHサーバーに接続してリモートポート転送を使用できます。 SSHクライアントは、SSHサーバーの特定のポート番号(例:ポート1234)を現在のPCまたはローカルネットワークの特定のアドレスとポートに転送するようにサーバーに指示します。誰かがSSHサーバーのポート1234にアクセスすると、そのトラフィックはSSH接続を介して自動的に「トンネル」されます。 SSHサーバーにアクセスできる人なら誰でもあなたのPC上で走っているウェブサーバーにアクセスできるでしょう。これは実質的にファイアウォールを通過する方法です。.
リモート転送を使用するには、 SSH
コマンド -R
引数。構文は、ローカル転送とほぼ同じです。
ssh -R remote_port:local_address:local_port [email protected]
ローカルPCのポート1234でリッスンしているサーバーアプリケーションを、リモートSSHサーバーのポート8888で使用可能にするとします。 SSHサーバーのアドレスは ssh.youroffice.com
SSHサーバー上のユーザー名は ボブ. 次のコマンドを実行します。
ssh -R 8888:localhost:1234 [email protected]
その後、誰かがポート8888でSSHサーバーに接続でき、その接続は、接続を確立したローカルPCのポート1234で実行されているサーバーアプリケーションにトンネルされます。.
Windows上のPuTTYでこれを行うには、Connection> SSH> Tunnelsを選択します。 「リモート」オプションを選択してください。 「送信元ポート」には、リモートポートを入力します。 「Destination」には、local_address:local_portの形式で宛先アドレスとポートを入力します。.
たとえば、上記の例を設定したい場合は、次のように入力します。 8888
送信元ポートとして localhost:1234
目的地として。その後「追加」をクリックし、次に「開く」をクリックしてSSH接続を開きます。もちろん、接続する前にメインの「セッション」画面でSSHサーバー自体のアドレスとポートを入力する必要があります。.
その後、人々はSSHサーバーのポート8888に接続することができ、彼らのトラフィックはあなたのローカルシステムのポート1234にトンネルされるでしょう.
デフォルトでは、リモートSSHサーバーは同じホストからの接続のみをlistenします。つまり、SSHサーバー自体と同じシステム上にいる人しか接続できません。これはセキュリティ上の理由からです。この振る舞いを上書きしたい場合は、リモートSSHサーバーのsshd_configで「GatewayPorts」オプションを有効にする必要があります。.
動的ポート転送:あなたのSSHサーバをプロキシとして使う
プロキシやVPNと同様に機能する「動的ポート転送」もあります。 SSHクライアントは、使用するアプリケーションを設定できるSOCKSプロキシを作成します。プロキシ経由で送信されるトラフィックはすべてSSHサーバー経由で送信されます。これはローカル転送と似ています - ローカルトラフィックをPCの特定のポートに送信し、SSH接続を介してリモートの場所に送信します。.
たとえば、公衆Wi-Fiネットワークを使用しているとしましょう。あなたは詮索されることなく安全に閲覧したいです。自宅でSSHサーバーにアクセスできる場合は、それに接続して動的ポート転送を使用できます。 SSHクライアントはあなたのPC上にSOCKSプロキシを作成します。そのプロキシに送信されたトラフィックはすべてSSHサーバー接続を介して送信されます。公衆Wi-Fiネットワークを監視している人が、閲覧を監視したり、アクセスできるWebサイトを検閲することはできません。あなたが訪問するウェブサイトの観点からは、まるで自宅のPCの前に座っているかのようになります。これはまた、あなたが米国内のSSHサーバにアクセスすることを前提として、米国外で米国独自のWebサイトにアクセスするためにこのトリックを使用できることを意味します。.
別の例として、あなたはあなたがあなたのホームネットワーク上にあるメディアサーバーアプリケーションにアクセスしたいかもしれません。セキュリティ上の理由から、インターネットに公開されているのはSSHサーバーのみです。インターネットからメディアサーバーアプリケーションへの着信接続を許可しません。動的ポート転送を設定し、SOCKSプロキシを使用するようにWebブラウザを設定して、自宅のSSHシステムの前に座っているかのようにWebブラウザを介してホームネットワーク上で実行されているサーバにアクセスできます。たとえば、メディアサーバーがホームネットワークのポート192.168.1.123にある場合は、アドレスを接続します。 192.168.1.123
SOCKSプロキシを使用しているすべてのアプリケーションにアクセスすると、ホームネットワークにいるかのようにメディアサーバーにアクセスできます。.
動的転送を使用するには、sshコマンドを次のように実行します。 -D
引数、そのように:
ssh -D local_port [email protected]
たとえば、SSHサーバにアクセスしたとしましょう。 ssh.yourhome.com
SSHサーバー上のユーザー名は ボブ
. 動的転送を使用して、現在のPCのポート8888でSOCKSプロキシを開くとします。次のコマンドを実行します。
ssh -D 8888 [email protected]
その後、ローカルIPアドレス(127.0.01)とポート8888を使用するようにWebブラウザまたは他のアプリケーションを設定できます。そのアプリケーションからのトラフィックはすべてトンネル経由でリダイレクトされます。.
Windows上のPuTTYでこれを行うには、Connection> SSH> Tunnelsを選択します。 「動的」オプションを選択してください。 「送信元ポート」に、ローカルポートを入力します。.
たとえば、ポート8888でSOCKSプロキシを作成したい場合は、次のように入力します。 8888
送信元ポートとして。その後「追加」をクリックし、次に「開く」をクリックしてSSH接続を開きます。もちろん、接続する前にメインの「セッション」画面でSSHサーバー自体のアドレスとポートを入力する必要があります。.
次に、ローカルPC上のSOCKSプロキシ(つまり、ローカルPCを指すIPアドレス127.0.0.1)にアクセスするようにアプリケーションを構成し、正しいポートを指定します。.
たとえば、SOCKSプロキシを使用するようにFirefoxを設定できます。 Firefoxは独自のプロキシ設定を持つことができ、システム全体のプロキシ設定を使用する必要がないため、これは特に便利です。 FirefoxはSSHトンネルを介してトラフィックを送信しますが、他のアプリケーションは通常インターネット接続を使用します。.
Firefoxでこれを行う場合は、「手動プロキシ設定」を選択し、「SOCKSホスト」ボックスに「127.0.0.1」と入力し、「ポート」ボックスに動的ポートを入力します。 [HTTPプロキシ]、[SSLプロキシ]、および[FTPプロキシ]ボックスを空のままにします。.
SSHセッション接続を開いている限り、トンネルはアクティブのまま開いています。 SSHセッションを終了してサーバーから切断すると、トンネルも閉じられます。適切なコマンド(またはPuTTYの適切なオプション)で再接続してトンネルを再度開くだけです。.