본문 바로가기

OS/Windows

Windows - RDP 포트 변경: 원격 데스크톱 보안을 강화하는 배치 파일

728x90

Windows 원격 데스크톱(RDP)을 관리할 때 포트를 변경하거나, 방화벽 규칙을 삭제/확인하는 작업은 필수적입니다. 

이 글에서는 안정적이고 효율적인 RDP 포트 관리 배치 스크립트를 소개합니다.

주석과 함께 각 기능을 상세히 설명하였으며, 모든 작업이 자동화되어 초보자도 쉽게 사용할 수 있습니다.


스크립트의 주요 기능

  1. RDP 포트 변경
    • 사용자가 원하는 포트 번호로 RDP 포트를 변경합니다.
    • 기존 방화벽 규칙을 삭제하고 새로운 규칙을 추가하여 연결을 유지합니다.
    • 원격 데스크톱 서비스(TermService)를 재시작해 변경 사항을 즉시 적용합니다.
  2. 방화벽 규칙 삭제
    • 특정 포트를 허용하는 방화벽 규칙을 삭제합니다.
    • 삭제 전 영향을 명확히 경고하며 작업을 취소할 수 있는 옵션을 제공합니다.
  3. 방화벽 규칙 확인
    • 설정된 모든 원격 데스크톱 관련 방화벽 규칙을 출력합니다.
  4. 메뉴 기반 인터페이스
    • 사용자가 숫자로 메뉴를 선택할 수 있도록 설계되어 직관적입니다.

@echo off

:: 관리자 권한 확인
bcdedit > nul || (echo 관리자 권한으로 실행하세요. & pause & exit)

:MENU
cls
echo =====================================
echo 원격 데스크톱 포트 관리 스크립트
echo =====================================
echo 1. 원격 데스크톱 포트 변경
echo 2. 원격 데스크톱 방화벽 규칙 삭제
echo 3. 원격 데스크톱 방화벽 규칙 확인
echo 4. 종료
echo =====================================
set /p select=메뉴 선택 (1,2,3,4): 

:: 메뉴 선택에 따른 작업 분기
if "%select%"=="1" (
    goto CHANGE_PORT
) else if "%select%"=="2" (
    goto DELETE_PORT
) else if "%select%"=="3" (
    goto VIEW_RULES
) else if "%select%"=="4" (
    echo 프로그램을 종료합니다.
    exit
) else (
    echo 유효하지 않은 입력입니다. 다시 입력해주세요.
    pause
    goto MENU
)

:CHANGE_PORT
cls
echo =====================================
echo 원격 데스크톱 포트 변경
echo =====================================
set /p port=변경할 포트 번호 입력 (0~65535): 

:: 포트 번호 유효성 검사
if "%port%"=="" goto INVALID_PORT
if %port% LSS 1 goto INVALID_PORT
if %port% GTR 65535 goto INVALID_PORT

:: 레지스트리 값 변경
echo 포트를 %port%로 변경합니다...
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d %port% /f

:: 기존 방화벽 규칙 삭제
echo 기존 방화벽 규칙을 삭제 중...
netsh advfirewall firewall delete rule name="원격 데스크톱 %port%" dir=in protocol=tcp > nul 2>&1

:: 새로운 방화벽 규칙 추가
echo 새로운 방화벽 규칙 추가 중...
netsh advfirewall firewall add rule name="원격 데스크톱 %port%" dir=in action=allow protocol=tcp localport=%port%

:: 서비스 재시작
echo TermService 서비스를 재시작 중...
net stop TermService /y > nul 2>&1
net start TermService > nul 2>&1

if errorlevel 1 (
    echo 서비스 재시작 중 문제가 발생했습니다. 관리자 권한을 확인하세요.
) else (
    echo 원격 데스크톱 포트가 %port%로 변경되었으며, 즉시 적용되었습니다.
)
pause
goto MENU

:DELETE_PORT
cls
echo =====================================
echo 원격 데스크톱 방화벽 규칙 삭제
echo =====================================
set /p del_port=삭제할 포트 번호 입력: 

if "%del_port%"=="" goto INVALID_PORT

:: 삭제 전 경고
echo 포트 %del_port%의 방화벽 규칙을 삭제하면 더 이상 해당 포트로 원격 데스크톱 연결이 불가능할 수 있습니다.
set /p confirm=정말로 삭제하시겠습니까? (Y/N): 

if /i "%confirm%"=="Y" (
    echo 포트 %del_port%의 방화벽 규칙을 삭제 중...
    netsh advfirewall firewall delete rule name="원격 데스크톱 %del_port%" dir=in protocol=tcp
    echo 포트 %del_port%에 대한 방화벽 규칙이 삭제되었습니다.
    pause
    goto MENU
) else if /i "%confirm%"=="N" (
    echo 삭제 작업이 취소되었습니다.
    pause
    goto MENU
) else (
    echo 유효하지 않은 입력입니다. 삭제 작업을 취소합니다.
    pause
    goto MENU
)

:VIEW_RULES
cls
echo =====================================
echo 원격 데스크톱 방화벽 규칙 확인
echo =====================================
netsh advfirewall firewall show rule name=all dir=in | findstr /C:"원격 데스크톱"
pause
goto MENU

:INVALID_PORT
echo 유효하지 않은 포트 번호입니다. 0~65535 사이의 숫자를 입력하세요.
pause
goto MENU

스크립트 주석 설명

1. 관리자 권한 확인

bcdedit > nul || (echo 관리자 권한으로 실행하세요. & pause & exit)
 
  • 이 명령어는 관리자 권한으로 실행되지 않으면 스크립트를 종료합니다.

2. 포트 변경

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d %port% /f
 
  • RDP 포트를 변경합니다.
  • 변경 후 TermService 서비스를 재시작하여 변경 사항을 즉시 적용합니다.

3. 방화벽 규칙 삭제

netsh advfirewall firewall delete rule name="원격 데스크톱 %del_port%" dir=in protocol=tcp
  • 지정된 포트에 대한 방화벽 규칙을 삭제합니다.
  • 삭제 작업 전 사용자에게 경고 메시지를 출력하고 작업을 취소할 수 있도록 옵션을 제공합니다.

4. 방화벽 규칙 확인

netsh advfirewall firewall show rule name=all dir=in | findstr /C:"원격 데스크톱"
 
  • 현재 설정된 모든 원격 데스크톱 방화벽 규칙을 출력합니다.
728x90
반응형