web-dev-qa-db-ja.com

インターネット経由でMicrosoftリモートデスクトップ接続を保護しますか?

自宅のWindows10マシンで、MicrosoftのRDPポート(3389)をルーター経由でポート(20202)にポート転送しました。したがって、<my public IP address>:<port>(例:134.111.23.443:20202)と入力するだけで、MacのMicrosoftリモートデスクトップアプリケーションを介してWindows10マシンにリモートアクセスできます。

他のコンピューターを必要とせずに、SSHを介したトンネリングなど、これをより安全にする方法があるかどうか疑問に思っています(自宅の固定電話でインターネットに接続されているのは、Windows 10マシンと、私が持っているMacBookだけです。私と一緒に)。

1
Joe

マイクロソフトはまだRDPセッションへのブルートフォース攻撃を防ぐ方法を理解できないため、これは本当に良い決断です。ニースで非常によく説明されているアカウントロックアウトポリシー(いくつかの欠点があります、さらに読んでください)があります @ harrymc answer ので、少なくともWindowsProバージョンを持っている人はそのようなワークフローを使用できます。

ホームバージョンの所有者である場合は、次のキーでレジストリを直接編集することにより、アカウントロックアウトポリシーをアクティブ化できます。

_HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\AccountLockout
_
  • アカウントをロックアウトする前に、MaxDenials値をダブルクリックし、失敗した試行回数を入力します。
  • ResetTime(mins)値をダブルクリックし、デフォルト値_0xB40_を2,880分(2日間)の16進数から妥当な値(たとえば15〜20分)に変更します。

問題 Windowsアカウントロックアウトポリシーでは、他の誰かがパスワードをブルートフォースしようとすると、コンピューターがロックされます。ポリシーは発信者のIPに依存せず、ログイン試行をカウントしてアカウントロックアウトイベントをトリガーするだけなので、所有者と攻撃者の両方へのアクセスを効果的に無効にします。

もう1つのIMHOのはるかに強力な保護は、パスワードベースの認証よりもはるかに強力な [〜#〜] ssh [〜#〜] 公開鍵認証を使用することです。

あなたはSSHに言及することでほとんどあなたの質問に答えました。 Windows PCで cygwin を設定し、SSHサービスを実行して_sshd_config_トンネリングを有効にし、プレーンパスワード認証を無効にしながら公開鍵認証を設定します(正常にホームLANにいるときにssh接続をテストします)作業)。
ルーターで、デフォルト以外のSSHポート(22)、たとえば20202をこのWindowsマシンからWindows PCのポート22に転送します(RDPへの転送を無効にすることも忘れないでください)。 RDPに接続する場合は、以下のスクリプトを使用して、リモートWindowsPCへの最初のSSHセッションを開始します。
(Linux、BSD、MacOSなどのUnixベースのOS用のスクリプト。cygwinを使用している場合。Windowsをクライアントとして使用している場合は、以下の「接続」セクションを参照してください)

_#!/bin/sh

# Script that can be use on remote client that running Unix based OS

RemotePC_IP=1.2.3.4  # Public IP address of your home
WindowsUserName=Gates  # Windows user name on remote computer
RDPlocalListenPort=12345  # Local port that that will be forwarded to RDP
Path2prvKey='/path/to/private/key' # Path to private key
RemoteSSHport=20202 # The port that opened on your home router
                    # and forwarded to SSH service port on Windows PC

ssh -N -L ${RDPlocalListenPort}:localhost:3389 \
    -i ${Path2prvKey} -p ${RemoteSSHport} ${WindowsUserName}@${RemotePC_IP}                   

# If you also want to use bunch of useful Unix utilites (that doesn't
# exist natively on Windows) besides of port forwarding, you can remove
# `-N` option from this script and use cygwin's terminal to run Windows's
# and Unix's console base programs remotely without starting RDP session. 
_

安全に暗号化されたSSHセッションを介してローカルポート12345をリモートWindowsマシンのRDP(3389)ポートに転送し、最後に接続文字列_localhost:12345_を使用してRDPに接続します。

RDPセッションを保護するこのような方法の利点は、複雑なパスワードよりもはるかに強力な非対称暗号化を使用してチャネルが暗号化されることです。強力な暗号化に加えて、豊富なUnixのユーティリティを使用して、セキュリティで保護されたチャネルのリモートWindowsPCを管理できます。

SSHを利用してできるもう1つの優れた点は、自宅に静的IPアドレスがない場合OR LogMeInやTeamViewerなどの企業を完全に信頼したくない場合ORポートフォワーディングを設定できない厳格なファイアウォールの背後にあるPC ORプライマリゲートウェイ/ファイアウォールを制御できない場合は、SSHをリバースモードで設定できますここで、Windows PCは、制御する静的IPを使用して中間サーバーに自動的に接続します。この方法では、Windows PCに直接接続する必要はなく、代わりに多くのコンピューターにサービスを提供できる中間サーバーに接続します。 IPが不明で、ITサポートがサードパーティのサービスを使用せずに会社のモバイルPCをサポートする必要があるモバイル顧客。データが危険にさらされるリスクを減らす高い会社の秘密のためです。

以下のインストールプロセスは読むのに少し時間がかかるように見えますが、実際には、そのようなインストールの仕組みを理解すると、10〜15分かかります。

詳細:

Cygwinのインストール

更新:開始 Windows 10 v.1803 MicrosoftにはOpenSSHサーバーとクライアントがプリインストールされています したがって、以下の手順は、Windows 10をお持ちでないか、まだアップグレードされていない方を対象としています。 Windows 10v.1803以降へ。

WindowsにSSHをインストールするには、SSHサービスのセットアップ方法の詳細とスクリーンショットを記載したOracleのドキュメントに従ってください。
セクション5.3、5.4、5.5に従う必要があるだけです ここ

SSHサービスをインストールするために実行する必要がある最も重要な手順を以下に投稿します。

  • cygwin プライマリサイトから実行可能セットアップファイルをダウンロードします。セットアップファイルには、_setup-x86.exe_と_setup-x86_64.exe_の2つのバージョンがあります。お使いのマシンに適したファイルを選択してください。 SSH以外の他のUnixベースユーティリティを使用したい場合は、すべてのユーティリティが64ビットバージョンに移植されているわけではないため、マシンが64ビットであっても_x86_バージョンを使用することをお勧めします。
  • セットアッププロセスは非常にシンプルで直感的です。
    [インストールの種類の選択]画面で、[インターネットからインストール]を選択し、[次へ]をクリックします。
  • [インストールディレクトリの選択]画面で、ルートディレクトリとしてC:\ cygwinと入力し、[次へ]をクリックします。 _Install for_ラジオボタンをに設定します All users
  • [ローカルパッケージディレクトリの選択]画面で、ダウンロードしたインストールファイルを保存するローカルマシン上のディレクトリを選択し、[次へ]をクリックします。 (デフォルトの_c:\packages_を維持できます)
  • [接続タイプの選択]画面で、インターネットに接続するための適切な設定を選択し、[次へ]をクリックします。 PCがプロキシなしでインターネットに直接アクセスできる場合は、_Direct connections_を選択します。
  • [ダウンロードサイトの選択]画面で、利用可能なリストから任意のサイトを選択し、[次へ]をクリックします。あなたのサイトに最も近い場所を選択してください。 [パッケージの選択]画面で、少なくとも次のパッケージを選択していることを確認してから、[次へ]をクリックします:
    • opensshopensslunzipxzZipmc
  • パッケージを選択して[次へ]をクリックすると、[依存関係の解決]画面が表示されます。 [次へ]をクリックして続行します。
  • Unixベースのユーティリティを使用すると思われる場合は、[インストールステータスとアイコンの作成]画面で変更を加えないでください。 [完了]をクリックしてインストールプロセスを完了します。それ以外の場合は、チェックボックスをオフにします。

SSHの構成

  • Cygwinをインストールした後、_C:\cygwin_ディレクトリに移動し、任意のエディターを使用して編集モードで_Cygwin.bat_ファイルを開き、bashシェルを呼び出す前に次の行を追加します。
    _set CYGWIN=binmode ntsec_以下の例のように:

    _@echo off C: chdir C:\cygwin\bin set CYGWIN=binmode ntsec bash --login -i_

  • Cygwincygrunsrv)が正しくインストールされているかどうかを確認するには、
    _C:\cygwin\Cygwin.bat_、次のコマンドを実行します。
    _cygrunsrv -h_
    Cygwinが正しくインストールされている場合、すべてのCygwinヘルプオプションが画面に表示されます。ただし、このコマンドがエラーメッセージを返す場合は、Cygwinを再インストールする必要がある場合があります。

  • SSHDサービスを構成するには、_C:\cygwin\Cygwin.bat_を実行し、次のコマンドを実行します。
    _ssh-Host-config_
    コマンドを実行すると、次の質問が表示されます。
    *** Query: Should privilege separation be used? <yes/no>: yes *** Query: New local account 'sshd'? <yes/no>: yes *** Query: Do you want to install sshd as a service? *** Query: <Say "no" if it is already installed as a service> <yes/no>: yes *** Query: Enter the value of CYGWIN for the deamon: [] binmode ntsec *** Query: Do you want to use a different name? (yes/no) yes/no
    この時点で、同じ名前、つまり_cyg_server_を使用する場合は、noを入力します。次に、次の質問が表示されます。
    *** Query: Create new privileged user account 'cyg_server'? (yes/no) yes *** Query: Please enter the password: *** Query: Renter:
    ただし、別の名前を使用する場合は、「はい」と入力します。次に、次の質問が表示されます。
    *** Query: Enter the new user name: cyg_server1 *** Query: Reenter: cyg_server1 *** Query: Create new privileged user account 'cyg_server1'? (yes/no) yes *** Query: Please enter the password: *** Query: Reenter:
    構成が成功すると、次のメッセージが表示されます。
    _Host configuration finished. Have fun!_
  • _c:\cygwin\etc\passwd_ファイル(存在する場合)をバックアップし、次のコマンドを実行します。
    _/bin/mkpasswd -l >/etc/passwd_
    次に、_mcedit /etc/passwd_を実行してpasswdを編集します
    削除SSH経由で接続しないすべてのユーザー、特に:
    _SYSTEM, LOCAL SERVICE, NETWORK SERVICE, NT SERVICE+TrustedInstaller, Guest_

SSHDサービスの微調整

  • 以下を実行して、_sshd_config_ファイル(SSHサービス)を編集します。
    _mcedit /etc/sshd_config_
  • 次のコンテンツをファイルの最後に追加します。

_########################### Customization ##########################
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
MACs [email protected],[email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,[email protected]
#
UseDNS no
UsePAM yes
LoginGraceTime 20
#
PermitRootLogin prohibit-password
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
HostbasedAuthentication no
#
PermitTunnel yes
TCPKeepAlive no
ClientAliveInterval 30
ClientAliveCountMax 10
GatewayPorts no
AllowTcpForwarding yes
_

  • ここで、 公開鍵認証 の鍵を生成する必要があります。
    cygwinターミナルで、次のコマンドを実行します。
    _mkdir -p ~/.ssh && chmod 700 ~/.ssh_
    _cd ~/.ssh_
    _echo > ~/.ssh/authorized_keys_

    • Unixの方法でキーを生成します:(「UserName」をSSH経由で接続されるWindowsアカウントに置き換えます)
      cygwinターミナルで、次のコマンドを実行します。
      _cd ~/.ssh_
      _ssh-keygen -t ed25519 -o -a 127 -C "UserName" -f "UserName.ed25519.key"_
      _cp -f UserName.ed25519.key.pub ~/.ssh/authorized_keys_
    • Windowsの方法:
      ダウンロード PuTTY そして_puttygen.exe_を実行します。 _ED25519_として生成するキーを選択し、を押します Generate。秘密鍵をファイルに保存します。このファイルは、後で認証用の鍵として使用できます。 (OpenSSHに渡すための公開鍵)とマークされたフィールドから上部の公開鍵を選択し、選択を右クリックしてcopyを選択し、次にpasteコピーされたコンテンツを
      _~/.ssh/authorized_keys_
  • 最後に、次のコマンドを実行してSSHサービスを開始します。
    _cygrunsrv -S sshd_

SSH接続を介したリモートクライアントからRDPへの接続

  • Linux、FreeBSD、MacOSなどのUnixベースのオペレーティングシステムに接続するには、回答の上部に投稿されたシェルスクリプトを使用できます。スクリプトの上部にある変数を編集し、前の手順で生成された秘密鍵を使用します。
  • Windowsを実行しているコンピューターから接続するには、 PuTTY クライアントプログラムを使用できます。 RDP(リモートデスクトップ接続)を介してリモートコンピューターに接続する前に、最初にPuTTYを実行し、ポート転送と秘密鍵を設定します:
    • 左側のツリーパネルで、
      _Connection->SSH->Auth_そしてクリックして Browse ボタンは、前の手順で生成された秘密鍵へのパスを追加します。
    • 左側のツリーパネルで、
      _Connection->SSH->Tunnels_そしてフィールド_Source port_ _12345_に入力し、_localhost:3389_をフィールドdestinationに入力し、ラジオボタンをLocalに設定します。およびAutoを押して Add ボタン。
    • 左側のツリーパネルでSessionに移動し、SSHを実行しているリモートWindows PCの_Host Name_フィールドにIPアドレスを入力し、ホームルーターのリモートリスニングポートをフィールドPortに設定します。
    • _Saved Sessions_フィールドにセッションの説明的な名前を追加し、構成を保存します。
  • SSH経由の接続が確立されたら、_Remote Desktop Connection_プログラムを実行し、_localhost:12345_を使用してSSHトンネル経由でRDP経由でリモートコンピューターに接続します。
3
Alex

Microsoftのリモートデスクトップは暗号化を使用しているため、通信は合理的に保護されています。弱点は、ユーザー名とパスワードに対するブルートフォース攻撃です。

RDPを保護するには、次のようにします。

  1. リモートデスクトップがリッスンするデフォルトのポートを変更します
    これはあなたがすでに行ったものです。

  2. 強力な資格情報
    デフォルト以外のユーザー名と長くて複雑なパスワードを使用する

  3. 制限されたユーザーアカウント
    secpol.msc>ローカルポリシー>ユーザー権利の割り当てを実行してRDPを使用できるユーザーを厳しく制限し、[リモートデスクトップサービスを介したログオンを許可する]をダブルクリックして、表示されているすべてのグループを削除してから、 1人のユーザー。

  4. 高いセキュリティレベル
    実行gpedit.msc>ローカルコンピューターポリシー>管理用テンプレート> Windowsコンポーネント>リモートデスクトップサービス>リモートデスクトップセッションホスト>セキュリティ。

    • 「クライアント接続の暗号化レベルを設定する」->有効および高レベル、セッションを128ビット暗号化で保護する
    • 「リモート(RDP)接続に特定のセキュリティレイヤーの使用を要求する」-> SSL
    • 「ネットワークレベル認証を使用してリモート接続にユーザー認証を要求する」->有効
  5. アカウントロックアウトポリシーを設定します
    何度も誤った推測を行った後、一定期間アカウントをロックするには、[管理ツール]> [ローカルセキュリティポリシー]> [アカウントポリシー]> [アカウントロックアウトポリシー]に移動し、3つのオプションすべてに値を設定します(3回の無効な試行3回分のロックアウト期間は妥当です)。

  6. PCへのログインを追跡します
    定期的に[イベントビューア]> [アプリケーションとサービスログ]> [Microsoft]> [Windows]> [TerminalServices]-[LocalSessionManger]> [Operational]に移動して、ログイン情報を確認します。

2
harrymc