Computer >> 컴퓨터 >  >> 체계 >> Linux

Linux CentOS/RHEL에 OpenVPN 서버 설치 및 구성

이 기사에서는 OpenVPN의 설치 및 구성을 고려할 것입니다. Linux CentOS/RHEL(7/8)을 실행하는 서버 및 구성된 OpenVPN 서버를 사용하여 NAT 뒤에 있는 두 개의 원격 컴퓨터(또는 사무실)를 단일 네트워크에 연결하는 방법을 보여줍니다. VPN 클라이언트는 인증서를 사용하여 인증됩니다.

VPN 공용 네트워크 또는 인터넷을 통해 보안 네트워크를 구축할 수 있도록 하는 일련의 기술입니다. VPN을 사용하면 인터넷을 통해 여러 장치나 네트워크를 하나의 안전한 로컬 네트워크에 연결할 수 있습니다.

OpenVPN OpenSSL 기반 VPN 기술의 오픈 소스 SSL/TLS 기반 구현 중 하나입니다. OpenVPN을 사용하면 NAT 장치 뒤에 있는 원격 사무실과 개별 컴퓨터를 단일 네트워크에 연결할 수 있습니다.

OpenVPN 및 Easy-RSA 설치

첫 번째 단계에서 EPEL 저장소를 연결하고 호스트를 업데이트해야 합니다.

# yum install epel-release -y
# yum update -y

시스템 업데이트 후 OpenVPN 설치 및 Easy-RSA yum 패키지 관리자 사용(VPN 서버에서 PKI 키 인프라를 구현하는 데 필요함).

# yum install openvpn easy-rsa -y

Easy-RSA를 구성하고 X.509 인증서를 생성하는 방법

모든 easy-rsa 복사 /etc/openvpn/에 대한 스크립트 :

# cp -r /usr/share/easy-rsa /etc/openvpn/

/etc/openvpn/easy-rsa/3/로 이동합니다. var 생성 파일:

# cd /etc/openvpn/easy-rsa/3/
# nano vars

파일 내용 추가(필요에 따라 구성을 수정할 수 있음):

EASYRSA_REQ_EMAIL set_var set_var EASYRSA_REQ_ORG "WOSHUB" "[email protected]"에 의해 "EASYRSA_PKI set_var set_var EASYRSA"$ PWD ""$ EASYRSA / PKI "EASYRSA_DN set_var"cn_only "set_var EASYRSA_REQ_COUNTRY"DE "set_var EASYRSA_REQ_PROVINCE"MUN "set_var EASYRSA_REQ_CITY을
 "set_var EASYRSA_REQ_OU는"IT가 부서 "set_var EASYRSA_KEY_SIZE 4096set_var EASYRSA_ALGO rsaset_var EASYRSA_CA_EXPIRE 7500set_var EASYRSA_CERT_EXPIRE 3650set_var EASYRSA_NS_SUPPORT"아니오 "set_var EASYRSA_NS_COMMENT"인증 기관 "EASYRSA_EXT_DIR set_var"$ EASYRSA / X509-유형 "set_var EASYRSA_SSL_CONF"$ EASYRSA /하려면 openssl-1.0.cnf "set_var EASYRSA_DIGEST "sha512"

파일의 모든 데이터를 지정할 수 있으며 서버의 구성 및 추가 작업에 영향을 미치지 않습니다.

파일은 실행 가능해야 하므로 다음을 실행하십시오.

# chmod +x vars

OpenVPN 인증서 및 키 생성

키를 만들기 전에 PKI를 초기화합니다. 디렉토리를 만들고 CA를 만듭니다. 키.
# cd /etc/openvpn/easy-rsa/3/
# ./easyrsa init-pki

참고:Easy-RSA 구성 사용:./varsinit-pki complete; 이제 CA 또는 요청을 생성할 수 있습니다. 새로 생성된 PKI 디렉토리는 다음과 같습니다. /etc/openvpn/easy-rsa/3/pki

CA 만들기 키:

# ./easyrsa build-ca

명령을 실행한 후 키와 인증서를 생성하려면 암호를 입력해야 합니다. 나중에 인증서에 서명하려면 비밀번호가 필요합니다.

Linux CentOS/RHEL에 OpenVPN 서버 설치 및 구성

서버 키 생성(서버 이름은 vpn.woshub.com ):

노패스 옵션은 암호를 비활성화합니다.

# ./easyrsa gen-req vpn.woshub.com nopass

참고:Easy-RSA 구성 사용:./varsSSL 사용:openssl OpenSSL 1.0.2k-fips 2017년 1월 26일 4096비트 RSA 개인 키 생성............. ........++'/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key.R4IYCbD1zP'에 새 개인 키 쓰기----- 인증서 요청에 통합될 정보를 입력하라는 메시지가 표시됩니다. 입력하려고 하는 항목은 식별 이름 또는 DN입니다. 꽤 많은 필드가 있지만 일부는 비워둘 수 있습니다.일부 필드에는 기본값이 있습니다 ,'.'를 입력하면 필드가 공백으로 남습니다.-----일반 이름(예:사용자, 호스트 또는 서버 이름) [vpn.woshub.com]:키 쌍 및 인증서 요청이 완료되었습니다. 귀하의 파일은 다음과 같습니다. 키

인증서를 발급할 때 Enter 키를 누릅니다. 일반 이름 열에서.

CA 인증서를 사용하여 vpn.woshub.com 키에 서명:

# ./easyrsa sign-req server vpn.woshub.com

인증서에 서명하려면 CA 발급 시 설정한 비밀번호가 필요합니다. 인증서:

Linux CentOS/RHEL에 OpenVPN 서버 설치 및 구성

스크린샷에 표시된 대로 를 입력해야 합니다. 및 캐나다 비밀번호 처리 중입니다.

인증서가 오류 없이 생성되었는지 확인하려면 다음 명령을 실행하십시오.

# openssl verify -CAfile pki/ca.crt pki/issued/vpn.woshub.com.crt

pki/issued/vpn.woshub.com.crt:확인

모든 OpenVPN 서버 인증서가 생성되었습니다.

  • 루트 인증서 pki/ca.crt
  • 개인 서버 키 pki/private/vpn.woshub.com.key
  • 서버 인증서  pki/issued/vpn.woshub.com.crt

클라이언트 키를 생성하려면 다음 명령을 실행하십시오.

# ./easyrsa gen-req client_name nopass

admin1을 생성해 보겠습니다. 클라이언트 키:
# ./easyrsa gen-req admin1 nopass

참고:Easy-RSA 구성 사용:./varsSSL 사용:openssl OpenSSL 1.0.2k-fips 2017년 1월 26일 4096비트 RSA 개인 키 생성..........++새 개인 키 쓰기 '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e'-----인증서 요청에 통합될 정보를 입력하라는 메시지가 표시됩니다. 입력하려는 내용 는 고유 이름 또는 DN이라고 합니다. 필드가 꽤 많지만 일부 필드는 비워둘 수 있습니다. -일반 이름(예:사용자, 호스트 또는 서버 이름) [admin1]:키 쌍 및 인증서 요청이 완료되었습니다. 귀하의 파일은 다음과 같습니다. 

서버 키와 같은 CA 인증서를 사용하여 서명해야 합니다.

# ./easyrsa sign-req client admin1

Linux CentOS/RHEL에 OpenVPN 서버 설치 및 구성

사용자에 대한 인증서가 생성되었습니다.

또한 키 교환에 사용할 Diffie-Hellman 키를 생성해야 합니다.

# ./easyrsa gen-dh

생성하는 데 시간이 걸립니다:

Linux CentOS/RHEL에 OpenVPN 서버 설치 및 구성

그런 다음 TSL 인증서를 생성합니다.

# openvpn --genkey --secret ta.key

나중에 클라이언트 인증서를 취소하려면 CRL 키를 생성해야 합니다.

# ./easyrsa gen-crl

참고:Easy-RSA 구성 사용:./varsSSL 사용:openssl OpenSSL 1.0.2k-fips 2017년 1월 26일/etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf의 구성 사용 /etc/openvpn/easy-rsa/3/pki/private/ca.key:업데이트된 CRL이 생성되었습니다.CRL 파일:/etc/openvpn/easy-rsa/3/pki/crl.pem

인증서를 취소하려면 다음 명령을 실행하십시오.

./easyrsa revoke admin1 — 여기서 admin1 는 인증서 이름입니다.

필요한 인증서가 생성되었습니다. 이제 작업 디렉토리에 복사하십시오.

다음은 서버 인증서입니다.

# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/vpn.woshub.com.crt /etc/openvpn/server/
# cp pki/private/vpn.woshub.com.key /etc/openvpn/server/
# cp pki/private/dh.pem /etc/openvpn/server/
# cp pki/private/ta.key /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/

클라이언트 인증서는 다음과 같습니다.

# cp pki/issued/admin1.crt /etc/openvpn/client/
# cp pki/private/admin1.key /etc/openvpn/client/

OpenVPN 서버 구성 파일, 방화벽 규칙

OpenVPN 구성 파일의 설정으로 넘어 갑시다. 먼저 OpenVPN 구성 파일 server.conf를 만듭니다. :

# cd /etc/openvpn/ && nano server.conf

파일 내용을 다음과 같이 변경합니다.

# 포트, 프로토콜 및 장치 포트 지정 1194proto udpdev tun# 서버 인증서 경로 지정ca /etc/openvpn/server/ca.crtcert /etc/openvpn/server/vpn.woshub.com.crtkey /etc/openvpn /server/vpn.woshub.com.key# 키 CRL 및 DHdh에 대한 경로 /etc/openvpn/server/dh.pemcrl-verify /etc/openvpn/server/crl.pem# VPN 클라이언트의 IP 설정을 지정합니다. 서버에서 주소 가져오기 10.1.2.0 255.255.255.0push "redirect-gateway def1# 할당된 DNS 서버 지정push "dhcp-option DNS 8.8.8.8"push "dhcp-option DNS 8.8.4.4# 동일한 클라이언트에 대한 연결 허용 keyduplicate-cn# TLS 보호tls-auth /etc/openvpn/server/ta.key 0cipher AES-256-CBCtls-version-min 1.2tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS- DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256auth SHA512auth-nocache# 기타 구성 세부 정보keepalive 20 60persist-keypersist-tuncomp-lzo yesdaemonuser nobodygroup nobody# 경로 로그 파일log-append /var/log/openvpn.logverb 3

그런 다음 파일을 저장합니다. 내 VPN 서버에 대한 기본 UDP 포트 1194를 지정했지만 OpenVPN에 대한 서버의 여유 포트를 지정할 수 있습니다.

이제 세그먼트 간의 연결 및 라우팅을 허용하도록 방화벽 규칙을 설정하기만 하면 됩니다.

방화벽을 사용하는 경우 전달을 활성화합니다. 먼저 커널 모듈:

# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p

net.ipv4.ip_forward =1

방화벽에 openvpn 서비스 추가 및 tun0 신뢰할 수 있는 영역에 대한 인터페이스:

# firewall-cmd --permanent --add-service=openvpn
# firewall-cmd --permanent --zone=trusted --add-interface=tun0

firewalld 신뢰 영역에 대해 'MASQUERADE' 활성화:
# firewall-cmd --permanent --zone=trusted --add-masquerade

NAT 활성화:

# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.1.2.0/24 -o Server_IP -j MASQUERADE
# firewall-cmd –reload

firewalld 없이 iptables를 사용하는 경우 다음 명령을 실행하십시오.

# iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o eth0 -j MASQUERADE
# iptables -A INPUT -p udp –dport 1194 -j ACCEPT
# service iptables save

OpenVPN 서비스를 실행하고 시작 프로그램에 추가:

# systemctl start openvpn@server
# systemctl enable openvpn@server

udp\1194 포트가 openvpn 서비스에서 수신 중인지 확인하십시오.

# lsof -i:1194

명령 PID 사용자 FD 유형 장치 크기/끄기 노드 이름openvpn 12327 nobody 5u IPv4 45122 0t0 UDP *:openvpn

네트워크 인터페이스의 IP 설정을 확인하십시오:

# ip a

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3:tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN 그룹 기본 qlen 100link/noneinet 10.1.2.1 peer 10.1.2.2/32 범위 전역 tun0valid_lft 영원히 preferred_lft 영원히

보시다시피 구성 중에 지정된 네트워크가 tun0에 추가됩니다. 장치.

이것은 OpenVPN이 작동하도록 하기 위한 최소 설정입니다.

OpenVPN을 사용하여 여러 사무실(컴퓨터)을 연결하는 방법

NAT를 통해 인터넷에 액세스할 수 있는 두 원격 컴퓨터에서 OpenVPN 서버에 연결하고 단일 네트워크에 연결하는 방법을 살펴보겠습니다. Windows를 실행하는 컴퓨터에서 OpenVPN 서버로 연결하기 위해 공식 클라이언트를 사용하고 있습니다. 공식 웹사이트에서 다운로드할 수 있지만 자세히 설명하지 않고 구성으로 바로 이동합니다.

클라이언트를 설치한 후 여기에서 구성 파일 만들기로 이동합니다.

C:\Program Files\OpenVPN\config\

client라는 이름으로 파일을 만들고 다음 내용을 추가했습니다.

clientdev tunproto udpremote 112.113.114.15 1194resolv-retry Infinitynobindblock-outside-dnspersist-keypersist-tunmute-replay-warningsremote-cert-tls servertls-clientauth SHA512tls-auth "VPN 열기"C:\\Program ta.key" 1remote-cert-eku "TLS 웹 서버 인증"ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"cert "C:\\Program Files\\OpenVPN\\config\ \admin1.crt"키 "C:\\Program Files\\OpenVPN\\config\\admin1.key" 암호 AES-256-CBCcomp-lzoverb 3

이를 구성하려면 이전에 생성한 클라이언트, 보안 및 서버 인증서가 필요합니다. 서버에서 다운로드하여 로컬 폴더에 저장해야 합니다. 그런 다음 OpenVPN 클라이언트 구성 파일에서 경로를 지정하십시오.

그런 다음 트레이에서 OpenVPN 아이콘을 클릭하여 서버에 연결할 수 있습니다.

Linux CentOS/RHEL에 OpenVPN 서버 설치 및 구성

연결했고 내 장치에 대해 다음 IP 주소를 얻었습니다.

IPv4 주소. . . . . . . . . . . . :10.1.2.14서브넷 마스크 . . . . . . . . . . :255.255.255.0

NAT 뒤에 있는 두 번째 컴퓨터에서 동일한 작업을 수행하고 두 번째 사용자에 대한 인증서를 미리 만들었습니다. 연결 후 두 번째 PC도 VPN 네트워크에서 IP 주소를 받았습니다.

IPv4 주소. . . . . . . . . . . . :10.1.2.16서브넷 마스크 . . . . . . . . . . :255.255.255.0

연결 후 두 컴퓨터는 동일한 네트워크에 있으며 서로를 봅니다.

두 번째 PC에 핑:

32바이트 데이터로 10.1.2.16 핑:10.1.2.16에서 응답:바이트=32 시간=73ms TTL=127

첫 번째 PC에서 핑:

32바이트 데이터로 10.1.2.14 핑:10.1.2.14에서 응답:바이트=32 시간=79ms TTL=127

연결된 두 VPN 클라이언트는 패킷을 보내고 파일을 서로 직접 전송할 수 있습니다. 따라서 물리적으로 국가의 다른 장소에 있는 두 개의 장치를 하나의 로컬 네트워크로 연결할 수 있습니다.

OpenVPN 서버의 사용자에 대해 원하는 수의 키 또는 인증서를 생성할 수 있습니다. 새 인증서가 필요한 경우 /etc/openvpn/easy-rsa/3:

에 대해 다음 명령을 실행합니다.

# ./easyrsa gen-req clientname nopass
# ./easyrsa sign-req client clientname

네트워크 보안을 유지하는 데 사용되지 않는 클라이언트 인증서를 취소하는 것을 잊지 마십시오.