Computer >> Máy Tính >  >> Hệ thống >> Linux

Cài đặt và cấu hình Máy chủ OpenVPN trên Linux CentOS / RHEL

Trong bài viết này, chúng tôi sẽ xem xét việc cài đặt và cấu hình OpenVPN máy chủ chạy Linux CentOS / RHEL (7/8) và hiển thị cách kết hợp hai máy tính từ xa (hoặc văn phòng) sau NAT thành một mạng duy nhất bằng máy chủ OpenVPN đã được định cấu hình. Máy khách VPN sẽ được xác thực bằng chứng chỉ.

VPN là một tập hợp các công nghệ cho phép xây dựng một mạng an toàn qua các mạng công cộng hoặc Internet. Sử dụng VPN, bạn có thể kết nối các thiết bị hoặc mạng khác nhau thành một mạng cục bộ an toàn duy nhất qua Internet.

OpenVPN là một trong những triển khai dựa trên SSL / TLS mã nguồn mở của công nghệ VPN dựa trên OpenSSL. Sử dụng OpenVPN, bạn có thể kết nối cả văn phòng từ xa và các máy tính cá nhân phía sau thiết bị NAT thành một mạng duy nhất.

Cài đặt OpenVPN và Easy-RSA

Trong bước đầu tiên, bạn phải kết nối kho EPEL và cập nhật máy chủ của mình:

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

Sau khi hệ thống cập nhật, hãy cài đặt OpenVPN Easy-RSA sử dụng trình quản lý gói yum (chúng tôi sẽ cần nó để triển khai cơ sở hạ tầng khóa PKI trên máy chủ VPN).

# yum install openvpn easy-rsa -y

Cách định cấu hình Easy-RSA và tạo chứng chỉ X.509?

Sao chép tất cả easy-rsa tập lệnh tới / etc / openvpn / :

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

Truy cập / etc / openvpn / easy-rsa / 3 / và tạo vars nộp ở đó:

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

Thêm nội dung tệp (bạn có thể sửa đổi cấu hình theo nhu cầu của mình):

set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "DE"
set_var EASYRSA_REQ_PROVINCE "MUN"
set_var EASYRSA_REQ_CITY "BY"
set_var EASYRSA_REQ_ORG "WOSHUB"
set_var EASYRSA_REQ_EMAIL "vpnadmin@woshub.com"
set_var EASYRSA_REQ_OU "IT dept"
set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha512"

Bạn có thể chỉ định bất kỳ dữ liệu nào trong tệp, nó sẽ không ảnh hưởng đến cấu hình và hoạt động thêm của máy chủ.

Tệp phải thực thi được, vì vậy hãy chạy:

# chmod +x vars

Tạo chứng chỉ và khóa OpenVPN

Trước khi tạo khóa, hãy khởi chạy PKI thư mục và tạo CA khóa.
# cd /etc/openvpn/easy-rsa/3/
# ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/3/pki

Tạo CA khóa:

# ./easyrsa build-ca

Sau khi chạy lệnh, bạn sẽ cần nhập mật khẩu để tạo khóa và chứng chỉ. Bạn sẽ cần mật khẩu sau này để ký các chứng chỉ.

Cài đặt và cấu hình Máy chủ OpenVPN trên Linux CentOS / RHEL

Tạo khóa máy chủ (tên máy chủ là vpn.woshub.com ):

nopass tùy chọn vô hiệu hóa mật khẩu

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

Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 4096 bit RSA private key
.........................++
writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key.R4IYCbD1zP'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [vpn.woshub.com]:
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/3/pki/reqs/vpn.woshub.com.req
key: /etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key

Khi cấp chứng chỉ, nhấn Enter trong cột Tên chung .

Ký khóa vpn.woshub.com bằng chứng chỉ CA của chúng tôi:

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

Để ký chứng chỉ, chúng tôi sẽ cần mật khẩu mà chúng tôi đã đặt khi phát hành CA chứng chỉ:

Cài đặt và cấu hình Máy chủ OpenVPN trên Linux CentOS / RHEL

Như được hiển thị trong ảnh chụp màn hình, bạn sẽ phải nhập CA mật khẩu đang được xử lý.

Để đảm bảo rằng các chứng chỉ đã được tạo không có lỗi, hãy chạy lệnh này:

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

pki/issued/vpn.woshub.com.crt: OK

Tất cả chứng chỉ máy chủ OpenVPN đã được tạo.

  • Chứng chỉ gốc pki/ca.crt
  • Khóa máy chủ riêng pki/private/vpn.woshub.com.key
  • Chứng chỉ máy chủ pki/issued/vpn.woshub.com.crt

Để tạo khóa ứng dụng, hãy chạy lệnh sau:

# ./easyrsa gen-req client_name nopass

Hãy tạo admin1 khóa ứng dụng khách:
# ./easyrsa gen-req admin1 nopass

Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 4096 bit RSA private key
..........++
writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [admin1]:
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/3/pki/reqs/admin1.req
key: /etc/openvpn/easy-rsa/3/pki/private/admin1.key

Bạn phải ký nó bằng chứng chỉ CA, như khóa máy chủ:

# ./easyrsa sign-req client admin1

Cài đặt và cấu hình Máy chủ OpenVPN trên Linux CentOS / RHEL

Chứng chỉ cho người dùng đã được tạo.

Ngoài ra, bạn phải tạo khóa Diffie-Hellman để được sử dụng cho việc trao đổi khóa:

# ./easyrsa gen-dh

Phải mất một khoảng thời gian để tạo:

Cài đặt và cấu hình Máy chủ OpenVPN trên Linux CentOS / RHEL

Sau đó, tạo chứng chỉ TSL:

# openvpn --genkey --secret ta.key

Nếu sau này chúng tôi định thu hồi chứng chỉ ứng dụng khách, chúng tôi cần tạo khóa CRL:

# ./easyrsa gen-crl

Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Using configuration from /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key:
An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/3/pki/crl.pem

Để thu hồi chứng chỉ, hãy chạy lệnh sau:

./easyrsa revoke admin1 - nơi admin1 là tên chứng chỉ

Các chứng chỉ cần thiết đã được tạo. Bây giờ sao chép chúng vào thư mục công việc.

Đây là các chứng chỉ máy chủ:

# 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/

Đây là các chứng chỉ khách hàng:

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

Tệp cấu hình máy chủ OpenVPN, Quy tắc tường lửa

Hãy chuyển sang cài đặt của tệp cấu hình OpenVPN. Trước hết, hãy tạo tệp cấu hình OpenVPN của bạn server.conf :

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

Thay đổi nội dung tệp như sau:

# Specify the port, protocol and device
port 1194
proto udp
dev tun
# Specify the paths to the server certificates
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpn.woshub.com.crt
key /etc/openvpn/server/vpn.woshub.com.key
# Paths to key CRL and DH
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
# Specify the IP settings of the network VPN clients will get addresses from
server 10.1.2.0 255.255.255.0
push "redirect-gateway def1"
# Specify the assigned DNS servers
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Allow connection to different clients with the same key
duplicate-cn
# TLS protection
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC
tls-version-min 1.2
tls-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-SHA256
auth SHA512
auth-nocache
# Other configuration details
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# Path to the log file
log-append /var/log/openvpn.log
verb 3

Sau đó, lưu tệp. Tôi đã chỉ định cổng UDP mặc định 1194 cho máy chủ VPN của mình, nhưng bạn có thể chỉ định bất kỳ cổng miễn phí nào trên máy chủ cho OpenVPN của bạn.

Bây giờ bạn chỉ cần thiết lập các quy tắc tường lửa để cho phép kết nối và định tuyến giữa các phân đoạn.

Nếu bạn đang sử dụng firewalld, hãy kích hoạt chuyển tiếp mô-đun hạt nhân đầu tiên:

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

net.ipv4.ip_forward = 1

Thêm dịch vụ openvpn vào firewalld tun0 giao diện với vùng đáng tin cậy:

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

Kích hoạt ‘MASQUERADE’ cho vùng đáng tin cậy của firewalld:
# firewall-cmd --permanent --zone=trusted --add-masquerade

Kích hoạt 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

Nếu bạn đang sử dụng iptables mà không có firewalld, hãy chạy các lệnh sau:

# 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

Chạy dịch vụ OpenVPN và thêm nó vào khởi động:

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

Đảm bảo rằng cổng udp \ 1194 đang nghe bởi dịch vụ openvpn:

# lsof -i:1194

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
openvpn 12327 nobody 5u IPv4 45122 0t0 UDP *:openvpn

Kiểm tra cài đặt IP của giao diện mạng:

# ip a

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.1.2.1 peer 10.1.2.2/32 scope global tun0
valid_lft forever preferred_lft forever

Như bạn có thể thấy, mạng được chỉ định trong quá trình cấu hình được thêm vào tun0 thiết bị.

Đây là những cài đặt tối thiểu để OpenVPN của bạn hoạt động.

Cách kết nối nhiều văn phòng (Máy tính) bằng OpenVPN?

Hãy xem cách kết nối với máy chủ OpenVPN từ hai máy tính từ xa có quyền truy cập Internet thông qua NAT và kết nối chúng thành một mạng duy nhất. Để kết nối từ máy tính chạy Windows với máy chủ OpenVPN, tôi đang sử dụng ứng dụng khách chính thức. Bạn có thể tải xuống trên trang web chính thức, nhưng chúng tôi sẽ không mô tả chi tiết về nó và hãy chuyển trực tiếp đến cấu hình của nó.

Sau khi bạn đã cài đặt ứng dụng khách, hãy chuyển sang tạo tệp cấu hình tại đây:

C:\Program Files\OpenVPN\config\

Tôi đã tạo một tệp với ứng dụng khách tên và thêm các nội dung sau vào đó:

client
dev tun
proto udp
remote 112.113.114.15 1194
resolv-retry infinite
nobind
block-outside-dns
persist-key
persist-tun
mute-replay-warnings
remote-cert-tls server
tls-client
auth SHA512
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1
remote-cert-eku "TLS Web Server Authentication"
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\admin1.crt"
key "C:\\Program Files\\OpenVPN\\config\\admin1.key"
cipher AES-256-CBC
comp-lzo
verb 3

Để định cấu hình nó, chúng tôi sẽ cần các chứng chỉ ứng dụng khách, bảo mật và máy chủ mà chúng tôi đã tạo trước đó. Bạn phải tải chúng xuống từ máy chủ của mình và đặt vào một thư mục cục bộ. Sau đó, chỉ định đường dẫn đến chúng trong tệp cấu hình ứng dụng khách OpenVPN.

Sau đó, bạn có thể kết nối với máy chủ bằng cách nhấp vào biểu tượng OpenVPN trong khay:

Cài đặt và cấu hình Máy chủ OpenVPN trên Linux CentOS / RHEL

Tôi đã kết nối và có địa chỉ IP sau cho thiết bị của mình:

IPv4 address. . . . . . . . . . . . : 10.1.2.14
Subnet mask . . . . . . . . . . : 255.255.255.0

Trên máy tính thứ hai sau NAT, tôi đã thực hiện các hành động tương tự và tạo trước chứng chỉ cho người dùng thứ hai. Sau khi kết nối, PC thứ hai cũng nhận được địa chỉ IP từ mạng VPN:

IPv4 address. . . . . . . . . . . . : 10.1.2.16
Subnet mask . . . . . . . . . . : 255.255.255.0

Sau khi kết nối, cả hai máy tính đều ở trong cùng một mạng và nhìn thấy nhau.

Ping PC thứ hai:

Pinging 10.1.2.16 with 32 bytes of data:
Reply from 10.1.2.16: bytes=32 time=73ms TTL=127

Ping trên PC đầu tiên:

Pinging 10.1.2.14 with 32 bytes of data:
Reply from 10.1.2.14: bytes=32 time=79ms TTL=127

Cả hai máy khách VPN được kết nối đều có thể gửi gói và truyền tệp trực tiếp cho nhau. Do đó, chúng tôi có thể kết hợp thực tế hai thiết bị đặt ở những nơi khác nhau của quốc gia thành một mạng cục bộ.

Bạn có thể tạo bất kỳ số lượng khóa hoặc chứng chỉ nào cho người dùng trên máy chủ OpenVPN của mình. Nếu bạn cần chứng chỉ mới, hãy chạy các lệnh này cho / etc / openvpn / easy-rsa / 3:

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

Đừng quên thu hồi chứng chỉ ứng dụng khách nếu chúng không được sử dụng để giữ an toàn cho mạng của bạn.