Microsoft가 여전히 RDP 세션에 대한 무차별 대입 공격을 방지하는 방법을 파악할 수 없기 때문에 정말 좋은 결정입니다. @harrymc answer 에서 잘 설명 된 계정 잠금 정책 (약간의 단점이 있으며 자세한 내용을 읽어보십시오)이 있으므로 Windows Pro 버전이 가장 적은 사람들은 이러한 워크 플로를 사용할 수 있습니다.
홈 버전의 소유자 인 경우 다음 키에서 레지스트리를 직접 편집하여 계정 잠금 정책을 활성화 할 수 있습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\AccountLockout
MaxDenials
계정을 잠그기 전에 값을 두 번 클릭하고 실패한 시도 횟수를 입력하십시오.
ResetTime
(분) 값을 두 번 클릭하고 0xB40
2,880 분 (2 일) 동안 16 진수 인 기본값을 15-20 분과 같은 합리적인 값으로 변경하십시오 .
Windows 계정 잠금 정책 의 문제점 은 다른 사람이 강제 암호를 무단으로 사용하려는 경우 컴퓨터가 잠겨 있다는 것입니다. 정책은 발신자의 IP에 의존하지 않으며 로그인 시도 횟수 만 계산하고 계정 잠금 이벤트를 트리거하므로 소유자와 공격자 모두에 대한 액세스를 효과적으로 비활성화합니다.
훨씬 강력한 IMHO 보호 기능은 암호 기반 인증보다 훨씬 강력한 SSH 공개 키 인증 을 사용 하는 것입니다.
SSH를 언급하여 질문에 거의 대답했습니다. Windows PC에서 cygwin 을 설정 하고 SSH 서비스를 실행하고 sshd_config
터널링을 활성화하고 일반 비밀번호 인증을 비활성화하면서 공개 키 인증을 설정하십시오 (홈 LAN에있는 동안 ssh 연결을 테스트하면 성공적으로 작동합니다).
라우터에서 RDP가이 Windows 시스템의 Windows PC의 포트 22로 수행 한 것과 같이 기본이 아닌 일부 SSH 포트 (22) (예 : 20202)를 전달합니다 (RDP 로의 전달을 비활성화하는 것도 잊지 마십시오). RDP에 연결할 때 아래
스크립트를 사용하여 원격 Windows PC에 대한 첫 번째 SSH 세션을 시작하십시오. (cygwin을 사용하는 사람들뿐만 아니라 Linux, BSD, MacOS와 같은 Unix 기반 OS 용 스크립트. 클라이언트로 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) 포트로 전달 한 다음 연결 문자열을 사용하여 RDP에 연결합니다 localhost:12345
이러한 RDP 세션 보안 방법의 장점은 복잡한 비밀번호보다 훨씬 강력한 비대칭 암호화를 사용하여 채널을 암호화한다는 것입니다. 강력한 암호화 외에도 풍부한 유닉스 유틸리티를 사용하여 보안 채널 원격 Windows PC를 통해 관리 할 수 있습니다.
SSH를 사용하여 수행 할 수있는 또 하나의 깔끔한 작업-집에 고정 IP 주소가 없거나 LogMeIn 또는 TeamViewer와 같은 회사 또는 귀하가 할 수없는 엄격한 방화벽 뒤에있는 PC를 완전히 신뢰하고 싶지 않은 경우 포트 포워딩 설정 또는 기본 게이트웨이 / 방화벽을 제어 할 수없는 경우 Windows PC가 사용자가 제어하는 정적 IP를 사용하여 중간 서버에 자동으로 연결하는 역방향 모드에서 SSH를 설정할 수 있습니다. 이 방법으로 Windows PC에 직접 연결할 필요없이 많은 컴퓨터를 지원할 수있는 중간 서버에 연결할 수 있습니다. 이러한 설정은 IP가 알려지지 않은 모바일 고객을 지원해야 할 때와 IT 지원이 데이터 유출 위험을 줄이는 높은 비밀로 인해 타사 서비스를 사용하지 않고 회사의 모바일 PC를 지원해야 할 때 매우 편리합니다.
아래의 설치 프로세스는 읽는 데 시간이 오래 걸리지 만 실제로는 설치 방법에 대한 개념을 이해하는 데 10-15 분이 걸립니다.
세부:
Cygwin 설치
업데이트 : Windows 10 v.1803 부터 Microsoft는 이미 사전 설치된 OpenSSH 서버 및 클라이언트와 함께 제공 되므로 아래 단계는 Windows 10이 없거나 Windows 10 v.1803 이상으로 아직 업그레이드하지 않은 사용자를위한 것입니다.
Windows에 SSH를 설치하려면 SSH 서비스 설정 방법에 대한 자세한 내용과 스크린 샷이있는 Oracle 설명서를 참조하십시오. 여기에서
섹션 5.3, 5.4, 5.5 만 따르면 됩니다.
SSH 서비스를 설치하기 위해 수행해야 할 가장 중요한 단계는 다음과 같습니다.
- cygwin 기본 사이트 에서 실행 가능한 설치 파일을 다운로드 하십시오. 설치 파일에는 두 가지 버전이 있습니다 :
setup-x86.exe
및 setup-x86_64.exe
. 컴퓨터에 적합한 파일을 선택하십시오. SSH 이외의 다른 유닉스 기본 유틸리티를 사용하려면 x86
모든 유틸리티가 64 비트 버전으로 이식되지 않기 때문에 시스템이 64 비트 인 경우에도 버전 을 사용하는 것이 좋습니다 .
- 설치 과정은 매우 간단하고 직관적입니다.
설치 유형 선택 화면에서 인터넷에서 설치를 선택한 후 다음을 클릭하십시오.
- 설치 디렉토리 선택 화면에서 루트 디렉토리로 C : \ cygwin을 입력 한 후 다음을 클릭하십시오. 설정
Install for
에 라디오 버튼All users
- 로컬 패키지 디렉토리 선택 화면에서 다운로드 한 설치 파일을 저장할 로컬 시스템의 디렉토리를 선택한 후 다음을 클릭하십시오. (기본값을 유지할 수 있습니다
c:\packages
)
- 연결 유형 선택 화면에서 인터넷에 연결할 적절한 설정을 선택한 후 다음을 클릭하십시오. 프록시없이 인터넷에 PC에 직접 액세스 할 수있는 경우
Direct connections
- 다운로드 사이트 선택 화면의 사용 가능한 목록에서 사이트를 선택한 후 다음을 클릭하십시오. 가장 가까운 사이트를 선택하십시오. 패키지 선택 화면에서 최소한 다음 패키지를 선택했는지 확인한 후 다음을 클릭하십시오.
openssh
, openssl
, unzip
, xz
, zip
,mc
- 패키지를 선택하고 다음을 클릭하면 종속성 해결 화면이 표시됩니다. 다음을 클릭하여 계속하십시오.
- 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
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:
그러나 다른 이름을 사용하려면 yes를 입력하십시오. 그러면 다음과 같은 질문이 표시됩니다.
*** 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
그런 다음 passwd
실행하여 편집 mcedit /etc/passwd
하십시오. SSH를 통해 연결되지 않는 모든 사용자 , 특히 다음을 제거하십시오 .
SYSTEM, LOCAL SERVICE, NETWORK SERVICE, NT SERVICE+TrustedInstaller, Guest
SSHD 서비스의 미세 조정
- 다음
sshd_config
을 실행하여 파일을 편집 하십시오 (SSH 서비스).
mcedit /etc/sshd_config
- 내용에 따라 파일 끝에 추가하십시오.
########################### Customization ##########################
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
#
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
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버튼을 누릅니다.
- 왼쪽 트리 패널 에서 SSH를 실행하는 원격 Windows PC
Session
의 Host Name
필드 IP 주소 로 이동 하여 필드에 홈 라우터의 원격 수신 포트를 설정하십시오 Port
.
- 필드에 설명적인 세션 이름을 추가
Saved Sessions
하고 구성을 저장하십시오.
- SSH를 통한 연결이 설정되면
Remote Desktop Connection
프로그램을 실행 하고 localhost:12345
SSH 터널을 통해 RDP를 통해 원격 컴퓨터에 연결 하는 데 사용하십시오.