우분투 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 추가
아래의 명령어를 shell에 입력하여 서버의 방화벽을 설정합니다.
아래의 파일로 iptable 을 영구적으로 적용할 수 있습니다.
아래 명령어 추가
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
'리눅스' 카테고리의 다른 글
cvs commit: sticky tag is not a branch cvs 사용법 (0) | 2016.07.22 |
---|---|
우분투 openvpn id password 기반 인증 방식 vpn 클라이언트 다운로드 (0) | 2016.07.05 |
리눅스 한글 Locale LANG=ko_KR.UTF-8 (0) | 2016.07.02 |
우분투 방화벽 설정 (0) | 2016.07.02 |
리눅스 cvs 계정 만들기 (0) | 2016.06.29 |