- 목표 : 외부에서 도메인으로 접근하여, 내부 네트워크에 있는 서버에 요청하여 결과값을 요청자가 확인할 수 있도록 한다.



- 환경

  1. EC2 (t2.nano)

OS : Amazon linux

           openVPN Client

  1. Local Server

OS: CentOS 6.9

           openVPN server


  1. 공통

openVPN : 2.4.6

easy-rsa: 3.0.3  (openssl 기반 소프트웨어)

nginX : 1.12.1



 * 설정순서


1. 내부 네트워크에 있는 서버에 openVPN, easy-rsa를 설치 및 구성

2. EC2에 openVPN 설치 및 구성

3. EC2에 프록시 서버 역할을 할 nginX 설치 및 ssl 구성

4. 사내 방화벽(FG-60E)에서 내부서버로 포트포워딩 설정

5. iptables 설정

6. openVPN 연결 확인






  1. 사내에 있는 내부 네트워크 서버에 openVPN, easy-rsa를 설치 및 구성


-설치 :

openVPN이 설치가 되어 있지 않을 경우 아래의 명령어로 설치를 해준다.

# yum install openvpn


설치 후에 , easy-rsa도 설치해준다. (easy-rsa는 버전에 따라 설정 방법이 상이합니다. 여기서는 3.03 버전 사용)

# yum install easy-rsa -y



easy-rsa를  사용하기 쉽도록 설치된 디렉토리를 통째로 openvpn이 있는 디렉토리로 복사해줍니다. (심볼릭 링크로 연결해서 사용해도 됨)

#  cp -rf /usr/share/easy-rsa/3.0/* /etc/openvpn/easy-rsa


그 후에, openvpn 디렉토리 내에 인증서 정보를 저장할 디렉토리를 생성합니다. (루트 CA, Certification, Private Key)

#  mkdir /etc/openvpn/keys



easy-rsa를 이용하여 인증기관, 인증서, 비밀키를 만듭니다.

easyrsa의 init-pki 옵션을 수행하게 되면, 최초 실행시에는 /pki 디렉토리가 생성이 됩니다. 만약 기존에 생성되어 있던 인증기관/인증서가 있으면  모두를 초기화 합니다.

#  cd /etc/openvpn/easy-rsa

# ./easyrsa init-pki



그 다음으로 인증기관(CA)를 생성합니다.

#  ./easyrsa build-ca [nopass]

[root]# ./easyrsa build-ca

Generating a 2048 bit RSA private key

..+++

............................................+++

writing new private key to '/etc/openvpn/easy-rsa/pki/private/ca.key.XKsu7kmTcF'

Enter PEM pass phrase: [암호화 키입력]

Verifying - Enter PEM pass phrase: [암호화 키입력 확인]

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Common Name (eg: your user, host, or server name) [Easy-RSA CA]: imageCA


CA creation complete and you may now import and sign cert requests.

Your new CA certificate file for publishing is at:

/usr/share/easy-rsa/3.0.3/pki/ca.crt



./easyrsa build-ca 를 실행하게 되면 위와 같이 PEM(Private-enhanced Electronic Mail) pass phrase를 입력을 하라고 뜨고, 확인차 한번 더 입력 후 CA의 이름을 정하라고 합니다.


인증서를 이용하여 openvpn을 기동하거나, 확인시에 필요한 비밀번호 정도 입니다.

그 이후 Common Name을 입력하라는 부분에는 인증기관 이름을 입력해주면 됩니다. 위의 경우엔 imageCA라고 하였습니다.

(build-ca 뒤에 nopass 라는 옵션을 추가해서 실행하게 되면 비밀번호 설정없이 진행됩니다.)



그리고 아래의 명령어를 이용하여 서버 인증서를 만듭니다.

# ./easyrsa gen-req image.server [nopass]


..............+++

............+++

writing new private key to '/etc/openvpn/easy-rsa/pki/private/image.server.key.M8081SQgT7'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Common Name (eg: your user, host, or server name) [image.server]:


Keypair and certificate request completed. Your files are:

req: /etc/openvpn/easy-rsa/pki/reqs/image.server.req

key: /etc/openvpn/easy-rsa/pki/private/image.server.key

./easy-rsa gen-req를 이용하여 서버 인증서를 생성하는데 여기서도 nopass는 옵션입니다.

위의 경로대로 req와 priavate key가 생성되었습니다.



만들어진 인증서를 확인하기 위해서는  show-req 옵션으로 확인이 가능합니다. 등록된 인증서의 정보를 볼수 있습니다.

#  ./easyrsa show-req image.server



이제 인증서에 서명을 하게되면 인증서 발급은 끝이 납니다.

#  ./easyrsa sign-req server image.server


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 3650 days:


subject=

   commonName                = image.server



Type the word 'yes' to continue, or any other input to abort.

 Confirm request details: yes

Using configuration from ./openssl-1.0.cnf

Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

commonName            :PRINTABLE:'test.server'

Certificate is to be certified until Jul  2 06:04:31 2028 GMT (3650 days)


Write out database with 1 new entries

Data Base Updated


Certificate created at: /etc/openvpn/easy-rsa/pki/issued/image.server.crt

진행을 하려면 ‘yes’를 입력하라고 나오는 부분을 넘어가면 이전에 생성한 CA에 대한 비밀번호를 입력하라고 나오는데, 입력을 하게 되면 crt파일이 생성되게 된다.


이렇게 생성된 crt, ca, key 파일들을 /etc/openvpn/keys에 복사합니다.

#  cp /etc/openvpn/easy-rsa/pki/ca.crt  /etc/openvpn/keys/

#  cp /etc/openvpn/easy-rsa/pki/issued/image.server.crt  /etc/openvpn/keys/

#  cp /etc/openvpn/easy-rsa/pki/private/image.server.key  /etc/openvpn/keys/


이후에 openvpn 설정에 필요한 기타 파일들을 생성해야 합니다.

gen crl을 수행하면 ca.crt의 PEM phrase를 입력하면 crl이 생성됩니다. 생성 후 /etc/openvpn/keys/에 복사해줍니다.

#  ./easyrsa gen-crl

# cp ./pki/crl.pem /etc/openvpn/keys/crl.pem


/etc/openvpn/keys 폴더로 이동하여 DH parameter 파일도 생성합니다.

#  cd /etc/openvpn/keys

# openssl dhparam -out dh2048.pem 2048


/etc/openvpn/keys 폴더에서 TLS authentication 파일도 생성합니다.

#  openvpn --genkey --secret image.tlsauth


openvpn 서버에서 생성해야되는 파일들은 전부 하였습니다. 생성한 서버 파일중에 ca.crt 파일과 image.tlsauth 파일은 클라이언트의 /etc/openvpn/keys에 옮깁니다.



-구성 :

openVPN을 실행시킬때, 입력한 설정파일을 읽어서 작동이 되게 됩니다.

image_server.conf라는 파일을 만들어서 아래의 내용들을 입력합니다.


#  vi /etc/openvpn/image_server.conf


--------------------- image_server.conf -------------------------------------

# server

#proto udp | openVPN에서 udp 를 사용하겠다는 뜻

proto udp


#openVPN에서 사용할 포트

port 1194


# TLS프로토콜에서 역할이 서버인지 클라이언트인지 나타내는 설정

tls-server


#인증서 파일 경로 입력(비밀키,인증서, 인증기관)

key /etc/openvpn/keys/image.server.key

cert /etc/openvpn/keys/image.server.crt

ca /etc/openvpn/keys/ca.crt


# Diffie Hellman 알고리즘에 사용되는 prime number

dh /etc/openvpn/keys/dh2048.pem


#사용하지 않아도 되는 항목, 목적을 확실히 해주기 위해 사용하는것이 권장되는 설정

remote-cert-eku "TLS Web Client Authentication"


#암호화 방식

cipher AES-256-CBC


# TLS 인증간에 TLS패킷을 확인하는 파일, 받은 패킷이 이 파일과 일치하지 않으면 패킷을 버림

tls-crypt /etc/openvpn/keys/image.tlsauth


# tun방식인지 tun 방식인지

dev tun


#가상망 네트워크

topology subnet

server 10.8.0.0 255.255.255.0


#클라이언트가 192.168.0.0 255.255.255.0 네트워크 대역으로 갈 수 있음을 나타냄

push "route 192.168.0.0 255.255.255.0"



여기까지의 설정을 한 다음에 두번째 단계에 넘어갑니다. (이어서 ...)

+ Recent posts