SW/리눅스

Ubuntu 18.04 : OpenVPN Server 설정하는 방법, 예제, 명령어

얇은생각 2021. 2. 9. 07:30
반응형

신뢰할 수 없는 공용 Wi-Fi 네트워크에 연결되어 있는 동안 인터넷에 안전하게 액세스하고 싶은지, 지역 제한 콘텐츠를 무시하거나 동료가 원격으로 작업할 때 회사 네트워크에 안전하게 연결할 수 있도록 허용할지 여부는 VPN을 사용하는 것이 가장 좋은 방법입니다. 

VPN을 사용하면 원격 VPN 서버에 연결하여 트래픽 데이터를 비공개로 유지하여 연결을 암호화하고 안전하게 보호하고 익명으로 웹 서핑을 할 수 있습니다. 

선택할 수 있는 상용 VPN 제공자가 많지만 제공자가 사용자의 작업을 로깅하고 있지 않은지 확신할 수는 없습니다. 가장 안전한 옵션은 자신의 VPN 서버를 설정하는 것입니다. 

Ubuntu 18.04에 OpenVPN을 설치하고 구성하여 자체 VPN 서버를 설정하는 과정을 안내합니다. 또한 클라이언트 인증서를 생성하고 구성 파일을 생성하는 방법을 보여 줍니다. 

OpenVPN은 완전한 기능을 갖춘 오픈 소스 SSL(Secure Socket Layer) VPN 솔루션입니다. SSL/TLS 프로토콜을 사용하여 OSI 2계층 또는 3계층 보안 네트워크 확장을 구현합니다.

 

 

Ubuntu 18.04 : OpenVPN Server 설정하는 방법, 예제, 명령어

 

 

전제조건

이 튜토리얼을 완료하려면 다음이 필요합니다. 

- OpenVPN 인스턴스를 호스트하기 위해 Ubuntu 18.04 서버에 대한 Sudo 액세스

- 서버에는 기본 UFW 방화벽이 구성

 

CA(인증 기관)로 사용할 전용 시스템을 별도로 마련하십시오. CA에 전용 시스템을 사용하지 않으려면 OpenVPN 서버 또는 로컬 시스템에 CA를 빌드할 수 있습니다. CA를 작성한 후에는 CA 디렉토리를 안전한 곳 또는 오프라인으로 이동하는 것이 좋습니다.

CA가 별도의 Ubuntu 18.04 시스템에 있다고 가정합니다. 서버를 CA로 사용하는 경우 동일한 단계(작은 수정사항 포함)가 적용됩니다. 

별도의 CA 시스템을 사용하는 이유는 공격자가 서버에 침입하는 것을 방지하기 위한 것입니다. 공격자가 CA 개인 키에 액세스할 수 있는 경우 새 인증서를 서명하는 데 이를 사용하여 VPN 서버에 액세스할 수 있습니다.

 

 

 

간편한 CA 구축RSA

새 OpenVPN 서버를 설정할 때 첫 번째 단계는 PKI(Public Key Infrastructure)를 구축하는 것입니다. 이렇게 하려면 다음을 생성해야 합니다.

- CA(인증 기관) 인증서 및 개인 키

- CA에서 발급한 서버에 대한 별도의 인증서 및 개인 키 쌍

- CA에서 발급한 각 클라이언트에 대해 별도의 인증서 및 개인 키 쌍

 

보안상의 이유로 인한 사전 요구 사항에서 언급했듯이 독립 실행형 시스템에 CA를 구축하겠습니다.

CA, 인증서 요청 및 서명 인증서를 생성하기 위해 EasyRSA라는 CLI 유틸리티를 사용합니다.

CA 시스템에서 다음 단계를 수행하십시오.

 

01. 먼저 다음 wget 명령을 사용하여 프로젝트 Github 저장소에서 EasyRSA의 최신 릴리스를 다운로드합니다.

cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

 

 

02. 다운로드가 완료되면 다음을 사용하여 아카이브를 추출합니다.

tar xzf EasyRSA-nix-3.0.5.tgz

 

 

 

03. EasyRSA 디렉토리로 전환하고 vars.example 파일을 복사하여 vars라는 구성 파일을 생성합니다.

cd ~/EasyRSA-3.0.5/
cp vars.example vars

 

 

04. 파일 및 주석을 열고 다음 항목을 업데이트하여 사용자의 정보와 일치시킵니다.

# ~/EasyRSA-3.0.5/vars

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "Pennsylvania"
set_var EASYRSA_REQ_CITY       "Pittsburgh"
set_var EASYRSA_REQ_ORG        "Linuxize"
set_var EASYRSA_REQ_EMAIL      "admin@linuxize.com"
set_var EASYRSA_REQ_OU         "Community"

 

 

05. 먼저 CA 키 쌍을 생성하기 전에 다음을 사용하여 새 PKI를 초기화해야 합니다.

./easyrsa init-pki

# init-pki complete; you may now create a CA or requests.
# Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki

 

 

06. 다음 단계는 CA를 구축하는 것입니다.

인증서에 서명할 때마다 암호를 입력하라는 메시지를 표시하지 않으려면 nopass 옵션을 사용하여 build-ca 명령을 실행합니다.

./easyrsa build-ca

# ...
# Enter PEM pass phrase:
# Verifying - Enter PEM pass phrase:
# -----
# ...
# -----
# Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
# 
# CA creation complete and you may now import and sign cert requests.
# Your new CA certificate file for publishing is at:
# /home/causer/EasyRSA-3.0.5/pki/ca.crt

 

 

CA 키의 암호를 설정하고 CA의 공통 이름을 입력하라는 메시지가 나타납니다.

완료되면 스크립트는 CA 공용 인증서 ca.crt와 CA 개인 키 ca.key의 두 개의 파일을 생성합니다.

CA(인증 기관)가 생성되었으므로 이를 사용하여 하나 이상의 OpenVPN 서버 및 클라이언트에 대한 인증서 요청에 서명할 수 있습니다.

 

 

 

OpenVPN 및 Easy 설치RSA

다음 단계는 Ubuntu의 저장소에서 사용할 수 있는 OpenVPN 패키지를 설치하고 최신 버전의 EasyRSA를 다운로드하는 것입니다.

다음 단계는 OpenVPN 서버에서 수행됩니다.

01. OpenVPN 설치는 매우 간단합니다. OpenVPN 서버에서 다음 명령을 실행하면 됩니다.

sudo apt update
sudo apt install openvpn

 

 

02. Easy의 최신 릴리스 다운로드RSA:

cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

 

 

다운로드가 완료되면 다음 명령을 입력하여 아카이브를 추출합니다.

tar xzf EasyRSA-nix-3.0.5.tgz

 

 

 

이미 CA 시스템에서 PKI를 초기화했지만 OpenVPN 서버에서도 새 PKI를 생성해야 합니다. 이렇게 하려면 이전과 동일한 명령을 사용하십시오.

cd ~/EasyRSA-3.0.5/
./easyrsa init-pki

 

 

아직도 우리가 왜 두 개의 Easy가 필요한지 궁금하다면RSA 설치. 이 EasyRSA 인스턴스를 사용하여 Easy를 사용하여 서명할 인증서 요청을 생성하기 때문입니다. CA 시스템의 RSA 인스턴스입니다.

복잡한 것처럼 들릴 수도 있고 약간 혼란스럽게 들릴 수도 있지만, 일단 여러분이 전체 자습서를 읽고 나면 여러분은 그것이 정말로 복잡하지 않다는 것을 알게 될 것입니다.

 

 

 

Diffie-Hellman 및 HMAC 키 생성

이 섹션에서는 키 교환 중에 사용할 강력한 Diffie-Hellman 키와 HMAC 서명 파일을 생성하여 연결에 보안 계층을 추가합니다. 

01. 먼저 OpenVPN 서버의 EasyRSA 디렉토리로 이동하십시오.

cd ~/EasyRSA-3.0.5/

 

 

 

02. Diffie-Hellman 키 생성:

./easyrsa gen-dh

 

 

이 스크립트는 2048비트 긴 DH 파라미터를 생성합니다. 특히 리소스가 적은 서버에서 이 작업에 시간이 걸릴 수 있습니다. 완료되면 다음 메시지가 화면에 인쇄됩니다.

DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem

 

 

dh.pem 파일을 /etc/openvpn 디렉토리에 복사합니다.

sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/

 

 

 

03. HMAC 서명 생성:

openvpn --genkey --secret ta.key

 

 

완료되면 ta.key 파일을 /etc/openvpn 디렉토리에 복사합니다.

sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/

 

 

 

 

서버 인증서 및 개인 키 생성

이 섹션에서는 OpenVPN 서버에 대한 개인 키 및 인증서 요청을 생성하는 방법에 대해 설명합니다. 

OpenVPN 서버의 EasyRSA 디렉토리로 이동하여 서버의 새 개인 키 및 인증서 요청 파일을 생성합니다.

cd ~/EasyRSA-3.0.5/
./easyrsa gen-req server1 nopass

 

 

암호를 입력하지 않고 OpenVPN 서버를 시작하려고 하기 때문에 nonpass 인수를 사용하고 있습니다. 또한 이 예에서는 서버 1을 서버 이름(주체) 식별자로 사용하고 있습니다. 다른 서버 이름을 선택할 경우 서버 이름이 사용되는 아래 지시사항을 조정해야 합니다.

명령어는 개인 키(server1.key)와 인증서 요청 파일(server1.req)의 두 개의 파일을 생성합니다.

# -----
# Common Name (eg: your user, host, or server name) [server1]:
#
# Keypair and certificate request completed. Your files are:
# req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req
# key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key

 

 

02. 개인 키를 /etc/openvpn 디렉토리에 복사합니다.

sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/

 

 

 

03. 인증서 요청 파일을 CA 시스템으로 전송:

scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp

 

 

 이 예에서는 scp를 사용하여 파일을 전송하고 있으며, ssh 또는 다른 보안 방법을 통해 rsync를 사용할 수도 있습니다.

 

04. CA 시스템에 로그인하고 EasyRSA 디렉토리로 전환한 다음 인증서 요청 파일을 가져옵니다.

cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/server1.req server1

 

 

첫 번째 인수는 인증서 요청 파일의 경로이고 두 번째 인수는 서버 단축(주체) 이름입니다. 당사의 경우 서버 이름은 server1입니다.

# The request has been successfully imported with a short name of: server1
# You may now use this name to perform signing operations on this request.

 

 

이 명령은 요청 파일을 pki/reqs 디렉토리에 복사합니다.

 

 

05. CA 시스템의 EasyRSA 디렉토리에 있는 동안 다음 명령을 실행하여 요청에 서명합니다.

cd ~/EasyRSA-3.0.5
./easyrsa sign-req server server1

 

 

첫 번째 인수는 서버 또는 클라이언트일 수 있으며 두 번째 인수는 서버 단축(주체) 이름입니다.

요청이 신뢰할 수 있는 원본에서 왔는지 확인하라는 메시지가 표시됩니다. yes를 입력하고 Enter 키를 눌러 확인합니다.

# You are about to sign the following certificate.
# Please check over the details shown below for accuracy. Note that this request
# has not been cryptographically verified. Please be sure it came from a trusted
# source or that you have verified the request checksum with the sender.
# 
# Request subject, to be signed as a server certificate for 1080 days:
# 
# subject=
#     commonName                = server1
# 
# Type the word 'yes' to continue, or any other input to abort.
# Confirm request details: yes
# ...

 

 

CA 키가 암호로 보호되어 있으면 암호를 입력하라는 메시지가 표시됩니다. 확인되면 스크립트는 SSL 인증서를 생성하고 전체 경로를 인쇄합니다.

# ...
# Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days)
# 
# Write out database with 1 new entries
# Data Base Updated
# 
# Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt

 

 

06. 다음 단계는 서명된 인증서 서버 1.crt 및 ca.crt 파일을 OpenVPN 서버로 다시 전송하는 것입니다. 다시 scp, rsync 또는 기타 보안 방법을 사용할 수 있습니다.

scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmp
scp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp

 

 

07. OpenVPN 서버에 로그인하고 서버 1.crt 및 ca.crt 파일을 /etc/openvpn/ 디렉토리로 이동합니다.

sudo mv /tmp/{server1,ca}.crt /etc/openvpn/

 

 

 

이 섹션에 설명된 단계를 완료하면 OpenVPN 서버에 다음과 같은 새 파일이 있어야 합니다.

# /etc/openvpn/ca.crt
# /etc/openvpn/dh.pem
# /etc/openvpn/ta.key
# /etc/openvpn/server1.crt
# /etc/openvpn/server1.key

 

 

 

OpenVPN 서비스 구성

CA에서 서명한 서버 인증서를 가지고 OpenVPN 서버로 전송되었으므로 이제 OpenVPN 서비스를 구성할 때입니다.

OpenVPN 설치 패키지와 함께 제공된 샘플 구성 파일을 시작 지점으로 사용한 다음 고유한 사용자 지정 구성 옵션을 이 패키지에 추가합니다.

먼저 /etc/openvpn/ 디렉토리에 구성 파일을 추출합니다.

sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"

 

 

즐겨찾는 텍스트 편집기로 파일을 엽니다.

sudo nano /etc/openvpn/server1.conf

 

 

인증서, 키 및 DH 매개변수 지시어를 찾아 파일 이름을 변경합니다.

# /etc/openvpn/server1.conf

cert server1.crt
key server1.key 

dh dh.pem

 

 

VPN을 통해 클라이언트 트래픽을 리디렉션하려면 리디렉션 게이트웨이 및 DHCP 옵션을 찾아 주석 처리합니다.

# /etc/openvpn/server1.conf

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

 

 

기본적으로 OpenDNS 해결사가 사용됩니다. 이를 변경하고 CloudFlare, Google 또는 원하는 다른 DNS 해결사를 사용할 수 있습니다.

각 줄의 시작 부분에 있는 ";"를 제거하여 사용자 및 그룹 지시사항을 찾고 이러한 설정에 주석을 달 수 없습니다.

# /etc/openvpn/server1.conf

user nobody
group nogroup

 

 

파일 끝에 다음 줄을 추가합니다. 이 지시문은 메시지 인증 알고리즘(HMAC)을 SHA1에서 SHA256으로 변경합니다.

# /etc/openvpn/server1.conf

auth SHA256

 

 

 

완료되면 서버 구성 파일(주석 제외)은 다음과 같이 표시되어야 합니다.

# /etc/openvpn/server1.conf

port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256

 

 

 

 OpenVPN 서비스 시작

이 튜토리얼에서는 server1.conf를 구성 파일로 사용했습니다. 이 구성으로 OpenVPN 서비스를 시작하려면 systemd 단위 파일 이름 뒤에 구성 파일 이름을 지정해야 합니다.

OpenVPN 서버에서 다음 명령을 실행하여 OpenVPN 서비스를 시작하십시오.

sudo systemctl start openvpn@server1

 

 

 

다음을 입력하여 서비스가 성공적으로 시작되었는지 확인합니다.

sudo systemctl status openvpn@server1

 

 

 

서비스가 활성 상태이고 실행 중인 경우 출력은 다음과 같습니다.

# ● openvpn@server1.service - OpenVPN connection to server1
#    Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
#    Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
#      Docs: man:openvpn(8)
#            https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
#            https://community.openvpn.net/openvpn/wiki/HOWTO
#  Main PID: 26739 (openvpn)
#    Status: "Initialization Sequence Completed"

 

 

다음 구성 요소로 부팅 시 서비스를 자동으로 시작할 수 있습니다.

sudo systemctl enable openvpn@server1

# Created symlink /etc/systemd/system/multi-user.target.wants/openvpn@server1.service → /lib/systemd/system/openvpn@.service.

 

 

 

 

OpenVPN 서비스가 시작되지 않으면 sudo journal cctl -u openvpn@server1을 사용하여 로그를 확인하십시오.

OpenVPN 서버에서 새 tun 디바이스 tun0을 생성합니다. 디바이스를 사용할 수 있는지 확인하려면 다음 IP 명령을 사용합니다.

ip a show tun0

 

 

 

출력은 다음과 같아야 합니다.

# 4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 100
#     link/none 
#     inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
#        valid_lft forever preferred_lft forever
#     inet6 fe80::1627:9a20:bca8:e6a5/64 scope link stable-privacy 
#        valid_lft forever preferred_lft forever

 

 

이 때 OpenVPN 서버가 올바르게 구성되고 실행되고 있습니다.

 

 

 

방화벽 및 서버 네트워킹 구성

네트워크 패킷을 제대로 전달하려면 IP 전달을 활성화해야 합니다.

다음 단계는 OpenVPN 서버에서 수행됩니다.

/etc/sysctl.conf 파일을 열고 net을 읽는 줄을 추가하거나 주석을 해제합니다.

# /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

 

 

완료되면 파일을 저장한 후 닫습니다.

다음 명령을 실행하여 새 설정을 적용합니다.

sudo sysctl -p
net.ipv4.ip_forward = 1

 

 

사전 요구 사항을 따랐다면 UFW 방화벽이 이미 서버에서 실행 중이어야 합니다.

이제 위장 기능을 사용하려면 방화벽 규칙을 추가해야 합니다. 이렇게 하면 트래픽이 VPN을 벗어나 VPN 클라이언트에 인터넷에 액세스할 수 있습니다.

규칙을 추가하기 전에 Ubuntu OpenVPN 서버의 공용 네트워크 인터페이스를 알아야 합니다. 다음 명령을 실행하면 인터페이스를 쉽게 찾을 수 있습니다.

ip -o -4 route show to default | awk '{print $5}'

 

 

 인터페이스는 아래 출력과 같이 ens3로 명명된다. 인터페이스의 이름이 다를 수 있습니다.

ens3

 

 

 

기본적으로 UFW를 사용하면 전달된 패킷이 삭제됩니다. 이를 변경하고 방화벽에 전달된 패킷을 허용하도록 지시해야 합니다.

UFW 구성 파일을 열고 DEFL_FORWOR_FIGICATION 키를 찾은 다음 값을 DROP에서 Accept로 변경합니다.

# /etc/default/ufw

...
# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...

 

 

다음으로, nat 테이블에서 POST Routing 체인에 대한 기본 정책을 설정하고 위장 규칙을 설정해야 합니다.

이렇게 하려면 /etc/ufw/before.rules 파일을 열고 아래와 같이 노란색으로 강조 표시된 줄을 추가합니다.

sudo nano /etc/ufw/before.rules

 

 

이전 명령에서 찾은 공용 네트워크 인터페이스 이름과 일치하도록 -A POST Routing 라인의 ens3을 교체하는 것을 잊지 마십시오. COMMIT으로 시작하는 마지막 줄 뒤에 줄을 붙여 넣습니다.

# /etc/ufw/before.rules

...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

 

 

또한 기본 OpenVPN 포트인 포트 1194에서 UDP 트래픽을 열어야 합니다. 이렇게 하려면 다음 명령을 실행합니다.

 

sudo ufw allow 1194/udp

 

 

 

SSH 포트를 열지 않은 경우 잠기지 않도록 다음 명령을 실행하여 포트를 엽니다.

sudo ufw allow OpenSSH

 

 

 

마지막으로 UFW를 비활성화하고 다시 활성화하여 UFW 규칙을 다시 로드합니다.

sudo ufw disable
sudo ufw enable

 

 

변경 내용을 확인하려면 다음 명령을 실행하여 POST Routing 규칙을 나열합니다.

sudo iptables -nvL POSTROUTING -t nat

# Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
#  pkts bytes target     prot opt in     out     source               destination
#     0     0 MASQUERADE  all  --  *      ens3    10.8.0.0/16          0.0.0.0/0  

 

 

 

클라이언트 구성 인프라 생성

이 튜토리얼에서는 별도의 SSL 인증서를 생성하고 각 VPN 클라이언트에 대해 다른 구성 파일을 생성합니다. 

클라이언트 개인 키 및 인증서 요청은 클라이언트 컴퓨터 또는 서버에서 생성할 수 있습니다. 간단히 인증서 요청을 서버에서 생성한 다음 CA로 전송하여 서명하도록 하겠습니다.

클라이언트 인증서 및 구성 파일을 생성하는 전체 프로세스는 다음과 같습니다.

 

01. OpenVPN 서버에서 개인 키 및 인증서 요청을 생성합니다.

02. 서명할 CA 시스템으로 요청을 전송합니다.

03. 서명된 SSL 인증서를 OpenVPN 서버에 복사하고 구성 파일을 생성합니다.

04. VPN 클라이언트의 시스템으로 구성 파일을 보냅니다.

 

먼저 클라이언트 파일을 저장할 디렉토리 집합을 만듭니다.

mkdir -p ~/openvpn-clients/{configs,base,files}

 

 

 

base 디렉터리는 모든 클라이언트 파일에서 공유될 기본 파일 및 구성을 저장합니다.

configs 디렉토리는 생성된 클라이언트 구성을 저장합니다.

files 디렉토리는 클라이언트별 인증서/키 쌍을 저장합니다.

 

ca.crt 및 ta.key 파일을 ~/openvpn-clients/base 디렉토리에 복사합니다.

cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
cp /etc/openvpn/ca.crt ~/openvpn-clients/base/

 

 

그런 다음 샘플 VPN 클라이언트 구성 파일을 클라이언트-/openvpn-clients/base 디렉토리에 복사합니다. 이 파일을 기본 구성으로 사용합니다.

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

 

 

이제 서버 설정과 구성에 맞게 파일을 편집해야 합니다. 텍스트 편집기로 구성 파일을 엽니다.

nano ~/openvpn-clients/base/client.conf

 

 

 

원격 지시어를 찾아 OpenVPN 서버의 공용 IP 주소로 기본 자리 표시자를 변경합니다.

# ~/openvpn-clients/base/client.conf

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote YOUR_SERVER_IP 1194

 

 

ca, cert 및 주요 지시사항을 찾아 주석 처리합니다. 인증서 및 키는 구성 파일 내에 추가됩니다.

# ~/openvpn-clients/base/client.conf

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
# ca ca.crt
# cert client.crt
# key client.key

 

 

 

서버 설정과 일치하도록 파일 끝에 다음 줄을 추가합니다.

# ~/openvpn-clients/base/client.conf

auth SHA256

 

 

작업을 마치면 서버 구성 파일은 다음과 같습니다.

# ~/openvpn-clients/base/client.conf

client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1

 

 

그런 다음 기본 구성 및 파일을 클라이언트 인증서 및 키와 병합하고 생성된 구성을 ~/openvpn-clients/configs 디렉토리에 저장하는 단순 bash 스크립트를 생성합니다

텍스트 편집기를 열고 다음 스크립트를 작성합니다.

# ~/openvpn-clients/gen_config.sh

#!/bin/bash

FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
    if [[ ! -f $i ]]; then
        echo " The file $i does not exist"
        exit 1
    fi

    if [[ ! -r $i ]]; then
        echo " The file $i is not readable."
        exit 1
    fi
done

# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF

 

 

다음 chmod 명령을 실행하여 파일을 저장하고 실행할 수 있도록 합니다.

chmod u+x ~/openvpn-clients/gen_config.sh

 

 

 

클라이언트 인증서 개인 키 및 구성 생성

클라이언트 개인 키 및 인증서 요청을 생성하는 프로세스는 서버 키 및 인증서 요청을 생성할 때와 동일합니다.

이전 섹션에서 이미 언급했듯이 OpenVPN 서버에서 클라이언트 개인 키 및 인증서 요청을 생성합니다. 이 예에서는 첫 번째 VPN 클라이언트의 이름이 client1이 됩니다.

01. OpenVPN 서버의 EasyRSA 디렉토리로 이동하여 새 개인 키와 클라이언트용 인증서 요청 파일을 생성합니다.

cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass

 

 

 

명령은 개인 키(클라이언트1.key)와 인증서 요청 파일(클라이언트1.req)의 두 개의 파일을 생성합니다.

# Common Name (eg: your user, host, or server name) [client1]:
# 
# Keypair and certificate request completed. Your files are:
# req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req
# key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key

 

 

02. 개인 키 클라이언트1을 복사합니다.이전 섹션에서 생성한 ~/openvpn-vpn-vpn/files 디렉토리에 대한 키:

cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/

 

 

 

03. 인증서 요청 파일을 CA 시스템으로 전송:

scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp

 

 

 

 이 예에서는 scp를 사용하여 파일을 전송하고 있으며, ssh 또는 다른 보안 방법을 통해 rsync를 사용할 수도 있습니다.

 

04. CA 시스템에 로그인하고 EasyRSA 디렉토리로 전환한 다음 인증서 요청 파일을 가져옵니다.

cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/client1.req client1

 

 

첫 번째 인수는 인증서 요청 파일의 경로이고 두 번째 인수는 클라이언트 이름입니다.

# The request has been successfully imported with a short name of: client1
# You may now use this name to perform signing operations on this request.

 

 

05. CA 시스템의 EasyRSA 디렉토리 내에서 다음 명령을 실행하여 요청에 서명합니다.

cd ~/EasyRSA-3.0.5
./easyrsa sign-req client client1

 

 

 

요청이 신뢰할 수 있는 원본에서 왔는지 확인하라는 메시지가 표시됩니다. yes를 입력하고 Enter 키를 눌러 확인합니다.

CA 키가 암호로 보호되어 있으면 암호를 입력하라는 메시지가 표시됩니다. 확인되면 스크립트는 SSL 인증서를 생성하고 전체 경로를 인쇄합니다.

...
Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt

 

 

06. 그런 다음 서명된 인증서 클라이언트 1.crt 파일을 OpenVPN 서버로 다시 전송합니다. scp, rsync 또는 기타 보안 방법을 사용할 수 있습니다.

scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp

 

 

 

07. OpenVPN 서버에 로그인하고 클라이언트 1.crt 파일을 ~/openvpn-clients/files 디렉토리로 이동합니다.

mv /tmp/client1.crt ~/openvpn-clients/files

 

 

 

08. 마지막 단계는 gen_config를 사용하여 클라이언트 구성을 생성하는 것입니다.ssh 대본 ~/openvpn-clients 디렉토리로 전환하고 클라이언트 이름을 인수로 사용하여 스크립트를 실행합니다.

cd ~/openvpn-clients
./gen_config.sh client1

 

 

 

스크립트는 ~/client-configs/configs 디렉터리에 client1.ovpn이라는 파일을 생성합니다. 디렉터리를 나열하여 확인할 수 있습니다.

ls ~/openvpn-clients/configs

# client1.ovpn

 

 

이 때 클라이언트 구성이 생성됩니다. 이제 클라이언트로 사용할 장치로 구성 파일을 전송할 수 있습니다.

예를 들어 scp를 사용하여 구성 파일을 로컬 시스템으로 전송하려면 다음 명령을 실행해야 합니다.

scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/

 

 

 

클라이언트를 추가하려면 동일한 단계를 반복하십시오.

 

 

 

클라이언트 연결

리눅스

배포 또는 데스크톱 환경에서 OpenVPN 서버에 연결하기 위한 도구 또는 그래픽 사용자 인터페이스를 제공할 수 있습니다. 이 튜토리얼에서는 openvpn 도구를 사용하여 서버에 연결하는 방법을 보여 줍니다. 

Ubuntu 및 Debian에 OpenVPN 설치

sudo apt update
sudo apt install openvpn

 

 

CentOS 및 Fedora에 OpenVPN 설치

sudo yum install epel-release
sudo yum install openvpn

 

 

패키지가 설치되면 VPN 서버에 연결하려면 openvpn 명령을 사용하고 클라이언트 구성 파일을 지정하십시오.

sudo openvpn --config client1.ovpn

 

 

 

macOS

터널블릭은 OS X 및 MacOS에서 OpenVPN을 위한 무료 오픈 소스 그래픽 사용자 인터페이스입니다.

 

 

Windows

OpenVPN의 다운로드 페이지인 OpenVPN 응용 프로그램의 최신 빌드를 다운로드하여 설치하십시오.

.ovpn 파일을 OpenVPN 구성 폴더(\Users\<이름>\OpenVPN\Config 또는 \Program Files\OpenVPN\config)에 복사합니다. 

OpenVPN 응용 프로그램을 시작합니다.

OpenVPN 시스템 트레이 아이콘을 마우스 오른쪽 버튼으로 클릭하면 복사한 OpenVPN 구성 파일의 이름이 메뉴에 나열됩니다. 연결을 클릭합니다.

 

 

안드로이드 & iOS

OpenVPN에서 개발한 VPN 애플리케이션은 Android 및 iOS 모두에서 사용할 수 있습니다. 애플리케이션을 설치하고 클라이언트 .ovp 파일을 가져옵니다.

 

 

 

클라이언트 인증서 해지

인증서 해지란 서명된 인증서를 더 이상 OpenVPN 서버 액세스에 사용할 수 없도록 무효화하는 것을 의미합니다.

클라이언트 인증서를 해지하려면 다음 단계를 수행하십시오. 

01. CA 시스템에 로그인하고 EasyRSA 디렉토리로 전환합니다.

cd EasyRSA-3.0.5

 

 

 

02. 해지 인수를 사용하여 easyrsa 스크립트를 실행한 다음 해지할 클라이언트 이름을 실행합니다.

./easyrsa revoke client1

 

 

 

인증서를 해지할지 확인하는 메시지가 나타납니다. yes를 입력하고 Enter 키를 눌러 확인합니다.

# Please confirm you wish to revoke the certificate with the following subject:
#
# subject=
#     commonName                = client1
# 
# Type the word 'yes' to continue, or any other input to abort.
# Continue with revocation: yes
# ...

 

 

CA 키가 암호로 보호되어 있으면 암호를 입력하라는 메시지가 표시됩니다. 확인되면 스크립트가 인증서를 해지합니다.

# ...
# Revocation was successful. You must run gen-crl and upload a CRL to your
# infrastructure in order to prevent the revoked cert from being accepted.

 

 

03. gen-crl 옵션을 사용하여 CRL(인증서 해지 목록) 생성:

./easyrsa gen-crl

# An updated CRL has been created.
# CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem

 

 

04. CRL 파일을 OpenVPN 서버에 업로드합니다.

scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp

 

 

 

05. OpenVPN 서버 서버에 로그인하고 파일을 /etc/openvpn 디렉토리로 이동합니다.

sudo mv /tmp/crl.pem /etc/openvpn

 

 

 

06. OpenVPN 서버 구성 파일을 여십시오.

sudo nano /etc/openvpn/server1.conf

 

 

 

파일 끝에 다음 줄을 붙여넣습니다.

# /etc/openvpn/server1.conf

crl-verify crl.pem

 

 

파일을 저장한 후 닫습니다.

 

 

07. 해지 지시문을 적용하려면 OpenVPN 서비스를 재시작하십시오.

sudo systemctl restart openvpn@server1

 

 

 

이 때 클라이언트는 더 이상 해지된 인증서를 사용하여 OpenVPN 서버에 액세스할 수 없습니다.

추가 클라이언트 인증서를 취소해야 하는 경우 동일한 단계를 반복하십시오.

반응형