일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 2FA
- Nodejs
- 인증
- 앱스토어
- 앱리소스
- openssl
- otpkey
- MSYS2
- albumbook
- 안드로이드
- OSX
- SwiftUI
- 애플
- MYSQL
- css
- FIDO2
- OTP
- apple
- WebAuthn
- Xcode
- fido
- appres
- SSL
- Android
- MFA
- kmip
- git
- SWIFT
- SSH
- 앨범북
- Today
- Total
인디노트
OpenVPN on CentOS 7 - 퍼옴 본문
OpenVPN on CentOS 7
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/VPN/OpenVPN
위의 링크를 참고하여 CentOS7 에서 OpenVPN 설치 및 설정했습니다.
준비사항
- CentOS7
- 리눅스 관리를 위한 최소한의 설정
- Epel (Extra Package for Enterprise Linux)
OpenVPN 은 기본 레포지토리에 없으므로 epel 을 추가 후 설치를 진행해야 한다.
# yum install epel-release
OpenVPN 설치
OpenVPN 과 키페어 생성을 위한 Easy-rsa 를 설치한다.
# yum install openvpn esay-rsa
OpenVPN 설정
OpenVPN 설정 파일 저장을 위한 디렉토리를 생성한다.
앞으로 진행되는 모든 설정, 키, 인증서 파일이 아래 디렉토리에 저장된다.
# mkdir /etc/openvpn
OpenVPN 의 설정 예제 파일은 문서 디렉토리에 존재하며, OpenVPN 서버 설정을 위한 “server.conf” 파일을 시작 위치에 복사한다.
# cp /usr/share/doc/openvpn-*/sample-config-files/server.conf /etc/openvpn
복사한 설정 파일을 열어서 몇가지 수정을 한다.
# vi /etc/openvpn/server.conf
.....파일내용
; vpn 에서 사용할 프로토콜
proto udp
; 사용할 가상 인터페이스 타입
dev tun
; 서버에서 사용할 root 인증서, 인증서, 키 파일 경로
ca ca.crt
cert server.crt
key server.key
; diffie hellman 암호화 길이
dh dh2048.pem
; vpn에서 사용할 ip 주소 및 서브넷
server 10.8.0.0 255.255.255.0
; 서버 측 다른 사설 서브넷으로 접근하는 것을 허용하기 위해
; 클라이언트에 라우팅을 push 한다.
push "route 10.8.0.0 255.255.255.0"
; OpenVPN의 모든 트래픽을 리다이렉트하도록 클라이언트에게 알려준다.
;push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 168.126.63.1"
push "dhcp-option DNS 8.8.8.8"
; vpn 클라이언트는 오직 서버만을 인식할 수 있다.
; 아래 주석을 해제하면 클라이언트 들끼리 서로를 인식할 수 있다.
;client-to-client
; OpenVPN 데몬의 권한을 nobody 로 설정한다.
user nobody
group nobody
사용하는 server.conf
port 1194
proto udp
dev tun
# auth
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
# vpn network
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
;push “redirect-gateway def1 bypass-dhcp”
push “route 192.168.56.0 255.255.255.0”
;push “dhcp-option DNS 168.126.63.1”
;push “dhcp-option DNS 8.8.8.8”
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
verb 3
인증서 및 키 생성
서버 설정이 완료됐으면, 이제 vpn 연결에서 사용할 키와 인증서를 생성해야 한다.
easy-rsa 는 이 키와 인증서를 생성하기 위한 스크립트를 제공하고 있다.
우선 키 저장을 위한 디렉토리를 생성한다.
# mkdir -p /etc/openvpn/esay-rsa/keys
키와 인증서를 생성하는 스크립트를 복사한다
# cp -rf /usr/share/esay-rsa/2.0/* /etc/openvpn/esay-rsa
키 생성 시 매번 정보를 입력해야 하는데 vars 파일을 수정하여 기본 값을 설정할 수 있다.
# vi /etc/openvpn/esay-rsa/vars
... 파일 내용
... KEY_ 로 시작하는 값을 변경할 것이다.
export KEY_COUNTRY="KR"
export KEY_PROVINCE=""
export CITY="Seoul"
export ORG="TEST"
export KEY_EMAIL="test@gmail.com"
export KEY_OU="TEST"
export KEY_NAME="server"
export KEY_CN="test.example.co.kr"
openssl 버전을 인식하지 못해서 설정이 로딩되지 못하는 것을 막기 위해 openssl 설정파일에서 버전을 제거한다.
# cp /etc/openvpn/esay-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
키와 인증서 생성을 시작하기 위해서 esay-rsa 디렉토리로 이동하고 새로운 “KEY_” 환경 변수 값들을 source 명령을 사용해서 적용한다.
# cd /etc/openvpn/esay-rsa
# source ./vars
기존 키와 인증서를 정리한다. 모든 키와 인증서가 지워지므로 주의..
# ./clean-all
root 인증서를 빌드할 때 vars 파일에 있는 모든 정보를 입력하도록 물어볼 것이다. 하지만 이미 기본값이 설정되어 있기 때문에 엔터만 누르면 된다.
# ./build-ca
다음으로 서버에서 사용할 서버 키와 인증서를 생성. 다시 한 번 질문하고 엔터를 누를 것이다. 마지막에 “Y” 를 누르면 변경 사항이 적용된다.
# ./build-key-server server
diffie-hellman 키 교환 파일을 생성한다. 아래 명령을 수행하는데 1–2분의 시간이 소요된다.
# ./build-dh
서버 키와 인증서 준비가 완료됐다. 생성된 파일을 OpenVPN 디렉토리로 복사한다.
# cd /etc/openvpn/esay-rsa/keys
# ls -lah
total 60K
drwx------ 2 root root 4.0K Dec 22 08:53 .
drwxr-xr-x 3 root root 4.0K Dec 22 08:51 ..
-rw-r--r-- 1 root root 5.4K Dec 22 08:53 01.pem
-rw-r--r-- 1 root root 1.8K Dec 22 08:51 ca.crt
-rw------- 1 root root 1.7K Dec 22 08:51 ca.key
-rw-r--r-- 1 root root 424 Dec 22 08:53 dh2048.pem
-rw-r--r-- 1 root root 133 Dec 22 08:53 index.txt
-rw-r--r-- 1 root root 21 Dec 22 08:53 index.txt.attr
-rw-r--r-- 1 root root 0 Dec 22 08:51 index.txt.old
-rw-r--r-- 1 root root 3 Dec 22 08:53 serial
-rw-r--r-- 1 root root 3 Dec 22 08:51 serial.old
-rw-r--r-- 1 root root 5.4K Dec 22 08:53 server.crt
-rw-r--r-- 1 root root 1.1K Dec 22 08:53 server.csr
-rw------- 1 root root 1.7K Dec 22 08:53 server.key
# cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
마지막으로 클라이언트에서 사용할 키와 인증서를 생성한다.
각각의 클라이언트마다 다른 키와 인증서를 생성해야 하며, 보안상으로도 그게 좋다.
client_name 은 유일한 이름이여야한다.
# cd /etc/openvpn/esay-rsa
# ./build-key client_name
VPN 을 위한 CentOS 설정
CentOS7 에서 새로운 방화벽인 firewalld 보다 iptables 를 사용해서 라우팅을 설정할 것이다.
iptables 서비스가 설치되어 있는지와 활성화되어 있는지를 확인한다.
iptables 서비스 패키지를 설치.
# yum install iptables-services
firewalld 서비스를 비활성화한다.
# systemctl mask firewalld
iptables 서비스를 활성화한다.
# systemctl enable iptables
firewalld 서비스를 중지한다.
# systemctl stop firewalld
iptables 서비스를 시작한다.
# systemctl start iptables
iptables chain 안의 모든 rule 과 모든 chain 을 삭제한다.
# iptables --flush
포스트라우팅에 masquerade 룰을 추가한다.
테스트 환경의 네트워크는
eth0 — 외부와 연결되는 네트워크 (공인)
eth1 — 내부 서버들과 연결되는 네트워크 (사설)
로 구성되어 있으며, vpn 사용해서 내부 서버에 연결 하는 테스트 환경이다.
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
# iptables-save > /etc/sysconfig/iptables
커널의 ip forward 기능을 활성화 한다.
# vi /etc/sysctl.conf
.... 파일 내용.
net.ipv4.ip_forward = 1
# systemctl restart network.service
서비스 시작
systemctl 로 OpenVPN 서비스를 추가하고 시작한다.
# systemctl -f enable openvpn@server.service
# systemctl start openvpn@server.service
서비스가 잘 실행되면 OpenVPN 을 위한 서버쪽 설정은 끝난다.
VPN 클라이언트 설정
클라이언트 운영체제와 상관없이 클라이언트 키와 인증서, root 인증서를 서버로 부터 생성하고 복사해 오면 된다.
클라이언트 키와 인증서를 생성할 때 유일한 이름으로 생성해야 한다.
client 라는 이름의 키와 인증서를 생성한다.
# ./build-key client
생성되는 클라이언트 키와 인증서, root 인증서를
/etc/openvpn/esay-rsa/keys/client.crt
/etc/openvpn/esay-rsa/keys/client.key
/etc/openvpn/esay-rsa/keys/ca.crt
클라이언트로 복사한다.
클라이언트에는 client.ovpn 이라는 파일을 생성해서, 아래 내용을 붙여넣기 한다.
client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
Plugin
vpn 에 linux pam 인증을 추가하기 위한 모듈 로딩
# mkdir /etc/openvpn/plugin
# cp /usr/lib64/openvpn/plugin/lib/openvpn-auth-pam.so /etc/openvpn/plugin/
server.conf 파일에 아래 내용 추가
plugin /etc/openvpn/plugin/openvpn-auth-pam.so login
클라이언트 설정 파일에 아래 내용 추가
auth-user-pass
그 밖의..
안전한 vpn 서버 관리를 위해서 추가적인 보안 설정 및 키관리가 요구된다.
- OS 보안 설정
- 개인의 키 관리
- 추가 방화벽 설정
이상.
출처 : https://medium.com/@jongseonkim/openvpn-on-centos-7-6464289f588b
'개발 플랫폼 및 언어' 카테고리의 다른 글
Updating your Hackintosh to Sierra 10.12.6 (0) | 2017.10.01 |
---|---|
DB 데이터 복제해온거 적용시 MySQL 실행 에러있을때 강제 실행 (0) | 2017.09.20 |
Mybatis와 IBatis 리턴결과 차이 (0) | 2017.08.04 |
Configure Sendmail SSL encryption for sending and receiving email (0) | 2017.07.18 |
메일서버가 스팸서버로 인식하는 경우 (0) | 2017.06.02 |