인터넷을 통한 Microsoft 원격 데스크톱 연결 보안? public IP address>:<port>(예 :)를 입력하면 Mac의

가정용 Windows 10 컴퓨터에서 라우터를 통해 Microsoft의 RDP 포트 (3389)를 포트 (20202)로 포트 전달했습니다. 따라서 간단히 <my public IP address>:<port>(예 :)를 입력하면 Mac의 Microsoft 원격 데스크톱 응용 프로그램을 통해 Windows 10 컴퓨터에 원격으로 액세스 할 수 있습니다 134.111.23.443:20202.

다른 컴퓨터가 없어도 SSH를 통한 터널링과 같은 보안을 강화할 수있는 방법이 있는지 궁금합니다. 집에서 유선으로 인터넷에 연결된 Windows 10 컴퓨터 만 가지고 있습니다. 나랑).



답변

Microsoft의 원격 데스크톱은 암호화를 사용하므로 통신이 합리적으로 보호됩니다. 단점은 사용자 이름과 암호에 대한 무차별 대입 공격의 단점입니다.

RDP를 보호하려면 다음을 수행하십시오.

  1. 원격 데스크톱이 수신하는 기본 포트를 변경하십시오
    . 이미 수행 한 포트입니다 .

  2. 강력한 자격 증명
    기본이 아닌 사용자 이름과 길고 복잡한 암호를 사용하십시오.

  3. 제한된 사용자 계정 > 로컬 정책> 사용자 권한 할당
    을 실행하여 RDP를 사용할 수있는 사용자를 심각하게 제한
    secpol.msc하고 “원격 데스크톱 서비스를 통한 로그온 허용”을 두 번 클릭 한 다음 표시된 모든 그룹을 제거한 다음 한 명의 사용자를 추가하십시오.

  4. 높은 보안 수준
    실행 gpedit.msc> 로컬 컴퓨터 정책> 관리 템플릿> Windows 구성 요소> 원격 데스크톱 서비스> 원격 데스크톱 세션 호스트> 보안.

    • “클라이언트 연결 암호화 수준 설정”-> 사용 및 높음 수준, 세션을 128 비트 암호화로 보호
    • “원격 (RDP) 연결에 특정 보안 계층을 사용해야합니다”-> SSL
    • “네트워크 레벨 인증을 사용하여 원격 연결을위한 사용자 인증 필요”-> 사용
  5. 계정 잠금 정책 설정
    여러 번 잘못 추측 한 후 일정 기간 동안 계정을 잠 그려면 관리 도구> 로컬 보안 정책> 계정 정책> 계정 잠금 정책으로 이동하여 세 가지 옵션 모두에 대한 값을 설정하십시오 (3은 3 번의 잘못된 시도) 분 잠금 기간이 합리적 임).

  6. PC에 로그인 추적
    정기적으로 이벤트 뷰어> 응용 프로그램 및 서비스 로그> Microsoft> Windows> TerminalServices-LocalSessionManger> 작동으로 이동하여 로그인 정보를 확인하십시오.


답변

Microsoft가 여전히 RDP 세션에 대한 무차별 대입 공격을 방지하는 방법을 파악할 수 없기 때문에 정말 좋은 결정입니다. @harrymc answer 에서 잘 설명 된 계정 잠금 정책 (약간의 단점이 있으며 자세한 내용을 읽어보십시오)이 있으므로 Windows Pro 버전이 가장 적은 사람들은 이러한 워크 플로를 사용할 수 있습니다.

홈 버전의 소유자 인 경우 다음 키에서 레지스트리를 직접 편집하여 계정 잠금 정책을 활성화 할 수 있습니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\AccountLockout
  • MaxDenials계정을 잠그기 전에 값을 두 번 클릭하고 실패한 시도 횟수를 입력하십시오.
  • ResetTime(분) 값을 두 번 클릭하고 0xB402,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.exesetup-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_serverno를 입력하십시오. 다음과 같은 질문이 표시됩니다.
    *** 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

  • 이제 공개 키 인증을 위한 키를 생성해야 합니다
    . cygwin터미널에서 다음 명령을 실행하십시오.
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    cd ~/.ssh
    echo > ~/.ssh/authorized_keys

    • Unix 방식으로 키 생성 : “SSH를 통해 연결될 Windows 계정으로”UserName “을 대체하십시오
      .) 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

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 SessionHost Name필드 IP 주소 로 이동 하여 필드에 홈 라우터의 원격 수신 포트를 설정하십시오 Port.
    • 필드에 설명적인 세션 이름을 추가 Saved Sessions하고 구성을 저장하십시오.
  • SSH를 통한 연결이 설정되면 Remote Desktop Connection프로그램을 실행 하고 localhost:12345SSH 터널을 통해 RDP를 통해 원격 컴퓨터에 연결 하는 데 사용하십시오.

답변