Ubuntu 20.04에서 OpenVPN 서버를 설정하는 방법

Ubuntu 20.04에서 보안 OpenVPN 서버를 설정하기 위한 궁극적인 가이드

VPN(가상 사설망)을 사용하면 사설망에 직접 연결된 것처럼 원격 사설망(예: 사무실 네트워크 또는 인터넷)에 안전하게 비공개로 연결할 수 있습니다.

VPN은 서버-클라이언트 아키텍처에서 작동합니다. VPN 서버는 컴퓨터에 배포되며 인터넷을 통해 공개적으로 액세스할 수 있습니다. VPN 서버는 사무실 네트워크와 같은 사설 LAN 연결을 허용하거나 인터넷 연결을 허용하도록 구성할 수 있습니다. 사용자는 로컬 컴퓨터에서 VPN 클라이언트를 사용하여 VPN 서버에 연결합니다. VPN 서버와 클라이언트 간의 통신은 보안 터널링 프로토콜을 사용하여 이루어집니다. 인터넷에서는 트래픽의 목적지가 VPN 서버인 것처럼 보입니다. 그러나 트래픽은 서버를 통해 클라이언트로 전달됩니다.

VPN은 웹사이트에서 허용하는 국가에 기반을 둔 VPN에 연결하여 특정 웹사이트에서 종종 손상되거나 지리적 제한을 우회하는 공용 Wi-Fi 네트워크에 안전하게 연결하는 것과 같이 일상 생활에서 많이 사용됩니다.

OpenVPN은 광범위한 구성 및 옵션을 허용하는 널리 사용되는 VPN 구현입니다. 데이터 암호화를 위해 SSL(Secure Sockets Layer) 프로토콜을 사용하고 VPN 클라이언트 인증을 위해 사전 공유 키, 사용자 이름/암호 또는 인증서를 사용합니다. 이 기사에서는 Ubuntu 20.04에서 VPN 서버와 VPN 클라이언트를 설정하는 방법을 살펴봅니다.

설치

OpenVPN은 패키지의 공식 Ubuntu 리포지토리에서 사용할 수 있습니다. 오픈 VPN. 이 패키지는 OpenVPN 서버와 클라이언트를 모두 설치합니다.

sudo apt install openvpn

앞서 언급했듯이 OpenVPN은 SSL 인증서를 사용하여 서버와 클라이언트 간의 데이터를 암호화합니다. VPN에 대한 인증서를 발급하려면 자체 인증 기관(CA)을 설정해야 합니다. 이것은 OpenVPN이 설정된 시스템이 아닌 다른 시스템에 설정해야 합니다. 그 이유는 동일한 서버에 있고 손상되면 공격자가 개인 키에 액세스하여 VPN 연결을 공격할 수 있기 때문입니다.

'Easy-RSA'라는 도구를 사용하여 인증 기관을 설정합니다. 이를 설치하려면 CA 시스템, OpenVPN 서버 시스템 및 클라이언트 시스템에서 다음을 실행하십시오. CA를 설정하려면 이들 세 가지 모두에서 구성이 필요하기 때문입니다.

sudo apt install easy-rsa

이제 먼저 CA 시스템에서 인증 기관을 구성하고 Open VPN 서버 시스템에서 이에 대한 몇 가지 필수 구성 단계를 수행합니다.

인증 기관 설정

CA 머신의 초기 설정

이제 이 패키지는 메이크 캐디르 인증 기관 구성을 위한 폴더를 만드는 데 사용됩니다. 이를 이용하여 폴더를 생성하고 폴더를 입력해 봅시다.

make-cadir cert_authority && cd cert_authority

라는 파일을 엽니다. vars 이 디렉토리에 생성됩니다. 이 파일에는 수정해야 하는 몇 가지 구성 변수가 포함되어 있습니다. 수정해야 할 값은 91-96행에 대한 주석 뒤에 있습니다. 조직 분야 이 필드를 설명합니다. 라인의 주석을 제거하고 샘플 값 대신 적절한 값을 채웁니다.

파일을 저장하고 종료합니다. vim 편집기를 사용하는 경우 다음을 누르십시오. ESC, 유형 :wq 그리고 누르다 입력하다 저장하고 종료합니다.

다음으로 실행합니다. 이지르사 공개 키 및 인증서를 생성하는 데 사용되는 공개 키 기반 구조(PKI)를 설정하기 위해 디렉토리에 있는 프로그램.

./easyrsa init-pki

다음 단계에서는 CA 키와 인증서를 생성합니다. 명령이 암호를 묻는 메시지를 표시하면 CA 키의 암호를 입력합니다. 또한 메시지가 표시되면 일반 이름을 입력합니다. 이 필드를 비워 두면 기본 이름 Easy-RSA CA 이름이 사용됩니다.

./easyrsa 빌드-ca

출력에서 볼 수 있듯이 인증서와 키가 생성되었습니다. 이 키는 클라이언트 및 서버 인증서에 서명하는 데 사용되므로 절대 건드리거나 수정해서는 안 됩니다.

이제 PKI 설정이 완료되었습니다. 다음 단계는 OpenVPN 서버로 사용할 컴퓨터에 서버 키와 인증서를 만드는 것입니다. 이 인증서는 나중에 CA 시스템에서 서명됩니다.

서버 시스템에서 서버 키 및 인증서 생성

서버 시스템에 Easy RSA를 이미 설치했습니다. 이제 이전에 CA 시스템 즉, 서버 시스템에서 수행한 세 단계를 수행합니다. 다음을 사용하여 CA 디렉토리 생성 메이크 캐디르 그리고 그 안에 들어가서 변수를 수정합니다. vars 파일 및 다음을 사용하여 PKI 생성 ./easyrsa init-pki 명령.

다음으로 서버 인증서 요청 및 키를 생성하는 명령을 실행해야 합니다.

./easyrsa gen-req 서버 nopass

우리는 옵션을 전달했습니다. 노패스 명령이 서버 키에 대한 암호를 입력하라는 메시지를 표시하지 않도록 합니다. 여전히 서버의 일반 이름을 묻는 메시지가 표시되며, 아무 것도 입력하거나 기본 이름으로 비워 둘 수 있습니다(섬기는 사람) 사용될.

생성된 키 파일을 내부로 이동 /etc/openvpn 예배 규칙서.

sudo mv pki/private/server.key /etc/openvpn

CA 시스템에 인증서 요청을 보냅니다. 우리는 명령을 사용할 것입니다 SCP 이 목적을 위해.

scp pki/reqs/server.req 사용자@CA_MACHINE_HOSTNAME:/디렉토리

위의 스크린샷에서 호스트 45.79.125.41은 CA 머신입니다. /root 디렉토리에 인증서를 복사했습니다.

이제 서버의 인증서가 CA 머신에 복사되었습니다. 다음 단계는 CA 시스템으로 돌아가서 이 인증서에 서명하는 것입니다.

CA에서 서버 인증서 서명

먼저 서버의 인증서 요청 파일이 CA 머신에 복사되었는지 확인합니다. 파일을 복사한 디렉토리(내 예에서는 /root)로 이동하여 다음을 실행합니다. .

:~# cd /root && ls cert_authority server.req

파일에서 볼 수 있듯이 서버.req 존재합니다. 그런 다음 CA 디렉터리로 이동하여 이 요청을 가져옵니다.

cd cert_authority ./easyrsa import-req /root/server.req 서버

이 요청에 서명하려면 다음 명령을 실행하세요.

./easyrsa 서명 요청 서버 서버

여기서 첫 번째 인수는 요청 유형입니다. 즉, 섬기는 사람, 두 번째 인수는 이전에 기본값을 사용한 서버 시스템의 일반 이름입니다. 섬기는 사람.

문구를 입력하세요 네, 메시지가 표시되면 CA 키의 암호.

이제 인증서 요청 파일을 제거하고 서버에 대해 생성된 인증서와 CA 공용 인증서를 다시 서버 시스템으로 복사할 수 있습니다.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

다음으로 VPN의 보안 연결을 보장하기 위해 몇 가지 단계를 더 수행해야 합니다.

DH 매개변수 생성

DH(Diffie-Hellman) 키 교환은 안전하지 않은 채널을 통해 암호 키의 안전한 교환을 보장하는 알고리즘입니다. 먼저 받은 인증서와 CA 공인인증서를 /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

서버 컴퓨터의 CA 폴더로 이동하고 다음 명령을 실행하여 DH 매개변수를 생성합니다. 생성하는 데 시간이 오래 걸릴 수 있습니다.

./easyrsa gen-dh

이제 생성된 파일을 다음으로 이동합니다. /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

TA 키 생성

OpenVPN은 TLS 인증 키를 사용하는 또 다른 추가 보안 조치를 사용합니다. TLS 인증 키를 생성하려면 다음을 실행합니다.

openvpn --genkey --비밀 tls_auth.key

그리고 키를 다음으로 이동합니다. /etc/openvpn.

mv tls_auth.key /etc/openvpn

이제 서버 키 구성 및 인증 기관 설정이 완료되었습니다. 이제 VPN 서버의 실제 구성으로 이동하겠습니다.

OpenVPN 서버 구성

OpenVPN 서버용 구성 파일은 자동으로 생성되지 않지만, 템플릿 구성 파일을 사용할 수 있습니다. 오픈 VPN 패키지.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz

vim이나 원하는 편집기를 사용하여 파일을 엽니다.

cd /etc/openvpn vim server.conf

이전에 생성한 키와 인증서의 일반 이름을 입력해야 합니다. 라인 번호로 이동합니다. 78. 기본 이름을 모두 사용했으므로 변경되지 않은 상태로 유지합니다. 그런 다음 85행에서 DH 매개변수 파일의 이름을 확인합니다. dh.pem이라는 이름을 사용했으므로 변경해 보겠습니다.

다음으로 OpenVPN 서버의 권한을 수정해 보겠습니다. 274 및 275행으로 이동하여 선행 문자를 제거하십시오. ; 주석을 해제합니다.

마찬가지로 192행으로 이동하여 세미콜론을 제거합니다. 이 지시문을 사용하면 모든 클라이언트의 트래픽이 VPN을 통과할 수 있습니다.

파일을 저장하고 종료합니다.

/etc/openvpn 폴더의 소유권을 루트로 변경합니다.

sudo chown -R 루트:루트 /etc/openvpn

네트워킹 및 방화벽 설정

VPN 클라이언트에서 패킷이 전달되도록 하려면 서버에서 IP 전달을 허용해야 합니다. 28번째 줄 주석 해제 /etc/sysctl.conf:

파일을 저장하고 종료합니다.

재시작 시스템 컨트롤 이러한 변경 사항이 적용됩니다.

sudo sysctl -p

VPN 클라이언트가 VPN 서버의 IP 주소를 사용하여 인터넷에 액세스할 수 있도록 UFW 방화벽을 사용하는 서버에 네트워크 주소 변환(NAT)을 설정해야 합니다. 먼저 방화벽 구성에서 패킷 포워딩을 활성화해 보겠습니다. 열려있는 /etc/default/ufw 19행의 변수를 ACCEPT로 변경하십시오.

파일을 저장하고 종료합니다.

이제 파일에 다음 규칙을 추가합니다. /etc/ufw/before.rules 전에 필터 파일의 줄.

*nat : POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT

대신 네트워크 인터페이스를 입력하십시오. . 명령을 사용하여 네트워크 인터페이스를 볼 수 있습니다. ifconfig.

방화벽에서 OpenVPN 서비스에 대한 트래픽을 허용하고 포트 1194를 허용합니다.

sudo ufw 허용 openvpn && sudo ufw 허용 1194

방화벽 서비스를 다시 로드하십시오.

sudo ufw 새로고침

이제 다음을 실행하여 Open VPN 서버 데몬을 다시 시작할 수 있습니다.

sudo 서비스 openvpn 다시 시작

다음을 실행하여 부팅 시 시작하도록 활성화합니다.

sudo systemctl은 openvpn을 활성화합니다.

이제 OpenVPN 서버가 구성되고 시작되었습니다. 이제 클라이언트 인증서 요청 및 키 생성 및 기타 구성을 진행해 보겠습니다.

OpenVPN 클라이언트 구성

클라이언트에 대한 키와 인증서 요청을 생성해야 합니다. 이를 수행하는 절차는 서버의 절차와 동일합니다.

클라이언트 키와 인증서 요청은 클라이언트 머신에서 생성되어 CA 머신으로 전송될 수 있지만, 서버 머신에서 생성하는 것을 권장합니다. 서버에서 이 작업을 수행할 때의 이점은 서버에서 필요한 모든 단계를 수행하기 위한 스크립트를 생성하여 새 클라이언트가 VPN에 더 쉽게 가입할 수 있다는 것입니다.

서버의 CA 폴더로 이동하여 다음을 실행합니다.

cd ~/cert_authority ./easyrsa gen-req 클라이언트 nopass

이전과 유사한 방식으로 프롬프트가 표시되면 일반 이름을 입력하거나 기본 일반 이름을 사용하려면 비워 두십시오. 고객.

이제 생성된 클라이언트 인증서 요청을 CA 시스템에 복사해 보겠습니다.

scp pki/reqs/client.req [email protected]:/root

CA 시스템에서 이 요청을 가져오겠습니다.

./easyrsa import-req /root/client.req 클라이언트

이제 서명해 보겠습니다.

./easyrsa 서명 요청 클라이언트 클라이언트

입력하다 계속하라는 메시지가 표시되면. 메시지가 표시되면 CA 키의 암호를 입력합니다.

이제 클라이언트에 대해 요청된 파일을 제거하고 요청을 VPN 서버 시스템에 다시 복사할 수 있습니다.

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

라는 폴더를 만들어 봅시다. 고객 VPN 서버에서 클라이언트와 관련된 모든 파일을 유지합니다. 클라이언트 키와 인증서를 이 폴더로 이동합니다.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

이제 서버 구성 파일을 생성한 방법과 유사하게 사용 가능한 템플릿에서 구성 파일을 생성해 보겠습니다.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client

파일 열기 클라이언트.conf. 42행에 서버 시스템의 호스트 이름 또는 IP 주소를 입력하십시오. 내 서버 1.

파일에 대한 권한을 다운그레이드하려면 선행 세미콜론을 제거하여 61행과 62행의 주석 처리를 제거하십시오.

다음으로, 88-90행과 108행을 주석 처리합니다. 그 이유는 파일 위치를 사용하는 대신 언급된 파일의 내용을 수동으로 추가하기를 원하기 때문입니다. 이렇게 하는 목적은 클라이언트 구성 파일이 나중에 클라이언트로 전송되기 위한 것입니다. 따라서 구성 파일 자체의 내용을 복사합니다.

클라이언트 구성 파일에 다음을 추가합니다. 주어진 태그 안에 각 파일의 파일 내용을 입력합니다.

 # ca.crt 파일의 내용을 여기에 붙여넣기 # client.crt 파일의 내용을 여기에 붙여넣기 # client.key 파일의 내용을 여기에 붙여넣기 key-direction 1 # tls_auth.key 파일의 내용을 여기에 붙여넣기 

파일을 저장하고 종료합니다. 이 파일의 이름 바꾸기 클라이언트.conf 에게 클라이언트.ovpn, 후자는 네트워크 구성으로 가져올 수 있는 구성 파일에 필요한 확장자이므로.

이제 파일을 전송합니다. 클라이언트.ovpn 클라이언트, 즉 로컬 머신에.

운영 SCP 클라이언트 컴퓨터에서 서버 컴퓨터에서 로컬 컴퓨터로 파일을 전송합니다.

scp user@server_ip:/path_to_file local_destination_path

마지막으로 이 구성 파일을 사용하여 VPN 서버에 연결해야 합니다. 이는 명령줄과 GUI를 통해 모두 수행할 수 있습니다.

명령줄에서 VPN 클라이언트를 시작하려면 다음을 실행합니다.

sudo openvpn --config client.ovpn

그리고 이것은 VPN 클라이언트를 시작하기 위해 실행해야 하는 유일한 명령입니다.

GUI를 통해 VPN 클라이언트를 시작하려면 다음 단계를 수행하십시오.

클라이언트 컴퓨터에서 설정 » 네트워크로 이동합니다.

클릭 + VPN 섹션에서 버튼을 클릭하고 옵션에서 '파일에서 가져오기...'를 선택합니다.

VPN 사용을 시작하려면 '추가'를 클릭하세요.

'Gateway' 아래에는 서버의 IP 주소가 있음을 유의하십시오.

마지막으로 '클라이언트 VPN' 버튼을 토글하여 머신에서 VPN을 활성화합니다.

VPN 연결을 설정하는 데 몇 초가 걸릴 수 있습니다. VPN에 대한 새로운 진행 로고는 설정하는 동안 화면의 왼쪽 상단 모서리에 표시되며 설정이 완료되면 VPN 로고로 변경됩니다.

VPN이 올바르게 작동하는지 확인하려면 다음을 실행하십시오.

컬 //ipinfo.io/ip

서버 시스템의 IP 주소를 반환해야 합니다. 또는 Google에서 '내 IP'를 검색하여 IP 주소를 확인할 수도 있습니다. VPN 설정이 제대로 작동하는 경우 VPN 서버의 IP 주소가 표시되어야 합니다.

결론

이 기사에서는 OpenVPN 서버, 인증 기관 및 OpenVPN 클라이언트를 구성하는 방법을 살펴보았습니다. VPN에 더 많은 클라이언트를 추가하려면 이제 절차에 따라 클라이언트에 대한 인증서를 생성 및 서명하고 여기에서 생성된 동일한 구성 파일을 사용하고 클라이언트 키와 인증서 값만 변경해야 합니다.

느린 인터넷 연결의 경우 UDP가 통신에 사용되는 경우 상당한 패킷 손실이 있을 수 있습니다. 사용자는 행의 주석을 제거하여 TCP로 전환할 수 있습니다. 프로토 TCP 그리고 라인에 대한 코멘트 프로토 UDP 서버 구성 파일에서.

또한 다른 오류가 있는 경우 로깅 수준을 설정할 수 있습니다. 동사 서버 및 클라이언트 구성 파일 모두에서 지시문. 0에서 9 사이의 값을 입력할 수 있습니다. 이 지시문 값이 높을수록 로그가 더 상세해집니다.