サーバー・クリニック: SSHでの安全な接続

あなたのサーバーを守るのに、距離もファイアウォールも必要ありません

みなさんは間違いなくリモートサイトからサーバーで動作するSSHを使用したいと思われることでしょう。しかし、スムーズに進行させていくにはいくつかの秘訣があります。

Cameron Laird (Cameron@Lairds.com), Vice President, Phaseit, Inc.

Photo of Cameron LairdCameronは、Phaseit, Inc. の常勤のコンサルタントです。オープン・ソースなどの技術的なトピックについて、数々の執筆や発言を行っています。Cameronのメール・アドレスはclaird@phaseit.net です。



2003年 7月 10日

MindTerm、socat、VNC、などはすばらしい機能です。リモート操作はシステムのプログラマーや管理者が最も恩恵を受けてきたLinuxの利点のうちの1つである一方で、リモートアクセスのセットアップにはいくつかの簡単な秘訣があります。

正しいリモート・サービスの選択

毎回サーバー・クリニックでは、サーバー・ルームのハードウェアを最大限に利用する方法について記述しています。このコラムは、あまり知られていないLinuxの使用法についてよく言及しています。たとえば、Linux版Fortranプログラム、レガシー・オペレーティング・システム用に設計されたLinuxアプリケーションなどです。

このコラムのもう一つの継続しているテーマはセキュリティーに関してであり、この記事の主題でもあります。

みなさんのサーバーは物理的に隔離されるべきです。極めて重要ではないネットワーク・アクセスはすべて無効にして、SSHあるいはそれ以上のものを経由したアクセスだけが許される様にするべきです。特にtelnetftprloginrshなどの関連サービスはめったなことでは許可されるべきではありません。それらはあまりにも危険すぎるためです。

例えばあなたが社外にいるとします。製品の説明をしているか、新規クライアントの要件をじっくりと検討しているか、あなたの研修予算に組み込まれたカンファレンスを終了しようとしています。しかし、会社に戻って調整することが必要となったらどのように対処しますか?

社外から接続を要求することは合理的な業務目的に役立ち、社会にたいして過剰な要求ではないのは確かです。

社外からの接続が認められれば、接続には「SSHを使う」が正解です。原則として、SSHより優れているvirtual private network(VPN)に依存していても、通常の方法を使用することができない時の緊急用にSSHによるアクセスを設定しておくことが賢明であると思います。VPNは少し扱いにくい所があり、特定のハードウェア構成に依存します。おそらく一般的なデスクトップを使用して「家に電話をする」方法がクライアントのネットワーク経路であれば、その選択肢は大幅に制限されています。


SSHはニーズを満たします

幸いなことに、SSHは通常VPNで発生するような制限には適合できます。おそらく「インターネットカフェ」のような公共のアクセス・ポイントからのリソースでも、SSHを機能させるのには十分です。

あなたはおそらく自分の機器には頼ることができません。携帯機器より大きなものを持ち歩くのは、別のセキュリティー上の危険性を持つと、私は判断します。残念ながら、多くのサイトは異質のハードウェアがプラグインすることを許可していません。たいていは与えられるものを使用しなければなりません。

しかし、puTTY、SSH、あるいはMindTermクライアントをダウンロードすることは一般的に早いし、私はそうすることが好きです。サーバー・ルームに接続されるのに十分なネットワーク・スタックを備えたホストは、ダウンロードを許可するWebブラウザーを保持していることが多いです。既にインストールされているクライアントは疑ってください。誰かがあなたのキー・ストロークをとらえる修正済のクライアントに置き換えていると考えるのは容易なことです。

一見魅力的である1つのバリエーションは、アプレットとしてMindTermクライアントを埋め込んだWebページを構築することです。私の経験では、この手段はほとんど役立ちません。あまりにも多くのサイトがJavaを無効にしていたり、古いJava runtime engines(JRE)を備えたブラウザーを提供していたり、そうでなければアプレットの便宜を損なっているためです。私がMindTermを使用していれば、私はMindTermおよび互換性のあるJREをダウンロードしてインストールするでしょう。アプレットは多くの場合、エンドユーザーのために設計されたアプリケーションの構築に適した技術で、しばしば読取専用構成になっています。しかし、私はアプレットをほとんど見たことがありません。したがって、自分の生産性を有効にするためにアプレット環境で出来る限りの挑戦を行うことは、時間がかかる割には価値がありません。あくまでもメガバイトの大容量記憶装置を設置して、そこにSSHをインストールすることが簡単であると、私は思っています

座った数分後には、新しいSSHクライアントがインストールされ開始されるべきです。しかし、それだけでは十分ではないかもしれません。いくつかのサイトのファイアウォールはほとんどのポートが閉じていますが、少なくともSSHの標準ポート22を含んでいれば十分です。

別の方法も以下に示しておきます。私はホスト中の少なくとも1台において、通常はftp、http、smtp、pop3のような一般的なインターネット・サービスに割り当てられているポートでsshd(SSHデーモン)を起動させておくのが好きです。最も変わったファイアウォールでさえ、21、8080、25、110ポートのうちの少なくとも1つを開けています。そのような経路を「見つける」ためのマシンを1台設定しておいてください。そうすれば、ほとんどのファイアウォールを超える事に成功します。

「クラッカー」の話のように聞こえますか?私は他の会社の従業員に、彼らのファイアウォールを変更することは組織的に不可能であるという認識のもとで、一時的にポート22を開けておくような賢くみえる方法で、彼らのネットワークを使用する方法をしばしば尋ねられました。トンネルは現在プロの手法の一部であり、信頼できる方法のみで行っていることを保証する必要がある、と私は認めるようになりました。

もちろん、SSHチャネルが開いている状態では、私はサーバー・ルームのコンソールの前に座っていることにパワーのほとんどを使います。グラフィックス・ディスプレイの必要があるなら、私はXやVNCのトンネル化ができます。また他のアクティビティーは全てコマンド・ラインからアクセス可能です。

このようにして、私の作業の多くのセッションは開始します。私はSSHクライアントをダウンロードして、直ちにインストールし、それらを開始します。その後、サーバー・ルームで起動させておいた1つあるいは他のsshdのSSLに保護されたパスワードで認証を行います。

まだ不正に変更されたホストに攻撃を受けやすいことに注意してください。それらがSSLライブラリーに達する前に、十分に変更されたデスクトップあるいは抜け目のない覗き魔はSSLライブラリーに達する前にキーストロークを記録することができます。このための1つの解決策はone-time password (OTP)システムを使用することです。今までのところ、OTPはセキュリティーよりも多くの問題を加えるように私は感じていました。コストと利益が少なくともわずかに異なっていることを確認してください。どんな場合も、通常の仕事に対する利益はパスワードを更新する利益を与える時間になることが多いです。


標準部品の使用

私は、毎回のサーバー・クリニックに実際のコードを掲載してほしいと思っています。しかし今回の場合、どのコードを掲載するかは難しいです。私が薦める設定は標準リファレンスで適切に文書化されています。例えば、もう1つのポートにSSHサービスを追加するには、次のような行を既存の/etc/SSH/sshd_configに追加して、sshdをリスタートするだけです。

Port 8080

起動の実験、およびロギングもしくはさらなるセキュリティーのチューニングに役立つ代わりのアプローチは、netcatやsocatのような「ネットワーク・プロキシー」あるいは「ポート・フォワード」を使用することです。これらでlocalhostの標準SSHポートを指定します。

プロキシー

このコンテキストでいう「プロキシー」はネットワークのトラフィックを通過する小さな「変換機構」です。私がポート22にsshdサーバーを設定し、別のポート110にも設定したければ、ネットワーク・プロキシーをインストールすればよいです。そのようなプロキシーは、ポート110でサーバーの役割をして外部からトラフィックを受け取り、ポート22ではクライアントの役割をしてそれらのパケットを処理します。本来のsshdサーバーが実際の仕事をすべて行います。プロキシーは、あるポートから(潜在的に別のホストの)別のポートへ変換します。

このコラムの真価は、少数の人にしか理解できないコードにあるのではなく、リモート・サービスを可能にするために行うべき目安を明確に伝えることにあります。私は多くのアプローチを試みてきました。その経験を生かして、とりわけ何を行うべきでないかを学んでください。少なくとも最初にサーバー・ルームをセットアップする時に次のようなことは行うべきでないです。telnetを許可しないでください。未使用のサービスを放置しないでください。アプレット(特にアプレット署名がないもの)については取り扱わないでください。間違っているように感じる場合は、リモートでログインしないでください。

他方で、標準部品を使用してください。私は、「ブラックハット」を排除するためにSSHプロトコルあるいは自分のファイアウォールを微調整できる幅広いクレバーな考えを試みてみました。それらは一般的に、セキュリティーに関する実現可能な小さな改良よりも保守のほうが難しいです。もし私が明確な長期目標を備えた具体的なセキュリティー・プロジェクトの予算を立てることができないのならば、私はそれを改善しようとするよりもSSHを使用することによりいっそう時間を費やされることになります。

これまでのステップを実行してみてください 。そうすれば、標準Linuxサーバー設置を使用するよりはるかに安全なサーバー・ルームを持つことができるでしょう。さらに、世界の至る所で行われるほとんどすべての同時接続から、サーバーをリモートに管理することができるでしょう。これがセキュリティー・プランの正しい始まりです。

参考文献

  • Linux (または異種混合) ネットワークでのコンピューターの共用: 第1回」( developerWorks、2001年 12月 )では、SSHとVNCについて比較をしています。「 Linux (または異種混合) ネットワークでのコンピューターの共用: 第2回」( developerWorks、2002年 3月 )では、VNCについてより詳細に解説し、remoteXと安全性について考察しています。
  • PuTTY: a free Win32 telnet/ssh clientは、Cameronが標準のPCデスクトップからの使用に賛成しているSSHクライアントのホームページです。
  • MindTermの製品ページでは、JavaでコーディングされたMindTermのSSHクライアントについて説明があり、最新のバージョンを無料でダウンロードできます。
  • MindTermアプレットの署名バージョンでWebページを構築すると決めたのであれば、アプレット書名についてよく調べるようにしてください。
  • One-Time PasswordIETF の標準です。これはSSHと結合できますが、Cameronはセキュリティに対する努力を、侵入の検出などより大きな効果を生む他のテクノロジーに焦点をあてることが正しいと思っています。
  • socatは、作者Gerhard Rieger氏が「多目的リレー」と名づけるに十分なように、ネットワーク・プロキシーやポート・フォワードの前の世代よりも多くを行っています。
  • netcatは、何年も使用されてきたポート・フォワードです。
  • sockspyは、ネットワーク接続のデバッグやネットワーク接続へのプログラミング追加に役立つスクリプト可能なネットワーク・プロキシーです。
  • developerWorksのLinux ゾーンには、他にも Linux開発者向けの参考文献が多数掲載されています。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=230655
ArticleTitle=サーバー・クリニック: SSHでの安全な接続
publish-date=07102003