리눅스

우분투 openvpn 설치 easy-rsa 설정 openvpn 인증서 초기화

조원태 2016. 7. 3. 16:40
반응형

우분투 openvpn 설치 easy-rsa 설정


우분투 openvpn 인증서 방식


사내망인 테스트서버에 openvpn을 설치 하여 외부에서 접근 해보자


사내 PC 한대에 팀뷰어나 데스크탑 원격제어를 사용하여 사내 서버에 접속하는 경우가 있습니다. 하지만 이것 또 한 정답은 아닐 수 있습니다.


vpn을 사용하여 외부에서 사내망에 접근 하는 방법



apt install openvpn  엔터



openvpn이 설치가 완료 되면 easy-rsa를 설치하면 됩니다.  

인증서를 쉽게 생성하는 툴입니다.


apt install easy-rsa  엔터




easy-rsa 경로와 필요한 파일은 아래와 같습니다.


easy-rsa 스크립트들을 /etc/openvpn/cert/에 복사합니다.


mkdir /etc/openvpn/cert

cp /usr/share/easy-rsa/* /etc/openvpn/cert/



/etc/openvpn/cert 폴더로 이동합니다.

cd /etc/openvpn/cert


생성할 인증서의 환경변수는 vars 에 설정되어 있습니다.

vars 설정 파일을 수정합니다.



export KEY_COUNTRY="US"

export KEY_PROVINCE="CA"

export KEY_CITY="SanFrancisco"

export KEY_ORG="Fort-Funston"

export KEY_EMAIL="me@myhost.mydomain"

export KEY_OU="MyOrganizationalUnit"

위 항목들을 각자 자신의 설정에 맞게 수정하도록 합니다.


수정한 환경변수를 easy-rsa 의 각 스크립트에서 사용될 수 있도록 export 시키기 위해, source 명령어를 이용하여 실행시킵니다.


source ./vars


이후 각 key 들이 생성될 keys 디렉토리가 생성됩니다. (디렉토리 경로를 변경하고 싶다면, vars 설정 파일의 KEY_DIR 항목을 적절하게 수정합니다.)


인증서 생성시 사용할 정보들을 초기화 하고, keys 디렉토리를 정리하기 위해 아래 명령을 수행합니다.


./clean-all




인증서의 cert chain을 만들기 위해, 우선 CA인증서를 생성합니다. 

개인적인 목적으로 사용할 예정이므로, Self sign으로 인증서를 생성합니다. 

직접 CA(인증기관)으로부터 인증서를 발급받으실 분은, 별도의 인증기관으로부터 인증서를 발급받아 사용하시면 됩니다.

./build-ca



vars 설정파일에 적절하게 설정값을 입력했다면, 기본값들이 vars에 설정한 값들로 처리됩니다. 기본값을 그대로 사용하길 원하면, ENTER를 입력하고, 변경할 내용이 있다면, 해당 내용을 기입 후 Enter를 입력하고, 변경할 내용이 있다면, 해당 내용을 기입 후 Enter를 입력하여, 인증서를 생성합니다.



Server인증서 생성하기


./build-key-server server



Client Key를 생성하기


Client Key는 아이디/암호 없이 서버에 바로 저복할 수 있는 인증 Key가 됩니다.

배포시 주의해야 합니다.


./build-key clientName


Diffie Hellman 파라메터 생성하기


Diffie Hellman은 RSA와 마찬가지로 키를 교환하기 위한 방법중 하나 입니다. 

매우 큰 소수를 생성하는 과정을 거쳐 파라메터를 생성합니다.


./build-dh

이제 keys 디렉토리에 아래와 같은 파일들이 생성됩니다. 

ca.crt clientName.crt clientName.key server.crt server.key

ca.key clientName.csr dh2048.pem server.csr


각 *.key파일들은 인증서를 생성할 수 있는 key store들로써, 외부에 노출되지 않도록 보안에 신경을 써야 합니다.


Server Config 파일



cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .


gunzip ./server.conf.gz


ls로 목록을 확인해보면 server.conf 파일이 생성된것을 확인 할 수 있습니다.


vi ./server.conf



openvpn의 포트를 지정합니다. 기본 포트는 1194 포트입니다.


# Which TCP/UDP port should OpenVPN listen on? # If you want to run multiple OpenVPN instances # on the same machine, use a different port # number for each one. You will need to # open up this port on your firewall. port 1194


사용한 통신 프로토콜을 설정합니다.. 무엇을 사용해도 괜찮지만, tcp 는 신뢰성이 좀더 높고, udp 는 속도가 좀더 빠릅니다.

# TCP or UDP server?
proto tcp
;proto udp

Cert 경로를 정해줍니다.
기본적으로 파일 이름만 적을경우, server.conf 와 같은 경로에 위치해야 합니다.

# Any X509 key management system can be used. # OpenVPN can also use a PKCS #12 formatted key file # (see "pkcs12" directive in man page). ca ca.crt cert server.crt key server.key # This file should be kept secret

keys 와 같은 특정 디렉토리에 인증서를 위치시킬경우 아래와 같이 수정해야 합니다.

ca /etc/openvpn/cert/keys/ca.crt

diffie hellman 파일의 위치를 지정해줍니다.

# Diffie hellman parameters. # Generate your own with: # openssl dhparam -out dh1024.pem 1024 # Substitute 2048 for 1024 if you are using # 2048 bit keys. dh dh1024.pem

서버의 서브넷을 설정

# Configure server mode and supply a VPN subnet # for OpenVPN to draw client addresses from. # The server will take 10.8.0.1 for itself, # the rest will be made available to clients. # Each client will be able to reach the server # on 10.8.0.1. Comment this line out if you are # ethernet bridging. See the man page for more info. server 10.8.0.0 255.255.255.0

route 설정

# Push routes to the client to allow it # to reach other private subnets behind # the server. Remember that these # private subnets will also need # to know to route the OpenVPN client # address pool (10.8.0.0/255.255.255.0) # back to the OpenVPN server. ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" 서버의 서브넷에 접근하고자 하면, 아래를 추가한다. push "route 10.8.0.0 255.255.255.0" push "route 192.168.100.0 255.255.255.0"

iptable 추가

이제 서버에서 Open VPN 을 사용하기 위한 네트워크 환경을 설정합니다.
아래의 명령어를 shell에 입력하여 서버의 방화벽을 설정합니다.

iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT

iptable 확인
iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere

iptable 로 아래의 명령어로 파일에 저장해둘 수 있습니다.
mkdir /etc/iptable iptables-save > /etc/iptable/iptables.rules

iptable 영구 저장
아래의 파일로 iptable 을 영구적으로 적용할 수 있습니다.
vi /etc/network/interface <===========

아래 명령어 추가

pre-up iptables-restore /etc/iptable/iptables.rules


서버측의 다른 서버에 접속시 해당 서버에서 아래 명령어 추가 (VPN 사설 서버 ip 를 192.168.1.249로 가정)

route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.1.249


영구 저장 (장치를 올린 후 라우트 설정)


post-up route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.100.249

echo 1 > /proc/sys/net/ipv4/ip_forward

vi /etc/sysctl.conf # Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1


Windows
윈도우의 경우 아래의 명령어로 라우트 테이블을 추가할 수 있습니다.

메스커레이드를 통해 위 iptable 을 추가하지 않아도 한번에 처리가 가능한 방법도 있습니다.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


반응형