티스토리 뷰
Open VPN (Virtual Private Network)
어플리케이션 수준에서 동작 구축이 쉬움
별도의 암호화 모듈 필요없음 (openssl 쓰는듯함)
분리된 두 네트워크를 동일 네트워크에 있는것 처럼 통합 가능
vpn 이해를 위한 개념도
VPN 구성 예
서버에 접근하기 위해 VPN 서버를 GATEWAY 라 생각하고 통신하는 형태
파란색 화살표 구간망은 암호화 되어 안전을 확보할수 있다
2개의 네트웍을 묶어서 서로 간에 암호화 통신하게 함 (큰 기업들 경우?) 인프라넷 개념인거 같기도 함
가장 단순한 유형으로 최종 서버단에 VPN을 어플로 셋팅하여 클라이언트와 암호화 통신하는 형태
서버 내부에 사설 아이피가 하나 셋팅되므로 사설로 통신시 암호화 통신이 가능한 형태
어떤 경우는 중국 - 한국 접속이 좋지 않을때 한국 - 중국 간 속도가 제일 잘 나오는 구간에 두고 VPN을 사용하기도 함.
중국 - VPN - 한국 인데 문제는 중국과 한국 속도가 가장 잘 나오는 구간을 찾는게 관건일듯 함.
openssl 설치
[root@localhost logs]# yum install openssl openssl-devel
LZO 설치 (암축 및 암호화할때 필요한듯 함)
이건 머 YUM으로 안되네 rpm구해서 깔던가 소스설치해야한다...
[root@localhost lzo-2.04]# ./configure
[root@localhost lzo-2.04]# make
[root@localhost lzo-2.04]# make install
openvpn 설치
[root@localhost openvpn-2.1.4]# ./configure --prefix=/usr/local/openvpn
[root@localhost openvpn-2.1.4]# make
[root@localhost openvpn-2.1.4]# make install
OpenVPN 내에 인증서 및 키 생성을 쉽게 해주는 스크립트가 있다는데... 소스설치 했을경우는 원본소스쪽에
openvpn-2.1.4/easy-rsa 여기에 있다...
내 서버는 /usr/local/src/openssl-package/openvpn-2.1.4/easy-rsa/2.0/ 여기에 있군... (아마 2.X 대니깐 2.0 이겠지)
openssl KEY 생성이 아니므로 대충 적어도 되지 않을까 싶긴 한데???
export KEY_COUNTRY="KR"
export KEY_PROVINCE="NA"
export KEY_CITY="POHANG"
export KEY_ORG="kensei.co.kr"
export KEY_EMAIL="takakocap@kensei.co.kr"
환경변수를 시스템에 저장한다나??? (그냥 하라니깐 한다) 마침표 2개인데 2개 사이에 빈칸 뛰어야 함
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/src/openssl-package/openvpn-2.1.4/easy-rsa/2.0/keys
기존 인증서 관련 key 값 전체 삭제 (위 환경변수를 시스템에 저장한걸 삭제 할때 쓰는듯함)
[root@localhost 2.0]#
ROOT CA 생성 (저 위에 환경 변수를 시스템에 저장해서 그런지) 미리 다 되어 있어서 엔터만 입력하거나 내용 입력
인증서는 기본이 유효기간 365일임 (1년) 입니다. 빌드카 하기전에 아래 명령어 한번 처서 동기화 해주고 하자
/usr/bin/rdate -s time.bora.net > /dev/null; clock -r > /dev/null; clock -w > /dev/null
1년을 변경할려면 build_ca 내용중 openssl req -days 360 요 구문을 수정하면 될듯 하다.
Country Name (2 letter code) [KR]:KR
State or Province Name (full name) [NA]:POHANG
Locality Name (eg, city) [POHANG]:JANGSUNG
Organization Name (eg, company) [kensei.co.kr]:kensei.co.kr
Organizational Unit Name (eg, section) []:smileserv
Common Name (eg, your name or your server's hostname) [kensei.co.kr CA]:kensei.co.kr
Name []:kensei
다 처 넣고 나면 keys/ 디렉토리 안에 보면 생성된듯 하다...
-rw------- 1 root root 891 1¿ù 26 00:27 ca.key
-rw-r--r-- 1 root root 0 1¿ù 26 00:26 index.txt
-rw-r--r-- 1 root root 3 1¿ù 26 00:26 serial
서버 Key 생성 (VPN 서버에 필요한듯) 대충 암호설정하고 대충 누르면 된다
Common Name (eg, your name or your server's hostname) [server]:server
keys/ 디렉토리안에 생성된듯 하다 (확장자 crt 랑 key는 서버에서만 이용되니깐 유출안되게 한다)
-rw-r--r-- 1 root root 4164 1¿ù 26 00:39 server.crt
-rw-r--r-- 1 root root 790 1¿ù 26 00:37 server.csr
-rw------- 1 root root 887 1¿ù 26 00:37 server.key
클라이언트 Key 생성 (VPN 서버에 접속해서 사용할 애들이 쓸거 같음)
Common Name (eg, your name or your server's hostname) [client]:client
역시 keys/ 디렉토리 안에 생성된듯 하다 (애내들은 패스워드 입력할때 클라이언트니깐 패스워드 주지 않았다)
crt 랑 key 확장자는 클라이언트들에게 배포하라네..ㅋ
-rw-r--r-- 1 root root 4054 1¿ù 26 00:42 client.crt
-rw-r--r-- 1 root root 765 1¿ù 26 00:42 client.csr
-rw------- 1 root root 887 1¿ù 26 00:42 client.key
Diff Hellman 파라메터 생성 (암호화에 이용)
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.............................................+..................
keys/ 디렉토리 안에 아래 파일 생성 (서버에만 쓴다네)
-rw-r--r-- 1 root root 245 1¿ù 26 00:47 dh1024.pem
클라이언트 KEY들 모아두기
[root@localhost keys]# mkdir /usr/local/openvpn/keys/client
[root@localhost keys]# cp ca.crt client.* /usr/local/openvpn/keys/client/
[root@localhost keys]# chmod 700 /usr/local/openvpn/keys/client/
[root@localhost keys]# zip client-keys.zip client/*
서버 KEY 도 모아보았다
[root@localhost keys]# cp /openvpn-2.1.4/easy-rsa/2.0/keys/dh1024.pem /usr/local/openvpn/keys/server/
[root@localhost keys]# cp /openvpn-2.1.4/easy-rsa/2.0/keys/ca.* /usr/local/openvpn/keys/server/
Open VPN 샘플디폴트 설정파일
대충 찾기 쉽게 복사해보았다...
[root@localhost sbin]# cp /openvpn-2.1.4/sample-config-files/server.conf /usr/local/openvpn/
open vpn 설정 예제
port 1194
proto udp
ca /usr/local/openvpn/keys/server/ca.crt
cert /usr/local/openvpn/keys/server/server.crt
key /usr/local/openvpn/keys/server/server.key # This file should be kept secret 서버의 개인키라 노출 되면 안됨
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /usr/local/openvpn/ipp.txt
# VPN 모든 클라이언트들은 VPN 서버를 거쳐서 통신이 이루어짐
# 한마디로 클라이언트들은 내외부 통신 모두가 VPN 거쳐서 통신하게 된다는 뜻인듯...
push "route 119.194.229.0 255.255.255.0"
push "redirect-gateway def1"
push "dhcp-option DNS 168.126.63.1"
push "dhcp-option DNS 168.126.63.2"
client-to-client
duplicate-cn
comp-lzo
max-clients 10
persist-tun
plugin /usr/local/openvpn/openvpn-auth-pam.so login # 실 계정 인증 추가
open vpn client key 와 ID & PASSWD 인증을 같이 사용하기 위해서...
make 하면
openvpn-auth-pam.so 라는 파일 생성된다
[root@localhost auth-pam]# mv openvpn-auth-pam.so /usr/local/openvpn/
위에 server.conf 에 아래와 같이 한줄 추가해주면 된다.
plugin /usr/local/openvpn/openvpn-auth-pam.so login
openvpn에서 모든 클라이언트들이 VPN을 타고 통신을 할려면
/etc/sysctl.conf 에 net.ipv4.ip_forward = 1 이 되어 있어야 함
# nat
iptables 상에는 -A POSTROUTING -s 10.1.1.0/255.255.255.0 -i eth0 -j MASQUERADE 요 룰이 있어야 함
-s 10.1.1.0 은 클라이언트들 대역임
일단 세부적인 셋팅은 끝난거 같고....
소스설치를 해서 script 를 찾아봐야 하는데 openvpn 원본소스파일에 script 를 제공하긴 한데...
처음부터 RPM으로 셋팅했으면 바로 적용해 쓸수 있었을듯 하다....
그냥 명령어로 실행해도 될듯 한데...
일단 서버 셋팅이 끝났으니 우리 클라이언트들은 거의 윈도우쓸것이다 리눅스 쓸수도 있겠지만....
설정파일은 샘플꺼 복사해서 수정해서 쓴다.
C:\Program Files\OpenVPN\sample-config\client.ovpn (샘플)
C:\Program Files\OpenVPN\config\client.ovpn (실제 적용되는 설정파일)
C:\Program Files\OpenVPN\config\ (여기에 client.key 등 위에서 만든거 파일 3개 복사한다 클라이언트 용으로)
client.ovpn 예제 (머 대충 위에 서버랑 매칭되면 되는듯 하다.)
remote xxx.110.xxx.88 1194
persist-tun
cert client.crt
key client.key
auth-user-pass
윈도우즈에서 vpn 접속이 잘 안될때 windows7의 경우 openvpn 실행파일을 관리자 권한으로 실행하면 된다.
vpn 접속시 모든 접속은 VPN 서버를 통해서 들어가고 나오는것이 확인되면 성공이다
openvpn 설정 예제 (디지문)
### OpenVPN Server Config ### port 60000 # vpn 접속 포트 proto udp # vpn 사용 프로토콜(udp 권장) dev tun # vpn 장치 타입 선택 : tun/tap ca ca.crt # 인증서 파일명 cert server.crt # 인증서 파일명 key server.key # 인증서 파일명 (주의 : 보안 철저) dh dh1024.pem ifconfig 10.0.0.1 255.255.255.0 server 10.0.0.0 255.255.255.0 # 사설망 IP 대역 정의 ifconfig-pool-persist ipp.txt # IP Pool 리스트 현황 로그파일 client-to-client # 기본적으로 VPN에 연결된 서버와 클라이언트 간에만 통신할 수 있지만 VPN에 접속한 클라이언트끼리도 통신할 수 있도록 허용할지 결정 duplicate-cn # client 인증서 하나로 다수 PC 사용 지원 keepalive 10 120 comp-lzo # LZO 압축 모듈 이용 max-clients 100 # 서버에서 동시에 접속을 받아들일 클라이언트 개수를 지정한다. 별도로 지정하지 않으면 1024가 기본값 persist-key persist-tun status openvpn-status # 상태 로그 파일명 verb 3 # Verbose 레벨 정의 plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login push "dhcp-option DNS 168.126.63.1" # VPN 사설망 할당 시, 1차 DNS 자동 정의 ;push "route xx.180.xx.0 255.255.255.224" # NAT이용 시, Route 대역 정의 ;push "redirect-gateway def1" # NAT이용 시, VPN 서버를 통해, 외부 인터넷과 통신 지원 |
openvpn 참고 URL
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/VPN/OpenVPN
'Security' 카테고리의 다른 글
mod_security 문법 예제들... (0) | 2015.06.12 |
---|---|
리눅스 보안 설정 스크립트 (0) | 2015.06.12 |
edian firewall (0) | 2015.06.12 |
SNORT SNARF (0) | 2015.06.11 |
snort 설치 (Centos6) (0) | 2015.06.11 |
- Total
- Today
- Yesterday
- yum
- glusterfs
- SSL
- 인증서
- mariadb
- mod_security
- HAProxy
- iptables
- centOS7
- 리눅스
- Apache
- pptp
- IPSEC
- 베이어다이나믹
- centos8
- NGINX
- ntp
- softether
- GeoIP
- gitlab
- galera
- kvm
- cURL
- MySQL
- WAF
- L2TP
- php
- ssh
- OpenVPN
- virtualbox
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |