티스토리 뷰

이래저래 보안 강화를 위해 vpn을 써야할 일이 생겼다.

 

AWS에서 vpn서비스도 제공하고 있긴한데. 요금이 문제

 

인증을 받으려면 AD(액티브 디렉토리) 나 사설인증서 를 써야 하는데 둘다 월에 기본 400불 정도는 예상해야 했다.

 

한푼이라도 아껴야 하는 입장에서 어떤 대안이 있나 찾아보다 ec2에 openvpn을 설치해서 사용하기로 했다.

 

1. 용도: 사무실 외부에서 DB 관리 및 test 환경 접속용.

 

2. ec2 생성

인스턴스 유형은 가장 저렴한 t3a.micro - ubuntu 18.04 로 선택. (만약 free tier가 남아있다면 t2.micro 선택)

t3a.nano 도 있지만 이것저것 설치하고 나니 용량부족이 떠서 인스턴스 유형을 한등급 올린 상태.

설정시 보안그룹에서 inbound를 아래와 같이 설정. (1194 포트는 vpn 접속용, 22번 포트는 ec2 관리용)

ec2 생성 후 elastic ip 생성하고 ec2에 연결 (elastic ip 를 생성 후 연결하지 않으면 요금 발생)

e-ip 생성: aws 콘솔 메뉴: ec2 > 네트워크 및 보안 > 탄력적 IP > 탄력적 IP주소 할당

e-ip 연결: 작업 > 탄력적 ip 주소 연결

 

 

3. ec2 접속

putty로 접속하였는데 방법은 너무 많이 나와 있으므로 생략

 

4. 사용 image

https://github.com/kylemanna/docker-openvpn

 

kylemanna/docker-openvpn

🔒 OpenVPN server in a Docker container complete with an EasyRSA PKI CA - kylemanna/docker-openvpn

github.com

 

5. 설치 ( 초간단 )

sudo git clone https://github.com/kylemanna/docker-openvpn.git

도커 image를 받은 후 해당 폴더로 이동합니다.

cd docker-openvpn

도커 이미지를 빌드합니다. (마지막에 . 은 빼지 말고 넣어야 합니다.)

sudo docker build -t 이미지이름 .

그 다음으로 config 파일이나 key 가 저장될 디렉토리를 만들어 줍니다.

 

 

이제 이미지를 실행합니다.

sudo docker run -v $PWD/vpn-data:/etc/openvpn --rm 이미지이름 ovpn_genconfig -u udp://ec2인스턴스주소:1194


Processing PUSH Config: 'block-outside-dns'
Processing Route Config: '192.168.254.0/24'
Processing PUSH Config: 'dhcp-option DNS 8.8.8.8'
Processing PUSH Config: 'dhcp-option DNS 8.8.4.4'
Successfully generated config
Cleaning up before Exit ...

명령어 입력후 위에처럼 나오면 정상이며 'sudo docker ps' 명령을 통해 실행여부를 확인,

이제 접속에 사용할 private key를 생성합니다.

sudo docker run -v $PWD/vpn-data:/etc/openvpn --rm -it 이미지이름 ovpn_initpki


init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/pki
Generating a 2048 bit RSA private key
............................................................................+++
....+++
writing new private key to '/etc/openvpn/pki/private/ca.key.XXXXCFGIEm'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
...
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:g
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/pki/ca.crt
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
... # Wait a while
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
Check that the request matches the signature
...
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
An updated CRL has been created.
CRL file: /etc/openvpn/pki/crl.pem

중간에 private key 암호를 입력하는데 앞으로 중요하게 사용되므로 꼭 기억해야 합니다.

 

이제 vpn server 를 start합니다.

sudo docker run -v $PWD/vpn-data:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN 이미지이름

아직 vpn에 접속할 user를 만들지 않았으므로 user를 생성

sudo docker run -v $PWD/vpn-data:/etc/openvpn --rm -it 이미지이름 easyrsa build-client-full 유저이름 nopass



Generating a 2048 bit RSA private key
........................................................+++
..........................................................+++
writing new private key to '/etc/openvpn/pki/private/user1.key.XXXXeoGIJE'
-----
Using configuration from /usr/share/easy-rsa/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
...

nopass 옵션은 password를 입력하지 않는 옵션이며 필요한 경우 nopass 를 제외하고 실행

 

user에게 줄 uopen vpn 설정 파일을 생성

sudo docker run -v $PWD/vpn-data:/etc/openvpn --rm 이미지명 ovpn_getclient 유저명 > 유저명.ovpn

이제 ftp등을 이용해 ovpn 파일을 다운 받은 뒤 user에게 전달하여 open vpn client 에서 불러오기로 사용한다.

** 참고 AWS EC2 FTP 접속 방법 **

링크 확인

 

접속 후 제대로 변경되었는지 확인하려면 윈도우 comman 창에서 아래와 같이 입력

curl ifconfig.co

vpn에 접속했을때는 e-ip 주소를 반환하며, 아닐 경우 현재 주소를 반환함.

 

이제 DB 보안 그룹에 e-ip 주소를 추가하고 테스트 하면 vpn 설정 완료.

 

6. (기타) user 삭제시 명령

sudo docker run -v $PWD/vpn-data:/etc/openvpn --rm -it 이미지명 ovpn_revokeclient 유저명

끝에 remove 를 추가하는 경우 crt 파일과 key도 함께 제거된다.

 

7. (기타) split tunnel 사용

설치때 사용한 기본 config는 접속한 클라이언트의 모든 트래픽을 vpn 네트워크를 통하게 하므로, AWS 내부 자원에 접근하기 위한 목적을 달성하면서 트래픽도 아낄려면 VPC의 아이피 대역을 config에 추가한다.

AWS 콘솔에서 VPC 의 아이피 대역을 확인 한 후 아래와 같이 적어준다.

sudo docker run -v $PWD/vpn-data:/etc/openvpn --rm -it kylemanna/openvpn vim /etc/openvpn/openvpn.conf


# push "redirect-gateway def1" 은 삭제

push "route VPC-ip대역(예.10.20.0.0) 255.255.0.0 vpn_gateway" 추가

 

댓글