블로그로 돌아가기

Ubuntu 18.04에서 OpenVPN 설정하기

Ubuntu 18.04에서 OpenVPN 설정하기

소개

신뢰할 수 없는 네트워크(예: 호텔이나 커피숍의 WiFi)에 연결할 때 스마트폰이나 노트북에서 인터넷에 안전하게 접속하고 싶으신가요? 다행히도 귀하의 바람을 들어줄 방법이 있습니다. 다음을 사용하여 마치 사설 네트워크에 있는 것처럼 신뢰할 수 없는 네트워크에 안전하게 연결할 수 있습니다. 가상 사설망(VPN).

VPN이란 무엇인가요?

VPN은 가상 사설망(Virtual Private Network)의 약자입니다. 신뢰할 수 있는 서버로 안전한 터널을 열 수 있는 가능성을 제공합니다. 그러면 모든 요청이 이 서버를 통해 전송되고 수신됩니다. 장점은 호텔의 무료 WiFi와 같은 공용 네트워크를 사용할 때 접속 및 거래를 안전하게 보호할 수 있다는 것입니다.

VPN을 통해 모든 데이터가 암호화되어 서버를 통해 처리됩니다. 중간에 걸쳐 있는 제3자 라우터 등과 같은 장치는 트래픽을 원치 않는 목적지로 리디렉션할 방법이 없습니다. 또한 연결이 성공적으로 설정되면 귀하는 서버’의 네트워크의 일부가 됩니다. 보통 서버’의 로컬 네트워크에서만 액세스할 수 있는 다른 서버, 컴퓨터 또는 프린터와 같은 장치도 이제 VPN 터널을 통해 도달할 수 있습니다. 하지만 모든 데이터를 암호화된 터널을 통해 보낼 필요는 없으므로, 정의된 일부 요청만 VPN 터널을 통해 전송되도록 VPN 클라이언트를 구성할 수 있습니다. 나머지 트래픽은 인터넷을 통해 정상적으로 처리됩니다.

이 튜토리얼에서는 Ubuntu 18.04에서 OpenVPN 서버를 설정하는 단계를 안내합니다.

요구 사항

이 튜토리얼을 완료하려면 귀하의 OpenVPN 서비스를 호스팅할 Ubuntu 18.04 서버에 대한 액세스 권한이 필요합니다. 이 가이드를 시작하기 전에 sudo 권한이 있는 non-root 사용자를 구성해야 합니다. 다음 Ubuntu 서버 설정에 대한 튜토리얼.

을 따라 서버를 쉽게 설치할 수 있습니다. 또한, 다음 역할을 할 별도의 컴퓨터가 필요합니다: 인증 기관(CA). 기술적으로는 귀하의 OpenVPN 서버 또는 로컬 컴퓨터를 인증 기관으로 사용할 수 있습니다. 하지만 이는 VPN을 보안 취약점에 노출시킬 수 있으므로 권장하지 않습니다. 공식 OpenVPN 문서에 따르면, 인증서 요청을 가져오고 서명하는 데 전용으로 사용되는 별도의 컴퓨터에 인증 기관을 두어야 합니다. 따라서 귀하의 인증 기관은 sudo 권한과 기본 방화벽이 있는 non-root 사용자도 있는 별도의 Ubuntu 18.04 서버에 있다고 가정합니다. 이 가이드 전체에서 모든 설치 및 구성 단계는 각 설치에 대해 가능한 한 간단하게 진행됩니다. 다음 Docker에서 Open VPN 서버를 설정하는 방법에 대한 튜토리얼.

도 참고하실 수 있습니다.

먼저 VPN 서버’의 패키지 인덱스를 업데이트하고 OpenVPN을 설치합니다. OpenVPN은 기본 Ubuntu 리포지토리에서 사용할 수 있으므로 apt를 사용하여 설치할 수 있습니다:

2단계: 인증 기관 생성

OpenVPN 서버에 대해 신뢰할 수 있는 인증서를 발급할 간단한 인증 기관(CA)을 생성합니다. 이를 위해 wget을 사용하여 CA 머신과 OpenVPN 서버 모두에 최신 버전의 EasyRSA를 다운로드합니다. 최신 버전을 받으려면 공식 EasyRSA GitHub 프로젝트의 Releases 페이지로 이동하여 .tgz로 끝나는 파일의 다운로드 링크를 복사하고 다음 명령에 붙여넣습니다:

그런 다음 tarball의 압축을 풉니다:

 OpenVPN EasyRSA software

이 시점에서 필요한 모든 소프트웨어가 CA 컴퓨터와 서버에 성공적으로 설치되었습니다.

3단계 – EasyRSA 변수 구성 및 CA 빌드

EasyRSA에는 이 명령을 사용하여 CA에 대한 여러 변수를 정의하도록 편집할 수 있는 구성 파일이 함께 제공됩니다:

디렉터리에 vars.example이라는 이름의 파일이 있습니다. 이 파일의 복사본을 만들고, 확장자 없이 복사본의 이름을 vars로 지정합니다:

선호하는 텍스트 편집기를 사용하여 이 새 파일을 엽니다:

다음으로, 새 인증서의 필드 기본값을 설정하는 설정을 찾습니다. 다음과 유사할 것입니다:

아래와 같이 이 변수들을 원하는 대로 업데이트합니다:

준비가 되면 파일을 저장하고 닫습니다. 다음 단계는 easyrsa 스크립트를 호출하고 init-pki 옵션으로 실행하여 CA 서버에서 공개 키 기반 구조(PKI)를 초기화하는 것입니다:

easyrsa init-pki

다음으로, CA와 상호 작용할 때마다 비밀번호를 묻는 메시지가 표시되지 않도록 nopass 옵션을 사용하여 build-ca 명령을 실행합니다:

출력에서 CA의 일반 이름(Common Name)을 확인하라는 메시지가 표시됩니다:

 OpenVPN build-ca

이것으로 CA가 준비되었으며 인증서 서명 요청을 시작할 준비가 되었습니다.

4단계 – 서버 인증서, 키 및 암호화 파일 생성

CA가 준비되면 서버에서 개인 키와 인증서 요청을 생성한 다음, 필요한 인증서를 생성하여 서명을 위해 CA로 보낼 수 있습니다. 먼저 OpenVPN 서버의 EasyRSA 디렉터리로 이동합니다:

거기서 init-pki 옵션과 함께 easyrsa 스크립트를 실행합니다. CA 컴퓨터에서 이미 이 명령을 실행했더라도 여기에서도 이 명령을 실행해야 합니다. 서버와 CA의 PKI 디렉터리가 다르기 때문입니다:

그런 다음 이번에는 gen-req 옵션과 컴퓨터’의 일반 이름을 뒤에 붙여 easyrsa 스크립트를 다시 호출합니다:

이렇게 하면 서버용 개인 키와 server.req라는 이름의 인증서 요청 파일이 생성됩니다. 서버 키를 /etc/openvpn/ 디렉터리로 복사합니다:

안전한 방법(예: 다음 예시의 SCP)을 사용하여 server.req 파일을 CA 컴퓨터로 전송합니다:

다음으로, CA 컴퓨터의 EasyRSA 디렉터리로 이동합니다:

다시 easyrsa 스크립트를 사용하여 server.req 파일을 가져오고 파일 경로 뒤에 일반 이름을 추가합니다:

그런 다음, sign-req 옵션 뒤에 요청 유형과 일반 이름을 붙여 easyrsa 스크립트를 실행하여 요청에 서명합니다. OpenVPN 서버의 인증서 요청의 경우, 반드시 server 요청 유형을 사용해야 합니다:

출력 결과에서 요청이 신뢰할 수 있는 소스로부터 온 것인지 확인하라는 메시지가 표시됩니다. yes를 입력하고 Enter 키를 눌러 확인합니다. 정확성을 보장하기 위해 아래에 표시된 세부 정보를 확인하십시오. 이 요청은 아직 비밀번호 검증이 되지 않았습니다.

주체를 요청하고 3650일 동안 서버 인증서로 서명합니다:

 OpenVPN sign certificate for server

CA 키를 암호화한 경우 이 시점에서 비밀번호를 입력하라는 메시지가 표시됩니다. 다음으로, 안전한 방법을 사용하여 서명된 인증서를 VPN 서버로 다시 전송합니다:

CA 컴퓨터에서 로그아웃하기 전에 ca.rt 파일을 서버로 전송합니다:

다음으로, OpenVPN 서버에 다시 로그인하고 server.crt 및 ca.crt 파일을 /etc/openvpn/ 디렉터리로 복사합니다:

그런 다음, EasyRSA 디렉터리로 이동합니다:

키 교환 중에 사용할 수 있는 강력한 Diffie-Hellman 키를 생성하려면 다음 코드를 입력하십시오:

완료되면, 서버의 TLS 상태 확인 기능을 향상시키기 위해 HMAC 서명을 생성합니다:

명령이 완료되면, 두 개의 새 파일을 / etc / openvpn / 디렉터리로 복사합니다:

이러한 방식으로 서버에 필요한 모든 인증서 및 키 파일이 생성됩니다. 이제 클라이언트 컴퓨터가 OpenVPN 서버에 액세스하는 데 사용할 적절한 인증서와 키를 생성할 수 있습니다.

4단계 – 클라이언트 인증서 및 키 쌍 생성

다음으로, 클라이언트 키와 여러 인증서를 생성합니다. 클라이언트가 여러 개인 경우 각 클라이언트에 대해 이 프로세스를 반복할 수 있습니다. 단, 각 클라이언트에 대해 스크립트에 고유한 이름 값을 전달해야 합니다. 이 튜토리얼에서는 첫 번째 인증서/키 쌍의 이름을 client1로 지정합니다. 먼저, 클라이언트 인증서와 키 파일을 저장할 디렉터리 구조를 홈 디렉터리에 생성합니다:

보안상의 이유로 이 디렉터리에 인증서/키 쌍과 클라이언트의 구성 파일을 저장하므로, 이제 권한을 제한해야 합니다:

그런 다음 EasyRSA 디렉터리로 다시 이동하여 gen-req 및 nopass 옵션과 클라이언트의 일반 이름을 사용하여 easyrsa 스크립트를 실행합니다:

Enter 키를 눌러 일반 이름(common name)을 확인합니다. 그런 다음, client1.key 파일을 이전에 생성한 / client-configs / keys / 디렉터리로 복사합니다:

다음으로, 안전한 방법을 사용하여 client1.req 파일을 CA 컴퓨터로 전송합니다:

CA 컴퓨터에 로그인하고, EasyRSA 디렉터리로 이동하여 인증서 요청을 가져옵니다:

import client.req

그런 다음 이전 단계와 마찬가지로 서버에서 요청에 서명합니다. 하지만 이번에는 클라이언트 요청 유형을 지정해야 합니다:

프롬프트가 표시되면 yes를 입력하여 인증서 요청에 서명하기를 원하며 해당 인증서 요청이 신뢰할 수 있는 소스로부터 온 것임을 확인합니다. 계속하려면 “yes”라는 단어를 입력하고, 그렇지 않으면 다른 것을 입력하여 폐기하십시오:

sign certificate

CA 키를 암호화한 경우 여기에서도 비밀번호를 입력하라는 메시지가 표시됩니다. 이렇게 하면 client1.crt라는 이름의 클라이언트 인증서 파일이 생성됩니다. 이 파일을 서버로 다시 전송합니다:

OpenVPN 서버로 다시 SSH 연결을 하고 클라이언트 인증서를 / client-configs / keys / 디렉터리로 복사합니다:

다음으로, ca.crt 및 ta.key 파일을 / client-configs / keys / 디렉터리로 복사합니다:

동시에 서버와 클라이언트의 모든 인증서와 키가 생성되어 서버의 해당 디렉터리에 저장되었습니다. 이제 서버에서 OpenVPN 설정을 계속할 수 있습니다.

 5단계 – OpenVPN 서비스 구성

클라이언트 및 서버 인증서를 생성한 후, 이러한 자격 증명을 사용하도록 OpenVPN 서비스를 구성할 수 있습니다. 먼저 OpenVPN 샘플 구성 파일을 구성 디렉터리로 복사한 다음 압축을 풀어 설정의 기본으로 사용합니다:

선호하는 텍스트 편집기에서 서버 구성 파일을 엽니다:

그런 다음, tls-auth 명령을 찾아 HMAC 부분을 찾습니다:

주석 처리된 암호 줄을 찾아 암호 부분을 찾습니다. AES-256-CBC 암호화는 우수한 수준의 암호화를 제공하며 널리 지원됩니다. 해당 줄은 주석 처리되지 않아야 하지만, 주석 처리되어 있다면 앞의 “;”를 삭제하십시오:

그 아래에 HMAC 메시지 다이제스트 알고리즘을 선택하기 위한 Auth 명령을 추가합니다. 이를 위해 SHA256이 좋은 선택입니다:

다음으로, 디피-헬만(Diffie-Hellman) 매개변수를 정의하는 dh 문이 있는 줄을 찾습니다. 최근 EasyRSA의 일부 변경 사항으로 인해 디피-헬만 키 파일 이름이 샘플 서버 구성 파일에 나열된 파일 이름과 다를 수 있습니다. 필요한 경우, 이전 단계의 키와 일치하도록 2048을 삭제하여 여기에 나열된 파일 이름을 변경하십시오:

마지막으로, user 및 group 설정을 찾고 각 줄의 시작 부분에 있는 “;”를 삭제합니다:

지금까지 샘플 server.conf 파일에 적용한 변경 사항으로 OpenVPN이 작동할 것입니다.

6단계 – 서버 네트워크 구성

VPN을 통해 트래픽을 올바르게 라우팅하도록 IP 포워딩을 구성합니다. 이는 서버가 제공하는 VPN 기능에 필수적입니다:

net.ipv4.ip_forward를 설정하는 주석 처리된 줄을 찾습니다. 이 설정의 주석을 해제하려면 줄 시작 부분에서 “#” 문자를 제거합니다:

완료되면 파일을 저장하고 닫습니다. 파일을 읽고 현재 세션의 값을 조정하려면 다음과 같이 입력합니다:

sysctl -p

다음으로, 머신의 공인 네트워크 인터페이스를 추가합니다:

공인 인터페이스는 이 명령의 출력에서 “dev” 단어 뒤에 오는 문자열입니다. 예를 들어, 이 결과는 ens3이라는 이름의 인터페이스를 보여줍니다.

default ip route

관련 구성을 추가하기 위해 /etc/ufw/before.rules 파일을 엽니다:

파일 상단 부근에 아래의 강조 표시된 줄을 추가하여 nat 테이블의 POSTROUTING 체인에 대한 기본 정책을 설정하고 VPN에서 들어오는 모든 트래픽을 마스커레이드(masquerade)합니다. 아래 -A POSTROUTING 줄의 ens3을 위 명령에서 찾은 인터페이스로 변경하십시오:

완료되면 파일을 저장하고 닫습니다. 다음으로, UFW가 기본적으로 전달된 패킷도 허용하도록 설정해야 합니다. 이를 위해 /etc/default/ufw 파일을 엽니다:

내부에서 DEFAULT_FORWARD_POLICY 지시어를 찾아 값을 DROP에서 ACCEPT로 변경합니다:

완료되면 파일을 저장하고 닫습니다. 다음으로, OpenVPN으로의 트래픽을 허용하도록 방화벽을 조정합니다. /etc/openvpn/server.conf 파일에서 포트와 프로토콜을 변경하지 않았다면, 1194 포트로의 UDP 트래픽을 열어야 합니다. 포트 및/또는 프로토콜을 수정한 경우, 여기에서 선택한 값으로 대체하십시오. 사전 요구 사항 튜토리얼을 진행할 때 SSH 포트를 추가하는 것을 잊었다면, 여기에도 추가하십시오:

해당 규칙들을 추가한 후, UFW를 비활성화했다가 다시 활성화하여 재시작하고 수정한 모든 파일의 변경 사항을 로드합니다:

ufw commands

축하합니다, 이제 서버가 OpenVPN 트래픽을 올바르게 처리하도록 구성되었습니다!

결론

이 튜토리얼을 끝까지 따라 하셨다면, 이제 인터넷을 안전하게 탐색할 수 있습니다. 귀하의 신원, 위치 및 트래픽을 엿보는 눈으로부터 안전하게 보호할 수 있습니다.

즐거운 컴퓨팅 되세요!

 

 

author

Akshay Nagpal

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.