반응형
설치
- CentOS7 x86_64
- 설치는 패키지 관리자로 설치
yum install epel-release
yum install openvpn easy-rsa
Server Config
- 인증서 기반 접속 서버 설정
vim /etc/openvpn/server.conf
## Start of server.conf##
## openvpn 바인드 포트
port 21194
## Protocol 종류(Tcp/Udp 지원)
proto tcp
## 터널링시 os상 생성 될 interface 이름
dev tun
## TLS 설정
tls-server
tls-auth /etc/openvpn/easy-rsa/pki/ta.key
key-direction 0
auth SHA512
cipher AES-256-CBC
## 터널링에 사용될 IP 대역
server 10.1.0.0 255.255.255.0
## ipp.txt에 연결되었던 client의 할당 IP 정보 기록. 추후 접속에도 같은 IP 할당
ifconfig-pool-persist ipp.txt
## Client 연결 후 Client에 추가할 라우틸 테이블
push "route 10.1.0.0 255.255.255.0 "
push "route 172.16.10.0 255.255.255.0 "
## DNS
push "dhcp-option DNS 172.16.10.21"
## 만약 Client 가 모든 트래픽을 openvpn 으로 보낸다면 아래와 같이 설정
#push "redirect-gateway def1"
## 중복 로그인 허용
#duplicate-cn
## Ca Key 위치
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
status /var/log/openvpn-status.log
verb 3
## 세션 종료 및 상태를 확인 하기 위한 management 포트 설정
management localhost 10921
## 서비스 로그 설정
log-append /var/log/openvpn/openvpn-service.log
log /var/log/openvpn/openvpn.log
## 기본적으로 openvpn인증을 pam 인증 하기 위한 모듈 위치 지정
#plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
#client-cert-not-required
#username-as-common-name
##End of server.conf##
KEY 생성
- 관리를 용이하게 하기 위해 easy-rsa 키 디렉토리를 openvpn 디렉토리로 복사
> mkdir /etc/openvpn/easy-rsa
> cp -arf /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa
vars 작성
> vim /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="KR"
export KEY_PROVINCE="Soeul"
export CITY="GANGNAMGU"
export ORG="ploz.tistory.com"
export KEY_EMAIL="ploz@ploz.com"
export KEY_OU="ploz-group"
export KEY_NAME="TEST"
export KEY_CN="OPENVPN"
- vars 적용
> chmod u+x /etc/openvpn/easy-rsa/vars
> source /etc/openvpn/easy-rsa/vars
PKI 초기화
> /etc/openvpn/easy-rsa/easyrsa init-pki
CA key 생성
> cd /etc/openvpn/easy-rsa
> ./easyrsa build-ca
...
## CA 패스워드 입력
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
...
Your new CA certificate file for publishing is at:
# 아래 경로에 ca key 생성 됨
/etc/openvpn/easy-rsa/pki/ca.crt
SERVER Key 생성
> cd /etc/openvpn/easy-rsa
# nopass로 패스워드 입력 없이 진행 가능
> ./easyrsa build-server-full server [nopass]
...
## SERVER Key 패스워드 입력
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
...
## ca key 생성 시 입력했던 CA 패스워드 입력
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
...
Write out database with 1 new entries
Data Base Updated
- server key는 아래 경로에 생성됨
> ls -al /etc/openvpn/easy-rsa/pki/issued
-rw------- 1 root root 4523 Jan 27 15:59 server.crt
> ls -al /etc/openvpn/easy-rsa/pki/private
-rw------- 1 root root 1834 Jan 27 15:59 server.key
DH 생성
> cd /etc/openvpn/easy-rsa
> ./easyrsa gen-dh
# 확인
> ls -al /etc/openvpn/easy-rsa/pki
...
-rw------- 1 root root 424 Jan 27 16:02 dh.pem
...
TA Key 생성
openvpn --genkey --secret /etc/openvpn/easy-rsa/pki/ta.key
Client Key 생성
# easyrsa build-client-full [user name] [nopass]
> ./easyrsa build-client-full test1 nopass
...
## CA 패스워드 입력
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
...
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'test1'
Certificate is to be certified until May 1 09:00:43 2024 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Server 실행
포그라운드 실행
> /usr/sbin/openvpn --config /etc/openvpn/server.conf
## server key 패스워드 입력
Enter Private Key Password: **********
Systemd 사용
- systemd 설정
> cat /usr/lib/systemd/system/openvpn-server\@.service
[Unit]
Description=OpenVPN service for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn
ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --config server.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
RestartSec=5s
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 실행
> systemctl restart openvpn-server\@server
# server private key 입력. nopass 옵션으로 서버키를 생성한 경우 예외
Enter Private Key Password: **********
- Server Key password가 틀린경우 아래와 같이 process 가 뜸
> pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
...
├─openvpn───systemd-ask-pas
...
# ps
dbus 546 0.0 0.0 58336 2584 ? Ss Feb12 0:12 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
- Server Key password 재입력
# 하기 메세지가 터미널에 표출 됨
Broadcast message from root@OPENVPN (Mon 2022-02-14 21:02:46 KST):
Password entry required for 'Enter Private Key Password:' (PID 85557).
Please enter password with the systemd-tty-ask-password-agent tool!
# 아래 명령으로 password 재입력
> systemd-tty-ask-password-agent
Enter Private Key Password: ******
- Server Key password 없이 재시작 하려면 server.conf에 아래와 같이 설정을 추가 후 재시작
> vim /etc/openvpn/server.conf
...
askpass pass.txt
...
> vim /etc/openvpn/pass.txt
<server private key password>
반응형
'시스템 > OpenVPN' 카테고리의 다른 글
[OpenVPN] openvpn-monitor 설치하기(docker) (0) | 2022.08.11 |
---|---|
[OpenVPN] AD(Active Directory) 연동 (0) | 2022.05.12 |
[OpenVPN] PAM인증을 통한 Client ID/PASSWORD 방식 접속 (2) | 2022.05.12 |
[OpenVPN] Client Key 파기 + Key 관리 (0) | 2022.05.12 |
[OpenVPN] Server 구축 및 Client.ovpn 생성(인증서 기반) (2) (0) | 2022.05.12 |