Linux SSHポートを転送する3つの方法

Linux SSHポートを転送する3つの方法

ssh は私が最も頻繁に使用する 2 つのコマンドライン ツールのうちの 1 つです (もう 1 つは vim です)。 ssh を使用すると、現場に直接出向くことなく、さまざまな問題をリモートで処理できます。

昨今、TeamViewer のハッキングが大きな影響を与えているため、リモートコントロールからのイントラネット侵入を考え、当然 SSH ポート フォワーディングでもイントラネット侵入が実現できると考えました。よく考えてみると、SSH トンネル、つまりポート転送は、実際には、フォワード プロキシ、リバース プロキシ、イントラネット侵入という、よく使われる 3 つのネットワーク機能を実現していることがわかりました。その強力な機能と使い勝手の良さに、私はさらに感銘を受けました。

ssh には 3 つのポート転送モードがあり、この記事では簡単に紹介します。

ローカル転送

ローカル ポート フォワーディングは、ローカル ホスト上のポートのトラフィックをリモート ホスト上の指定されたポートに転送します。コマンドライン構文は、-L [bind_address]:localport:[remote_host]:remote_port です。 「-L」は「local」の頭文字です。同様に、リモート転送の「-R」は「remote」の頭文字、動的転送の「-D」は「dynamic」の頭文字です。覚えやすいですね。

ローカル転送の使用シナリオを説明するために例を見てみましょう。

記事「CentOS 7 インストール GUI インターフェイスとリモート接続」では、vnc サービスのインストールとポート アクセスの有効化について説明します。実際には、公開されている 59xx ポートは、毎日、自動化されたスクリプトによって継続的に攻撃されています。 vnc およびログイン ユーザーが弱いパスワードまたは辞書パスワードを使用すると、ホストのセキュリティが大幅に脅かされます。このような状況で自分を守るにはどうすればいいでしょうか?

シンプルで安全な保護方法は、iptables/firewalld を使用してポートの外部アクセスを閉じ、接続が必要なときに ssh トンネルを使用してポートを転送することです。

ssh -L5901:5901 ユーザー名@ホスト

このコマンドは、SSH トンネルを介してローカル ポート 5901 をリモート ホストのポート 5901 に転送します。リモートで接続する場合は、localhost または 127.0.0.1 とポート 5901 を入力して、リモート ホストのポート 5901 に接続します。 iptables と ssh のローカル転送により、他人が接続できず、自分だけがアクセスできるという目標を達成できます。

「-L」オプションの「リモート ホスト」は、接続されたマシンを具体的に参照するものではなく (デフォルトは接続されたマシン)、任意のホストである可能性があることに注意してください。たとえば、ローカル マシンのポート 8080 のトラフィックを facebook.com のポート 80 に転送できます。

ssh -L8080:facebook.com:80 ユーザー名@ホスト

リモート転送

リモート ポート フォワーディングは、リモート ホスト上のポートをリモート ホスト上の指定されたポートに転送することです。コマンドライン構文は -R [bind_address]:port:[local_host]:local_port です。

リモート転送で最もよく使用される機能は、イントラネットへの侵入です。パブリック IP を持つホストがある場合は、SSH トンネルのリモート転送を利用してイントラネットに侵入し、外部ネットワークからイントラネット リソースにアクセスすることが可能になります。 SSH リモート転送は、デフォルトではリモート ホストのローカル アドレス (127.0.0.1) にのみバインドできることに注意してください。他のホストからの接続を監視する場合は、リモート ホストの SSH 設定を変更し、「GatewayPorts」を「yes」に変更して、SSH を再起動して有効にする必要があります。

リモート ポート 8080 トラフィックをローカル ポート 80web に転送する例:

ssh -R0.0.0.0:8080:80 ユーザー名@ホスト

リモート転送により、パブリック IP ホストのポート 8080 にアクセスすることは、イントラネット Web ホストのポート 80 にアクセスするのと同じになり、イントラネットへの侵入が実現します。

動的転送

ローカル転送でもリモート転送でも、ローカル ホストとリモート ホストのポートを指定する必要があります。ダイナミック ポート フォワーディングではこの制限がなくなり、ローカル ポートのみがバインドされます。リモート ホストとポートは、開始された要求によって決定されます。動的転送の構文は「-D bind_address:port」です。転送の例は次のとおりです。

ssh -D 8080 ユーザー名@ホスト

このコマンドにより、ssh はローカル ポート 8080 をリッスンできるようになります。ポート 8080 を通過するすべてのトラフィックは、ssh トンネルを介してリモート サーバーによって要求され、ブロックされたリソースを取得し、実際の ID を隠すという目的が達成されます。

動的転送は、実際に転送プロキシ機能を実現するため、科学的にインターネットにアクセスするために使用できます。ローカル転送はフォワードプロキシとしても使用できますが、リクエストごとにホストとポートを転送するのは面倒なので、実際には使用されません。

他の

  1. ユーザーの観点から見ると、ローカル転送はフォワード プロキシであり、リソース プロバイダーの観点から見ると、ローカル転送はリバース プロキシです。
  2. ssh 接続が切断されると、リモート転送/イントラネット侵入が無効になります。リモート転送を常に有効にしたい場合は、ssh キープアライブ テクノロジが必要です。イントラネットの侵入に重点を置いた frp などのソリューションを使用することをお勧めします。
  3. SSH トンネル内のトラフィックは暗号化されていますが、ファイアウォールは SSH トンネルで伝送されるトラフィックをインテリジェントに識別できるため、科学的なインターネット アクセスに使用すると干渉を受けやすくなります。
  4. ポート転送のみを行う場合、実際には上記のコマンドは「-NT -f」オプションと組み合わせて使用​​されることが多いです。 「-f」オプションはコマンドをバックグラウンドで実行し、切断するには kill コマンドが必要です。
  5. プロキシの観点から見ると、SSH トンネリングは非効率的であり、専用のソフトウェアが推奨されます。
  6. ssh トンネルのトラフィックは暗号化されており、セキュリティの観点から非常に信頼性があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • イントラネット侵入を実現するためのSSHポート転送
  • SSH ポート転送、ローカル ポート転送、リモート ポート転送、動的ポート転送の詳細
  • SSHリモートログインとポート転送の詳細な説明
  • SSH ポート転送とは何ですか?何の役に立つの?

<<:  雨滴効果を実現する JavaScript キャンバス

>>:  MySQL ALTERコマンドの知識ポイントのまとめ

推薦する

Nginx ルーティング転送とリバースプロキシロケーション構成の実装

Nginx を設定する 3 つの方法最初の方法は、位置一致部分を直接置き換える。 2 番目の pro...

Dockerはnginxをデプロイし、フォルダとファイル操作をマウントします

この間、私は docker を勉強していたのですが、nginx をデプロイするときに行き詰まりました...

シリアルポート使用時のvue-electronの問題解決

エラーは次のとおりです:キャッチされない TypeError: 未定義のプロパティ 'mod...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装

ローカル開発では、直接アクセスできない静的ファイル リソースのデバッグが必要になる場合があります。こ...

HTML チュートリアル、HTML デフォルト スタイル

html 、アドレス、引用、本文、 dd 、 div 、 dl 、 dt 、フィールドセット、フォ...

nginx.conf のルートディレクトリ設定の詳細な説明

nginx.conf を構成するときには常に何らかの問題が発生します。ここでは、よくある問題とその解...

JavaScriptのプリコンパイルを見てみましょう(概要)

JSランニング三部作js実行コードは3つのステップに分かれています構文解析プリコンパイル解釈Jav...

イメージの起動時にdocker runまたはdocker restartが自動的に終了する問題を解決します

コマンドを実行します: docker run --name centos8 -d centos /b...

JavaScript スクリプトが実行されるタイミングの詳細な説明

JavaScript スクリプトは HTML 内のどこにでも埋め込むことができますが、いつ呼び出され...

React 高階コンポーネント HOC 使用方法の概要

HOCを紹介する一文高階コンポーネント (HOC) とは何ですか? 公式ドキュメントによると、「高階...

JS関数の呼び出し、適用、バインドの超詳細な方法

目次JS 関数呼び出し、適用、バインドメソッド1. call() メソッド1. call() メソッ...

Vueが学生管理機能を実装

この記事では、学生管理を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次の...

HTML でフロートをクリアする 2 つの方法

1. クリアフローティング法1前の親要素の高さを設定します。注: エンタープライズ開発では、可能であ...

jsオブジェクト指向カプセル化カスケードドロップダウンメニューリストの実装手順

この例で開発されたカスケード ドロップダウン メニューは、既存の JSON データに基づいて作成され...