自宅のWindows10マシンで、MicrosoftのRDPポート(3389)をルーター経由でポート(20202)にポート転送しました。したがって、<my public IP address>:<port>
(例:134.111.23.443:20202
)と入力するだけで、MacのMicrosoftリモートデスクトップアプリケーションを介してWindows10マシンにリモートアクセスできます。
他のコンピューターを必要とせずに、SSHを介したトンネリングなど、これをより安全にする方法があるかどうか疑問に思っています(自宅の固定電話でインターネットに接続されているのは、Windows 10マシンと、私が持っているMacBookだけです。私と一緒に)。
マイクロソフトはまだ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分かかります。
更新:開始 Windows 10 v.1803 MicrosoftにはOpenSSHサーバーとクライアントがプリインストールされています したがって、以下の手順は、Windows 10をお持ちでないか、まだアップグレードされていない方を対象としています。 Windows 10v.1803以降へ。
WindowsにSSHをインストールするには、SSHサービスのセットアップ方法の詳細とスクリーンショットを記載したOracleのドキュメントに従ってください。
セクション5.3、5.4、5.5に従う必要があるだけです ここ
SSHサービスをインストールするために実行する必要がある最も重要な手順を以下に投稿します。
setup-x86.exe
_と_setup-x86_64.exe
_の2つのバージョンがあります。お使いのマシンに適したファイルを選択してください。 SSH以外の他のUnixベースユーティリティを使用したい場合は、すべてのユーティリティが64ビットバージョンに移植されているわけではないため、マシンが64ビットであっても_x86
_バージョンを使用することをお勧めします。Install for
_ラジオボタンをに設定します All usersc:\packages
_を維持できます)Direct connections
_を選択します。openssh
、openssl
、unzip
、xz
、Zip
、mc
Cygwinをインストールした後、_C:\cygwin
_ディレクトリに移動し、任意のエディターを使用して編集モードで_Cygwin.bat
_ファイルを開き、bashシェルを呼び出す前に次の行を追加します。
_set CYGWIN=binmode ntsec
_以下の例のように:
_@echo off C: chdir C:\cygwin\bin set CYGWIN=binmode ntsec bash --login -i
_
Cygwin (cygrunsrv
)が正しくインストールされているかどうかを確認するには、
_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
を編集しますSYSTEM, LOCAL SERVICE, NETWORK SERVICE, NT SERVICE+TrustedInstaller, Guest
_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
_
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
_PuTTY
そして_puttygen.exe
_を実行します。 _ED25519
_として生成するキーを選択し、を押します Generate。秘密鍵をファイルに保存します。このファイルは、後で認証用の鍵として使用できます。 (OpenSSHに渡すための公開鍵)とマークされたフィールドから上部の公開鍵を選択し、選択を右クリックしてcopy
を選択し、次にpaste
コピーされたコンテンツを~/.ssh/authorized_keys
_最後に、次のコマンドを実行してSSHサービスを開始します。
_cygrunsrv -S sshd
_
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
_フィールドにセッションの説明的な名前を追加し、構成を保存します。Remote Desktop Connection
_プログラムを実行し、_localhost:12345
_を使用してSSHトンネル経由でRDP経由でリモートコンピューターに接続します。Microsoftのリモートデスクトップは暗号化を使用しているため、通信は合理的に保護されています。弱点は、ユーザー名とパスワードに対するブルートフォース攻撃です。
RDPを保護するには、次のようにします。
リモートデスクトップがリッスンするデフォルトのポートを変更します
これはあなたがすでに行ったものです。
強力な資格情報
デフォルト以外のユーザー名と長くて複雑なパスワードを使用する
制限されたユーザーアカウントsecpol.msc
>ローカルポリシー>ユーザー権利の割り当てを実行してRDPを使用できるユーザーを厳しく制限し、[リモートデスクトップサービスを介したログオンを許可する]をダブルクリックして、表示されているすべてのグループを削除してから、 1人のユーザー。
高いセキュリティレベル
実行gpedit.msc
>ローカルコンピューターポリシー>管理用テンプレート> Windowsコンポーネント>リモートデスクトップサービス>リモートデスクトップセッションホスト>セキュリティ。
アカウントロックアウトポリシーを設定します
何度も誤った推測を行った後、一定期間アカウントをロックするには、[管理ツール]> [ローカルセキュリティポリシー]> [アカウントポリシー]> [アカウントロックアウトポリシー]に移動し、3つのオプションすべてに値を設定します(3回の無効な試行3回分のロックアウト期間は妥当です)。
PCへのログインを追跡します
定期的に[イベントビューア]> [アプリケーションとサービスログ]> [Microsoft]> [Windows]> [TerminalServices]-[LocalSessionManger]> [Operational]に移動して、ログイン情報を確認します。