반응형

Windows Server 2012 R2 기준. (현재 가동 중인 서버가 이것 뿐이라... 2016, 2019, 2022도 크게 차이는 없다)

 

 

 

1. RRAS 구성

 

Windows Server의 RRAS(Routing and Remote Access Service; 라우팅 및 원격 액세스 서비스)를 이용해 SSTP 및 IKEv2 IPSec VPN 서버를 아주 손쉽게 구축할 수 있다.

 

RRAS VPN 서비스를 구성하는 방법은 인터넷에 수없이 많이 있고, 어렵지도 않고 대부분 내용이 유사하므로 검색 찬스를 쓰면 되고... 여기서는 Windows 및 Mac OS에서 컴퓨터 인증서 기반으로(즉, 사용자 아이디/암호 입력 없이) IKEv2 프로토콜로 접속 가능하도록 VPN 서비스를 구성하는 방법 및 추가로 필요한 것이 무엇이 있는지에 대해 살펴 보도록 한다.

 

Windows 클라이언트에서 IKEv2 VPN 접속이 되도록 VPN 서비스를 구성하는 방법은 의외로 매우 간단하다. 기본 구성에 IKEv2 설정 한 가지만 더 해 주고 클라이언트에 사용자 인증서를 내려보내 주면 끝. (라우팅 및 원격 액세스 - 서버(로컬) - 속성 - 보안 - 인증방법: EAP 및 "IKEv2에 대해 컴퓨터 인증서 인증 허용" 체크)

 

 

 

Windows 클라이언트에서 컴퓨터 인증서로 IKEv2 VPN 접속을 하려면 GUI로 설정하긴 좀 복잡하다. (가능하긴 한데 만들고 수정하고... 번거롭다.) 그래서 아래 PowerShell 명령을 이용해서 만드는 것이 편리하다.

PS> Add-VpnConnection -ServerAddress '{VPN서버 Fqdn}' -Name '{연결 이름}' -TunnelType IKEv2 -AuthenticationMethod MachineCertificate -EncryptionLevel Required -PassThru

 

>> OS X 및 기타 OS 참고: https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md

 

 

 

2. NPS 구성

 

IKEv2 및 SSTP 접속을 위한 네트워크 정책 서비스(NPS) 구성은 아래와 같이 하면 된다.

 [네트워크 정책] - 마우스 오른쪽 버튼 클릭 - "새로 만들기"

 1. 이름: IKEv2 VPN 정책
    - 네트워크 액세스 서버 유형: 원격 액세스 서버(VPN-전화 접속)
    - 조건: "터널 종류" 선택, "IP Encapsulating Security Payload int the Tunnel-mode (ESP)" 선택
    - 제약조건: 인증 방법 - "인증 방법을 협상하지 않고 클라이언트가 연결할 수 있음" 체크, 나머지는 모두 체크 해제
    - (옵션)설정: IP 필터 - IPv4 입력 필터 추가

 2. (옵션) 이름: SSTP VPN 정책
    - 네트워크 액세스 서버 유형: 원격 액세스 서버(VPN-전화 접속)
    - 조건: "Windows 그룹" 선택, Users 그룹 선택
    - 제약조건: 인증 방법 - EAP - Microsoft: 보안된 암호(EAP-MSCHAP v2) 선택, 나머지는 모두 체크 해제
    - (옵션)설정: IP 필터 - IPv4 입력 필터 추가

 

 

!!! 가장 중요한 것, 최초로 RRAS/NPS를 구성한 경우 꼭 서버를 재부팅해야 한다. 그러지 않으면 VPN 접속이 안된다. !!!

 

 

 

3. 서버 인증서 구성/발급

 

그런데, SSTP나 IKEv2를 사용하려면 VPN 서버에 서버 인증서가 설치되어 있어야 하는데, 이왕 Windows 서버를 사용하는 김에 인증기관도 Microsoft CA를 통해 사설 인증서를 발급하는 시나리오를 가정하겠다. 아무튼... MS CA에서 발급하는 기본 웹 서버 인증서로는 IKEv2 접속에 사용할 수 없다. 서버 인증서의 확장 용도에 "서버 인증 (1.3.6.1.5.5.7.3.1)" 뿐만 아니라 "IP 보안 IKE 중개 (1.3.6.1.5.5.8.2.2)"도 필요하기 때문. (IKEv2 접속을 Windows 클라이언트에서만 하도록 할 경우에는 기본 웹 서버 인증서, 즉, "서버 인증 (1.3.6.1.5.5.7.3.1)"만 있어도 가능하지만 Mac OS에서도 접속해야 한다면 "IP 보안 IKE 중개 (1.3.6.1.5.5.8.2.2)" 필수.)

 

 

참고1: Microsoft CA에서는 [인증서 템플릿 관리]에서 "웹 서버 템플릿"을 복제해서 "IP 보안 IKE 중개" 용도를 하나 추가해 주는 방법으로 서버 인증서 발급을 하면 된다. (확장 - 응용 프로그램 정책 - 추가: IP 보안 IKE 중개)

 

참고2: Windows 클라이언트에서는 상관없지만, Mac OS에서 IKEv2 접속이 되도록 하려면 서버 인증서에 주체 대체 이름(SAN; Subject Alternative Name)도 설정해야 한다. (아무튼 애플... ㄷㄷ, 참조: https://support.apple.com/ko-kr/guide/deployment/dep83a4ac49f/web)

 

Apple 기기에서 VPN 프록시 및 인증서 구성 사용하기

모든 구성의 경우 전체 연결에 대해 단일 프록시를 구성하거나 기기에 자동 프록시 구성 파일을 제공하여 VPN 프록시를 지정할 수 있습니다.

support.apple.com

 

 

참고3: MS CA에서 서버 인증서에 SAN을 추가하는 방법은 아주 오래전에 올린 글 참고

  >> MS CA를 이용한 주체대체이름(Subject Alternative Name) 추가 요청 방법

 

MS CA를 이용한 주체대체이름(Subject Alternative Name) 추가 요청 방법

MS CA 인증서 발급 웹 페이지에 접속해서 웹 서버 인증서 발급 요청을 할 때,원래 MS CA서버는 기본적으로 "주체대체이름"을 인증서에 추가할 수 없게 되어 있다. 이걸 추가하는 방법이 아래에 나와

thermidor.tistory.com

 

 

 

4. VPN 암호화 알고리즘 설정

 

VPN 기본 구성으로도 Windows 클라이언트에서 IKEv2 프로토콜로 VPN 접속하는데는 아무 문제가 없다. 그런데 보안을 조금 강화하려면 아래 페이지를 참조해서 보안 강화 설정을 하는 것이 좋다고 한다...

 

>> 참조: How to configure cryptographic settings for IKEv2 VPN connections - Windows Security | Microsoft Learn

 

How to configure cryptographic settings for IKEv2 VPN connections - Windows Security

Learn how to update the IKEv2 cryptographic settings of VPN servers and clients by running VPN cmdlets to secure connections.

learn.microsoft.com

 

또는 최근에 많이 보이는, 향상된 DH2048 알고리즘을 적용하려면 아래와 같이 설정하는 방법도 있다.

 

먼저, VPN 서버에서는 우선 레지스트리 설정부터.

REG ADD HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v NegotiateDH2048_AES256 /t REG_DWORD /d 0x1 /f

 

다음으로는 PowerShell 명령어 실행.

PS> Set-VpnServerConfiguration -TunnelType IKEv2 -CustomPolicy -AuthenticationTransformConstants GCMAES128 -CipherTransformConstants GCMAES128 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -SALifeTimeSeconds 28800 -SADataSizeForRenegotiationKilobytes 1024000

PS> Restart-Service RemoteAccess -PassThru

 

마지막으로 Windows 클라이언트에서도 우선 레지스트리 설정부터.

REG ADD HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v NegotiateDH2048_AES256 /t REG_DWORD /d 0x1 /f

 

다음으로 PowerShell 명령어 실행.

PS> Set-VpnConnectionIPsecConfiguration -ConnectionName '{연결 이름}' -AuthenticationTransformConstants GCMAES128 -CipherTransformConstants GCMAES128 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -Force

 

 

 

그런데,

Windows 클라이언트뿐만 아니라 Mac OS에서도 접속 가능하도록 구성하려면 위와 같이 구성하면 안되고 암호화 알고리즘으로 AES256, 무결성 체크 알고리즘으로 SHA256을 사용해야 한다. (DHGroup은 Group14, PFSGroup은 없음으로 설정 필요!) 왜냐고? 애플에게 물어봐~~~~

 

즉, VPN 서버 PowerShell 명령어는 아래와 같이.

PS> Set-VpnServerConfiguration -TunnelType IKEv2 -CustomPolicy -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup None -SALifeTimeSeconds 28800 -SADataSizeForRenegotiationKilobytes 1024000

PS> Restart-Service RemoteAccess -PassThru

 

Windows 클라이언트 PowerShell 명령어는 아래와 같이.

PS> Set-VpnConnectionIPsecConfiguration -ConnectionName '{연결 이름}' -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup None -Force

 

특별히 Windows 클라이언트에서는 VPN 접속 시 로컬 네트워크와 VPN 네트워크를 분리/격리시킬 수 있다. (인터넷은 로컬에서 쓰고 회사망 접속만 VPN 네트워크로 하고 싶을 때)

PS> Set-VpnConnection -Name "{연결 이름}" -SplitTunneling $True

 

회사망 접속 환경에 특정 네트워크 대역(예: 10.1.0.0/24)을 추가하고 싶을 때는 아래 명령어로.

PS> Add-VpnConnectionRoute -ConnectionName {연결 이름}" -DestinationPrefix 10.1.0.0/24

 

>> 참고: Split-Tunneling on Windows 10 or 11 using the Native VPN Client | NikSec

 

Split-Tunneling on Windows 10 or 11 using the Native VPN Client - NikSec

Introduction In some use cases the integrated Windows vpn client might fit your needs. Some vpn options however can’t be configured through the default settings. One of those options is “split-tunneling”. I will show you how to enable and configure i

niksec.com

 

 

 

5. Windows 방화벽 구성

 

IKEv2 컴퓨터 인증서 접속의 경우, VPN 서버에서 받아들일 수 있는 인증서(신뢰할 수 있는 루트 인증기관에서 발급된 인증서)면 아무 인증서나 다 통과된다... 이건 좀 문제가 있다. 제한을 할 수 없으니까. 클라이언트에 설치되어 있는 아무 인증서나 다 통과된다면... 인증서 발급 비용만 있으면 누구나 인증서를 발급받아 회사 VPN에 접속할 수 있다는 얘기니까.

 

그래서 사내 CA에서 발급한 인증서만 통과되고 나머지는 거부하도록 Windows 방화벽을 설정할 필요가 있다. 이 설정은 

[Windows 방화벽] - [연결 보안 규칙]에서 설정할 수 있는데, 제출된 클라이언트 인증서의 발급기관을 체크해서 특정 발급기관인 경우만 허용하도록 하는 규칙은 GUI로는 만들 수 없고, PowerShell 명령어를 사용해야 한다.

 

예를 들어, 인증서를 발급한 인증기관이 "DC=kr, DC=pe, DC=thermidor, CN=MyRootCA" 인 경우,

PS> $certprop = New-NetIPsecAuthProposal -machine -cert -Authority "DC=kr, DC=pe, DC=thermidor, CN=MyRootCA"
PS> $myauth = New-NetIPsecPhase1AuthSet -DisplayName "IKEv2Phase1AuthSet" -proposal $certprop
PS> New-NetIPsecRule -DisplayName "My IKEv2 Rule" -RemoteAddress any -Phase1AuthSet $myauth.InstanceID -InboundSecurity Require -OutboundSecurity Request -KeyModule IKEv2

 

이렇게 PowerShell 명령을 실행하면 된다.

그런데, 이 방화벽 규칙 생성 즉시 해당 규칙에 부합하는 IKEv2 연결 외 모든 연결은 거부된다. 따라서 해당 서버가 VPN 외 다른 서비스도 겸하고 있다면 위 규칙 생성 전, 미리 해당 서비스 포트들에 대해 추가로 별도 인증 예외 규칙을 만들 필요가 있다.

[고급 보안이 포함된 Windows 방화벽] - [연결 보안 규칙] - 마우스 오른쪽 버튼 클릭 - "새 규칙"

1. 인증 예외 (공용 서비스 포트 접속 허용)
    - 끝점1: {VPN서버 외부 네트워크 IP}
    - 끝점2: 모두
    - 인증 모드: 인증 안 함
    - 인증 방법: 인증 안 됨
    - 끝점1 포트: TCP 21, 53, 80, 443, 8080

2. 인증 예외2 (DNS UDP 연결 허용)
    - 끝점1: {VPN서버 외부 네트워크 IP}
    - 끝점2: 모두
    - 인증 모드: 인증 안 함
    - 인증 방법: 인증 안 됨
    - 끝점1 포트: UDP 53

3. 인증 예외3 (사내망[192.168.0.0/24]에서 모든 포트 연결 허용)
    - 끝점1: {VPN서버 내부 네트워크 IP}
    - 끝점2: 192.168.0.0/24
    - 인증 모드: 인증 안 함
    - 인증 방법: 인증 안 됨
    - 끝점1 포트: 모두

 

 

 

[참고: RRAS NAT 서비스에 대한 잡설...]

 

VPN 서버는 보통 회사 네트워크 외부 접점에 위치하는 유일한 통로가 되는 경우가 많아 보통 NAT(Network Address Translation; 네트워크 주소 변환) 역할도 겸하게 되는데... 중/소규모 기업의 경우 RRAS의 NAT 서비스를 올려서 사용하기보다 네트워크 어댑터에서 "인터넷 연결 공유"를 켜서 사용하는 경우가 더 일반적이다. 즉, NAT 기능의 49%를 인터넷 연결 공유 기능(나머지 51%는 포트 매핑(포워딩) 기능)이라고 보면 이미 49%가 불필요한 상황. 게다가 최근 저렴한 공유기가 많이 팔리면서 공유기 포트 포워딩 기능을 쉽게 이용할 수 있게 된 이후로 나머지 NAT 기능의 거의 전부라 볼 수 있는 포트 매핑(포워딩) 기능을 쓸 일도 거의 없어졌다... 단, 이 글에서처럼 VPN 서버를 꼭 사용해야 하고 그게 유일한 외부 접점이라면(즉, 별도 라우터나 공유기 없이 Windows 서버만 써야 한다면) 내부 서비스를 외부에서도 사용할 수 있도록 포트 포워딩 설정을 하려면 NAT 서비스를 올려야 한다. (물론 NAT의 포트 포워딩 기능이 공유기와는 차이가 좀 있긴 하다. 공유기에서는 설정하는 즉시 해당 포트를 공유기가 수신 대기하게 되는데, NAT 설정으로는 서버 자체에서 실제로 수신 대기하고 있지 않은 포트는 포워딩할 수 없다. 즉, NAT의 포트 포워딩 기능은 네트워크 어댑터 패킷 가로채기 정도로 보면 될 듯...)

 

사실 포트 포워딩만 하겠다면 NAT 서비스 대신 PassPort라는 GUI 도구를 설치해서 사용해도 되고, 아예 Windows 시스템에 기본 내장된 netsh 명령어를 이용해서 포트 포워딩 설정을 해도 되긴 한다.

# 설정 보기
netsh interface portproxy show v4tov4

# 설정 추가
netsh interface portproxy add v4tov4 listenaddress={localaddress} listenport={localport} connectaddress={destaddress} connectport={destport}

# 설정 삭제
netsh interface portproxy delete v4tov4 listenaddress={localaddress} listenport={localport} 

 

뭐, 어쨌든 RRAS를 이용하면 NAT 서비스까지 한꺼번에 쉽게 구성이 가능한데, 사전에 미리 서버관리자에서 [원격 액세스] - [라우팅] 추가 설치를 꼭 해야 한다. 그러지 않으면 NAT 구성을 아무리 하려고 해도 안 된다. 

 

 

 

 



Posted by 떼르미
,
반응형


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]