セキュアネットワーク(sshポートマッピング) -----図の詳細を使用することができます。
元のアドレス http://zhumeng8337797.blog.163.com/blog/static/100768914201172125444948/
SSHのポートフォワーディング:ローカルフォワードとリモートフォワード
sshのポートフォワーディングを使った壁打ちについては、すでにウェブ上に良い記事がたくさんあるので、ここでは2つの図を描いて説明します。
まず一つ、覚えておいてほしいことがあります。
SSHポートフォワーディングは当然SSH接続を必要とし、SSH接続はSSHクライアントからSSHサーバーへの指向性を持っています。
そして、アクセスしたいアプリケーションも方向性があり、アプリケーションの接続方向は、アプリケーションのクライアント側からアプリケーションのサーバー側となります。例えば、インターネット上のWebサイトにアクセスする必要がある場合、Httpアプリケーションの接続方向は、自ホスト(Client)から遠くのWeb Serverへということになります。
SSH接続とアプリケーションの接続の2つが同じ方向であれば、ローカル転送されていると言います。
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
SSH接続とアプリケーションの接続、2つの接続が異なる方向であれば、リモート転送されていると言うことになります。
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
ローカル転送は、このローカルマシンのあるポートをリッスンし、このポートにアクセスするすべてのデータを、以下の例のように、sshトンネルを介してリモートエンドの対応するポートに転送します。
ローカルポート転送はルックバックインターフェースにバインドされているため、ローカルポート転送を使用できるのはlocalhostまたは127.0.0.1のみで、他のマシンからの接続は"接続拒否となるのみです。他のマシンがこの転送用トンネルを共有できるようにするには、設定ファイルで GatewayPorts キーワードを使用するか、コマンドラインから直接 "-g" パラメータを使用する必要があります。
また、ローカル転送コマンドの <remote host> と <SSH hostname> は異なるホストであってもかまいません。
リモートフォワードは、ローカルフォワードの逆です。sshトンネルを開いた後、リモートサーバー上のポートをリッスンし、リモートサーバー上の指定されたポートへのすべてのアクセスは、以下の例に示すように、トンネルを介して対応するローカルポートに転送されます。
SSH PortForwardingの紹介はこちらです。 http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
リモートサーバーのポート remote_port をローカルポートの port にバインドすることができます。-C はデータ圧縮、-f はバックグラウンドでの操作で、ユーザー名パスワードの入力を求められたときだけフォアグラウンドに切り替わります。-N はリモートコマンドを実行しないようにします。このコマンドはポートフォワーディングを行う場合に便利です。-g は、リモートホストがローカルの転送ポートに接続することを許可します。-R は、リモートホストのポートをローカルのポートにマッピングすることを示します。Lの場合、ローカルポートをリモートホストポートにマッピングします。
sshの強力な3つのポートフォワーディングコマンド。
リモート側に転送:ssh -C -f -N -g -L ローカルポート:ターゲットIP:ターゲットポート username@target IP
ローカルへ転送: ssh -C -f -N -g -R ローカルポート:ターゲットIP:ターゲットポート ユーザー名@ターゲットIP
ssh -C -f -N -g -D listen_port user@Tunnel_Host
-C: 圧縮されたデータを転送します。
-f : バックエンド認証のユーザー/パスワード。通常、リモートホストにログインせずに、-Nと組み合わせて使用します。
-N : スクリプトやコマンドを実行しない。通常、-f と一緒に使用する。
-g : -L/-R/-D パラメータで、確立された転送ポートへのリモートホストの接続を許可します。このパラメータを追加しない場合、ローカルホストのみが接続を確立することを許可されます。
-L ローカルポート:ターゲットIP:ターゲットポート
ローカルマシン(クライアント)上のポートを、リモート側の指定されたマシン上の指定されたポートに転送します。この仕組みは、ローカルマシンにポートをリッスンするソケットが割り当てられ、そのポートで接続が行われると、リモートホストがホストのホストポートポートへの接続を確立している間に、接続が安全なチャネルを介して転送されるものである。ポート転送は、設定ファイルで指定することができます。特権ポートを転送できるのはrootのみです。IPv6 アドレスは,port/host/hostport という別の形式で記述します.
-R ローカルポート:ターゲットIP:ターゲットポート
リモートホスト(サーバー)から、ローカル側の指定されたマシンの指定されたポートにポートを転送します。この仕組みは、リモートホストにそのポートをリッスンするソケットが割り当てられ、そのポートで接続が行われると、ローカルホストがそのホストのホストポートポートへの接続を確立している間に、安全なチャネルを通じて接続が転送されるというものである。ポート転送は、設定ファイルで指定することができます。特権ポートを転送できるのは、root でログインしているリモートホストのみです。IPv6アドレスは,port/host/hostportの別形式で記述します.
-p: ログインしているssdサーバーのsshdサービスポートです。
-Dポート
ローカルマシンの''動的''アプリケーションポート転送を指定します。この仕組みは、ローカルマシン上でポート port をリッスンするソケットが割り当てられ、そのポートで接続が行われると、アプリケーションのプロトコルに基づいてリモートホストが接続する場所を決定するために、安全なチャネルを介して接続が転送される、というものです。現在、SOCKS4 プロトコルがサポートされており、SOCKS4 サーバーとして動作します。特権ポートを転送できるのはrootのみです。動的なポート転送は、設定ファイルで指定することができます。
応用例
1. ローカルマシンに送信されたポート80のアクセスを174.139.9.66のポート8080にフォワードする。
ssh -C -f -N -g -L 80: 174.139.9.66:8080 [email protected]
2. 174.139.9.66 への 8080 アクセスをローカルマシンの 80 番ポートに転送します。
ssh -C -f -N -g -R 80:174.139.9.66:8080 [email protected]
-N - シェルウィンドウを使用せず、純粋に転送のために使用します。マッピングが完了した後もサーバーにコマンドを入力する場合は、このパラメータを削除してください。
例A.サーバー上のMySQLをリモートで管理したいので、次のコマンドを使用します。
ssh -L 3306:127.0.0.1:3306を実行します。 ユーザー@emlog-vps -N
このコマンドを実行すると、ssh は自動的にサーバーの 3306 をローカルの 3306 ポートにマッピングするので、任意の MySQL クライアントを使って localhost:3306 に接続し、サーバー上の MySQL にアクセスできるようになります。
例B:複数のポートを一度にマッピングする
ssh -L 8888:www.host.com:80 -L 110:mail.host.com:110 -L 25:mail.host.com:25 user@host -N
このコマンドは、サーバーのポート80、110、25をローカルのポート8888、110、25に自動的にマッピングします 上記のコマンドは、ubuntu 9.10で動作します...
ポートマッピングにより、外部ユーザーが社内の複数のアプリケーションに同時にアクセスすることが可能
下図のように、企業でNATサーバを導入する場合の典型的なケースです。現在、企業内にWEBサーバー(192.168.0.3)とERPサーバー(192.168.0.2)の2つのサーバーがある場合。ここで企業は、出張の多い従業員にもWEBサーバーを経由して
インターネット
企業内でこの2つのアプリケーションにアクセスするには、どのように設計すればよいのでしょうか。
I. ポートベースアクセスの一般原則
NATサーバの具体的なポートマッピングの設定を説明する前に、ポートベースアクセスの一般原則を読者に理解してもらうことが重要だと感じています。これは、読者が以下の具体的な構成を理解するのに役立つだろう。以下の著者は、社員がWEBサーバーにアクセスすることを例にして、ポートベースアクセスの基本的な手順について話しています。あるユーザーがWEBサーバーにアクセスする必要があるとします。クライアントのブラウザ(ポート3000と仮定)は、WEBサーバー(ポート80と仮定)とどのように通信するのでしょうか。
ステップ1:接続要求を開始する。ユーザーが会社の Web ページを表示する必要がある場合、ユーザーが使用するホストは Web サーバーに要求を送信します。このリクエスト開始のプロセスで、いくつかのパラメーターが渡されます。例えば、リクエストを送信する過程で、ユーザーのホストはWEBサーバーの IPアドレス これは、IPアドレス、使用するプロトコル(HTTP)等である。さらに、2つのポートがある。1つ目はユーザーのブラウザが使用するポートで3000、2つ目はWEBサーバーのウェブサイトが使用するポートです(HTTPサービスを使用している場合、デフォルトは80ポートです)。
ステップ2:WEBサーバーがリクエストを転送する。サーバーはリクエストを受信すると、パケットを解析する。彼は、パケットを分析した結果、リクエストがポート80のアプリケーションに担当を依頼していることを知る。サーバーは責任者を特定すると、特定の責任者であるWEBアプリケーションサーバーにリクエストを転送し、処理させる。
ステップ3:サーバーは、ウェブアプリケーションサービスから戻ってきたウェブページをユーザーのコンピューターに送信する。その際、3000番ポートにあるWebページを与えるアプリケーション(ブラウザ)も指定する。
ステップ4:ユーザーのコンピューターはパケットを受け取った後、パケットを解析し、どのポート(アプリケーションサービス)にパケットを転送する必要があるかを判断することもあります。解析の結果、ポート3000に転送することが判明した場合、パケットはブラウザに転送されます。
2つ目は、ポートマッピングベースのNATサーバーの設定です。
ポートマッピングベースのNATサーバーは、上記のポートベースのアクセスプロセスと同様に機能します。ただ、ここでは、NATサーバーがユーザーホストに相当し、ユーザーが内部サーバーに相当します。プライベートネットワークのみ IPアドレス サーバーは外部のクライアントと直接通信することができません。このため、ポートマッピングを行わない場合、ユーザーが社内のWEBサーバーとERPサーバーの両方にアクセスする場合は、パブリックIPアドレスを2つ用意する必要があります。しかし、パブリックIPアドレスの不足が深刻であることは周知の通りです。十分なIPアドレスがない中で、このニーズを実現するにはどうすればよいのでしょうか。それなら、ポートマッピングで実現できることが分かっています。
上記のように、あるユーザーが社内のWEBサービスとERPサーバーにアクセスする必要がある場合、NATサービスのアドレスとWEBサーバーとERPサーバーが使用しているポートを知っていればよい。もし
WEBサーバーが使用するポートが80の場合
ERPサーバーが使用するポートは5050です。
また、NATサーバーのIPアドレスを202.96.92.100とした場合
そうすると、ユーザーがWEBサーバーにアクセスするときに、http:// 202.96.92.100を入力するだけでよいことになります。HTTPプロトコルはデフォルトでポート80を使用するため、ここでポート番号を設定する必要はありません。WEBサーバーでこのポートを3000に変更した場合は、アクセス時に http:// 202.96.92.100:3000 (アドレス+ポート番号) という形式を使う必要があります。ユーザーが社内のERPサーバーにアクセスする場合も同様で、NATサーバーのアドレスとERPサーバーが使用するポートをクライアント側に設定するだけです。
NATサーバーのポートマッピング機能により、外部ユーザーが内部のWEBサーバーとERPサーバーの両方にアクセスできることがおわかりいただけると思います。
<スパン では、これを実現するためにはどのように設定すればよいのでしょうか。
NATサーバーにより、社内LANのユーザーが インターネット インターネットメールの送受信やインターネットサイトの閲覧などができるようになります。しかし、デフォルトでは、外部ユーザーは内部サーバーにアクセスできません。これらの機能を実装する必要がある場合は、特別に設定する必要があります。
上の画像にあるように
社内LANのコンピュータ(192.168.0.2)がWEBサーバーで、使用するポートは80です。
外部のユーザーがこのWEBサーバーのサイトにアクセスする必要がある場合、ユーザーはこのWEBサーバーのアドレスが202.96.92.100(NATサーバーのアドレス)であることだけを知ることができます。
WEBサーバーが使用するデフォルトのポートは80です。外部ユーザーがブラウザで内部のWEBサーバーにアクセスすると
彼は、ブラウザに http:// 202.96.92.100 を入力してサイトに接続することになります。
NATサーバーは、このリクエストを内部のコンピューターのWEBサーバー( 192.168.0.2). WEBサーバーはNATサーバーにウェブページを送信し、NATサーバーは外部ユーザーのコンピューターにウェブページを送信する役割を担います。
ユーザーが社内のERPサーバーにアクセスしたい場合も、手順は同じです。
では、NATサーバーはどのようにして、ユーザーのHTTPリクエストを(192.168.0.3)ではなくサーバー(192.168.0.2)に送ろうと判断するのでしょう。
これは主にポートに基づくものです。つまり、NATサーバーにはポートマッピングルールがあり、宛先ポートが80であればWEBサーバーにリクエストを転送し、リクエストされたポートが5050であれば、ERPサーバーにリクエストを送ります。これがポートマッピングの本質である。この内容を理解した上で、以下の設定を行うと、より理解しやすくなります。Routing and Remote Access Master Controlウィンドウを開き、設定するサーバーを選択します。次に、IP Routing, NAT/Basic Firewallを選択します。そして、右側の外部接続されたネットワーク・インターフェイスをダブルクリックし(ここでイントラネットに接続されたネットワーク・インターフェイスを選択しないことに注意してください)、「サービスとポート」タブを選択します。そして、サービス一覧から外部で展開するサービスを直接選択します(例:WEBサーバーを選択)。インターネットサービスプロバイダから割り当てられたNATサーバーのパブリックIPアドレスを示すパブリックアドレスで、このインターフェース内を選択します。次に、このサービス要求を IP アドレス 192.168.0.2 を持つ内部の WEB サーバーに転送するかどうかを設定します。この簡単な設定により、ポートベースマッピングが実装されます。
3つ目は、NATサーバーの性能と利便性の向上です。
このポートマッピングの設定は非常にシンプルであることがおわかりいただけると思います。しかし、その難しさは、このNATサーバーのパフォーマンスをいかに向上させるか、そして、ユーザーがより便利に使えるようにするかという点にあります。これは、ネットワーク管理者が考えなければならないことです。筆者は次のような提案をしています。
1. の代わりにドメイン名を使用する。 IPアドレス . ユーザーが企業内のWebサーバーにアクセスする際、サーバーのIPアドレスを入力するように言われると、一般のユーザーにはちょっと難しいかもしれません。この202.96.92.100という全く関係のない数字を覚えるのはとても大変です。このIPアドレスが意味のあるURLに変換できれば一番いいのだが。企業では、DNSサーバーを所有し、IPアドレスをWebアドレスに変換することができます。そうすれば、社内の社員はそのURLから直接WEBサーバーにアクセスできる。しかし インターネット は、独自にドメイン名を定義することはできません。ユーザーアクセスの利便性を高めるには、企業のネットワーク管理者が適切なドメイン名を申請し、ローカルドメイン名レジストラのようにNATサーバーのパブリックIPアドレスに関連付けるのがよいでしょう。そうすれば、将来、外部ユーザーが内部のWEBサーバーにアクセスするとき、Sinaのようなアドレスを入力すればよい。このような覚えにくいアドレスを入力する必要はないのです。
2. 企業が複数のIPアドレスを申請できるのであれば、別々に配備するのがベストです。つまり、2つ申請することができます。 ADSL のアカウントを取得します。1つは社内サーバーへの接続専用、もう1つは社内の社員がインターネットと通信するためのものです。これは、NATサーバーへの負荷を軽減し、パフォーマンスを向上させることが主な理由です。ADSLのアカウントが1つしかない企業では、外部ユーザーが社内サーバーにアクセスする場合も、社内社員がインターネットにアクセスする場合も、このNATサーバーを経由してデータフローを処理しなければならない。このため、企業のデータトラフィックが比較的大きい場合や、NATサーバーの設定があまり理想的でない場合、このNATサーバーが企業ネットワークアクセスのボトルネックリソースとなる可能性があります。両者を分離すれば、NATサーバーへの負担を軽減し、外部ユーザーによる内部企業サーバーへのアクセスを効率化することができます。
3. 3. ICMPを使用したハッカーによる攻撃の遮断を強化するために、適切なICMPパケットポリシーを設定する。ICMP攻撃の原理は、実は大量のパケットをPing送信してCPU使用率を高く保つことで、NATサーバーをクラッシュさせることなのです。一般にハッカーは、一定期間に大量のリクエストをコンピュータに連続して送り、CPU使用率を高くしてクラッシュさせるのが常である。また、複数のブロイラーを使用して、同時にNATサーバーにパケットを送信する。ICMPベースの攻撃は、サービス拒否につながるICMP攻撃と、リダイレクトされたルートスプーフィング技術に基づく攻撃の2つに大別される。いずれのタイプの攻撃も、NATサーバーに致命的な影響を与える可能性があります。このため、NATサーバーのセキュリティのために、適切なICMPパケットポリシーを設定するのが最善です。例えば、他者からのICMPリクエストへの応答を拒否することができます。こうすれば、攻撃者はNATサーバーにICMP攻撃を仕掛けることができなくなります。
ポートフォワーディングによるSSHトンネリングとイントラネットへの侵入
SSHは安全なトランスポート・プロトコルであり、サーバーに接続するために使用されることが多いことは誰もが知っていることです。しかし、実はこの機能に加えて、そのトンネリングとフォワーディングの機能がさらに魅力的なのです。ここでは、私自身のニーズとウェブで見つけたことに基づく個人的な洞察を、私が実際に行ったことと共に紹介します。
<スパン SSH/plinkコマンドの基本情報です。
まず、この3つの非常に強力なコマンドを紹介します。
<ブロッククオート
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host
関連するパラメータの説明です。
-f 認証後、バックグラウンドにフォークする。
リモートホストにログインせずに、バックグラウンドでユーザー/パスワードを認証します。通常、-Nと組み合わせて使用します。
-L ポート:ホスト:ホストポート
ローカルマシン(クライアント)上のポートを、リモート側の指定されたマシン上の指定されたポートに転送する
. この仕組みは、ローカルマシンにポートでリッスンするソケットが割り当てられ、そのポートに接続があると、リモートホストがホストのホストポートポートへの接続を確立する間に、接続は安全なチャネルを介して転送されます。ポート転送は、設定ファイルで指定することができます。特権ポートを転送できるのはrootのみです。IPv6 アドレスは,port/host/hostport という別の形式で記述します.
-R ポート:ホスト:ホストポート
リモートホスト(サーバー)のポートを、ローカル側の指定されたマシンの指定されたポートに転送します。
この仕組みは、リモートホストにポートでリッスンするソケットが割り当てられ、そのポートで接続が行われると、ローカルホストがホストのホストポートポートへの接続を確立している間に、接続は安全なチャネルを介して転送されるものです。ポート転送は、設定ファイルで指定することができます。特権ポートを転送できるのは、root でログインしているリモートホストのみです。IPv6アドレスは,port/host/hostportの別形式で記述します.
-D ポート
ローカルマシンのquot;dynamic''アプリケーションポート転送を指定します。この仕組みは、ローカルマシン上でポートポートをリッスンするソケットが割り当てられ、そのポートで接続が行われると、アプリケーションのプロトコルに基づいてリモートホストが接続する場所を決定するために、安全なチャネルを介して接続が転送されるものです。現在、SOCKS4 プロトコルがサポートされており、SOCKS4 サーバーとして動作します。特権ポートを転送できるのはrootのみです。動的なポート転送は、設定ファイルで指定することができます。
-C 圧縮を有効にします。
データ転送を圧縮する。
-N シェルやコマンドを実行しない。
スクリプトまたはコマンドを実行しません。通常、-f と一緒に使用します。
-g 転送されたポートへのリモートホストの接続を許可します。
L/-R/-Dパラメータで、確立された転送ポートへのリモートホストの接続を許可します。このパラメータを追加しない場合、ローカルホストのみが接続を確立することを許可されます。注:このパラメータは、実際には決してうまくいかないようです。
以上、抜粋してみました。 http://chenweiguang.blogspot.com/2009/03/ssh.html
ローカルSSHトンネルの作成例
ローカルSSHトンネルの作成を計画する前に、以下のデータについて明確にしておく必要があります。
- 中間サーバーのIPアドレス d
- アクセスするサーバーcのIPアドレス
- サーバーcにアクセスするためのポート
さて、上の図をもう少し具体的にして、これらのマシンにIPアドレスを追加してみましょう。そして、この図に基づいた計画を以下に列挙します。
- 234.234.234.234のFTPサービスにアクセスする必要がある(ポート21)。
- 中間サーバーは123.123.123です。
では、次のコマンドで目的を達成します( 192.168.0.100 で実行します。 )
1.ssh -N -f -L <スパン 2121 : <スパン 234.234.234.234:21 123.123.123.123
<スパン 2. ftp://localhost:2121 # これでローカルポート 2121 にアクセスすると、234.234.234 のポート 21 に接続されます。
ここでは、SSHクライアントの3つのパラメータを使用していますが、以下に説明します。
- -N は SSH クライアントに、この接続では何もコマンドを実行する必要がないことを伝えます。ポートフォワーディングを行うだけです。
- -f は、SSH クライアントをバックグラウンドで実行するように指示します。
-
-L はポートのローカルマッピングを行い、コロンで区切られた3つの部分は次のとおりです。
- <スパン 使用するローカルポート番号
- アクセスする対象マシンのIPアドレス (IP:234.234.234)です。
- アクセスするターゲットマシンポート (ポート: 21)
- 最後のパラメータは、トンネルを確立するために使用する中間マシンのIPアドレスです(IP:123.123.123.123)。
Lパラメータの動作を繰り返してみましょう。L X:Y:Zの意味は、IP YのマシンのポートZを、中間サーバーを経由してローカルマシンのポートXにマッピングすることである。
このコマンドの実行に成功すると、会社のファイアウォールを回避して、お気に入りのFTPサーバーの1つにアクセスすることに成功するのです。
リモートSSHトンネルを作成する方法
ローカル SSH トンネルを確立することによって、我々は正常にファイアウォールを回避し、FTP からリソースをダウンロードを開始しました。では、自宅にいながらダウンロードの進行状況を確認したい場合はどうすればよいのでしょうか。ほとんどの会社のネットワークはルーターを通してインターネットに接続されており、会社内のマシンはインターネットに直接接続されていない、つまりインターネットを通して直接アクセスすることはできない。回線D-B-Aから社内のマシンにアクセスすることはできません。お気づきのように、D-B-A方向の接続はできないが、A-B-D方向の接続は問題ない。では、すでに接続されている A-B-D D-B-A方向のアクセスを達成するために、D-B-A方向の接続はどうでしょうか?答えはイエスで、そのためにリモート SSH トンネルがあるのです。
ローカルSSHと同様に、リモートSSHトンネルを確立する前に、以下のパラメータを明確にしておく必要があります。
- 内部マシンにアクセスする必要があるリモートマシンのIPアドレス(この場合は123.123.123.123)
- リモートマシンからアクセスできるようにする必要がある内部マシンのIPアドレス(ここではローカルマシンをマップアウトしようとしているため、IPは127.0.0.1となっています)。
- リモートマシンからアクセスする必要のある内部マシンのポート番号(ポート:22)
上記のパラメータをクリアした状態で、以下のコマンドを使用してリモート SSH トンネルを作成します。
1. ssh -N -f -R 2222: 127.0.0.1:22 123.123.123.123
さて、IP 123.123.123のマシンで、IP 192.168.0.100の会社のマシンに次のコマンドでログインできます。
<ブロッククオート1.ssh -p 2222 localhost
Nと-fパラメータは、ローカルSSHトンネルですでに紹介しました。ここでは、-Rパラメータに焦点を当てますが、その3つの部分は以下の通りです。
- リモートマシンが使用するポート(2222)
- マッピングされる内部マシンのIPアドレス(127.0.0.1)
- マッピングされる内部マシンのポート(22)
例:-R X:Y:Zは、内部マシンYのポートZをリモートマシンのポートXにマッピングする。
<スパン SSHトンネルをセットアップするためのいくつかのヒント
自動再接続
トンネルは、マシンの再起動や、ルーターによって切断されたデータ通信のない状態が長く続くなど、何らかの理由で切断されることがあります。そこで、トンネルの再接続をプログラム的に制御することができます。例えば、単純なループを使用するか、または djbのdaemontools . どの方法を使うにせよ、再接続時にパスワードを入力してプログラムを妨害することは避けるべきです。パスワードの入力を安全に回避する方法については、私の <スパン パスワード不要の安全なsshログインを実現する方法 . ここで、他のプログラムを通してトンネル接続を制御する場合、SSHクライアントをバックグラウンドで実行するようにすること、つまり、-fパラメータを削除することは避けるべきであることに注意してください。
長い接続を維持する
ルータの中には、長時間通信していない接続を切断するものがあります。sshクライアントのTCPKeepAliveオプションは、この問題を回避するもので、デフォルトでオンになっています。オフに設定されている場合は、sshコマンドに-o TCPKeepAlive=yesを追加することでオンにすることができます。
もう一つの方法は、-Nパラメータを削除して、定期的に出力を生成するコマンドを追加することです。この方法の例を以下に示します。
<ブロッククオート1. ssh -R 2222:localhost:22 123.123.123.123 "vmstat 30"
トンネルの状態を確認する
通信量が多いためにルーターによって停止状態に持ち込まれるなど、何らかの通信不良でトンネルが立ち往生することがあります。そのようなとき、しばしばSSHクライアントが終了せず、そこで立ち往生してしまうことがあります。この対処法として、SSHクライアントのServerAliveIntervalオプションとServerAliveCountMaxオプションを使用する方法があります。ServerAliveIntervalは、トンネルが無通信状態になってから一定時間後に、サーバーに応答要求を送ります。ServerAliveCountMaxリクエスト後にサーバーが応答しない場合、SSHクライアントは自動的に切断して終了し、監視アプリケーションに制御を委ねます。この2つのオプションは、sshに-o ServerAliveInterval=nと-o ServerAliveCountMax=mを追加することで設定します。ここで、nとmは自分で定義することができます。
ポートを外部アドレスにバインドする方法
上記の方法では、マッピングされたポートはインターフェース127.0.0.1にのみバインドすることが可能です。つまり、ローカルマシン自身からしかアクセスできないのです。他のマシンがこのポートにアクセスできるようにするには、どうすればよいのだろうか。また、SSHサーバーのオプションである-GatewayPortsをオンにする必要があります(デフォルトではオンになっているはずです)。デフォルトではオンになっているはずです。オフになっている場合は、/etc /sshd_config で GatewayPorts no を GatewayPorts yes に変更することでオンにすることができます。
<スパン SSHトンネルを利用したSOCKSサーバーのセットアップ
中間サーバーの助けを借りて多くのリソースにアクセスする必要がある場合、それらを1つずつマッピングするのは明らかに賢い方法ではありません(実際、Compuware APMはこの方法を使用していませんでした)。幸い、SSHクライアントがSSHトンネルを通してSOCKSサーバーをセットアップする機能を提供してくれています。
次のコマンドで、123.123.123.123上にSOCKSサーバーをセットアップすることができます。
<ブロッククオート1.ssh -N -f -D 1080 123.123.123 # ポートを 127.0.0.1 にバインドする。
2. ssh -N -f -D 0.0.0.0:1080 123.123.123 # ポートを 0.0.0.0 にバインドする。
SSHで設定するSOCKSサーバーはSOCKS5プロトコルを使用するので、アプリケーションにSOCKSプロキシを設定する場合は特に注意してください。
上記は抜粋です。 http://blog.jianingy.com/content/...
1 >逆トンネリング技術
シナリオ:休日に職場に戻る必要があります。しかし、会社はイントラネットでNATを使用しているため、戻るための接続方法がない。
今、会社のマシン(LAN_ip)で以下を実行します。
ssh -NfR 2222:localhost:22 home_ip
-R : 逆方向の接続を確立する home_ip ポート
さて、home_ipの先頭には
ssh ローカルホスト -p 2222
会社のマシンをNATの後ろに走らせるだけ。それがバックドアだ。Grey Pigeon Trojanはバックリンクも使う。
宛先( LAN_ip ) <- |NAT| <- ソース ( ホームIP )
2> ポートフォワーディング
シナリオ www.xxx.com这个网站 へのローカルアクセスは許可されていないが、リモートホスト ( リモートIP )ができる。
ssh -f -N -L 31609:www.xxx.com:80 ユーザー <スパン リモートIP
これで、ローカルで http://localhost:31609 を開き、www.xxx.com了 にアクセスできるようになりました。
3> SOCKSプロキシ
シナリオ ローカルマシンは特定のウェブサイトへのアクセスを許可されていないが、リモートホスト (remote_ip) は許可されており、会社は remote_ip に接続するようにあなたを組織していない。
ssh -NfD 8888 ユーザー リモートIP
ブラウザの socks 5 プロキシを localhost:8888 に設定することで、これまでアクセスできなかったすべてのサイトにアクセスできるようになりました。
古代の人々は、偉大な統治の時代を、「夜、閉ざされる家はない」「手つかずの道はない」と表現した。大政奉還が行われたとき、人々の道徳水準はすでに高いと考えていたのである。初期のインターネットの形成は、この考え方に沿っていると思われる。 インターネットの原点は、相互信頼と相互共有にあった しかし、この「信頼」は、「偉大なる統治」、あるいは「普遍主義」を前提としていた。インターネットが商業化・民営化されるにつれて、そのセキュリティはますます脆弱になり、サイバー攻撃や詐欺が蔓延し、さらに ネットワーク管理者の中には、ユーザーの通信を検知し、改ざんし、ブロックすることを望む人がいる。 . SSH SSHのいくつかの機能は、多くの場面でこれらの問題を解決することができます。
sshの基本的な使い方は
sshはコマンドラインも強力です
sshはセキュアなリモートログインツールで、リモートホストとやり取りする際に元のデータを暗号化・圧縮し、ネットワーク伝送中のデータの安全性を確保します。この原理を利用して、ssh 接続上で他の TCP データストリームを平文で転送することもできます。これが、この記事で説明する ssh 転送/トンネリング技術です。次の図は、ssh 接続を表しています (画像はイメージです。
<スパン
http://www.ssh.com
)
関連
-
undefinedmakefile:n: *** セパレータがありません。
-
アクセスが拒否されました。PROCESS 特権が(少なくとも1つ)必要です。
-
[エラーログ】シェルスクリプトによって報告された曖昧なリダイレクトを解決する
-
MySQL5.7 のパスワード変更で ERROR 1054 (42S22) が発生しました。fie'内の不明なカラム'password'が見つかりません。
-
Nvidia グラフィックスカード 初期化に失敗しました NVML Driver/library version mismatch エラー解決法
-
MongoDBインストール+解決エラー。mongod.service の起動に失敗しました:until not found
-
VNC mesg を開くとき: ttyname に失敗しました。デバイスに不適切な ioctl
-
CentOS 7 エラー: curl#60 - "ピアの証明書は有効期限が切れています。"
-
エラーとなったシェルスクリプトを実行します。"予期しないトークン付近の構文エラーに対する解決策`"
-
Linuxでビジー状態のテキストファイルでプログラムを実行する場合の対処法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SSHパスワードフリーログイン設定後、stdinがターミナルでないため、疑似ターミナルが割り当てられない。
-
linuxのインストールファイルでは、configure: error: no acceptable C compiler found in $PATH errorが表示されます。
-
R パッケージのインストール: パッケージ 'phangorn' のインストールで終了ステータスが 0 以外になった。
-
LDAPエラー ldap_bind: 無効な認証情報 (49) 解決策
-
linux system: make: *** `install' をターゲットにするルールがありません。停止してください。
-
makefileを参照してください。2: セパレータがありません。
-
mach-mini2440.c:155: error: array type has incomplete element type
-
cp: 通常のファイル `/usr/local/bin/orange' を作成できません。テキストファイルがビジー状態
-
gcc/g++エラー... /crt1.o: 関数 `_start' で。(.text+0x18): `main'への未定義の参照エラー
-
Ansibleの通常ユーザーsudoがコマンドを実行します。