OpenVPN là một ứng dụng mã nguồn mở cho phép bạn tạo một mạng riêng an toàn qua internet công cộng. OpenVPN triển khai mạng riêng ảo (VPN) để tạo kết nối an toàn. OpenVPN sử dụng thư viện OpenSSL để cung cấp mã hóa và cung cấp một số cơ chế xác thực, chẳng hạn như dựa trên chứng chỉ, khóa được chia sẻ trước và xác thực tên người dùng/mật khẩu.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình OpenVPN từng bước trên CentOS 7.6. Và chúng ta sẽ triển khai xác thực OpenVPN dựa trên chứng chỉ.
Bây giờ hãy cài đặt OpenVPN 2.4 với easy-rsa 3 trên hệ thống.
Khi quá trình cài đặt hoàn tất, hãy kiểm tra phiên bản openvpn và easy-rsa.
OpenVPN 2.4 với easy-rsa 3 đã được cài đặt.
Đi đến thư mục '/etc/openvpn/' và sao chép tập lệnh 'easy-rsa'.
Bây giờ hãy đi đến thư mục 'easy-rsa/3/' và tạo tệp vars mới bằng vim.
Dán cấu hình vars easy-rsa 3 bên dưới.
Lưu và thoát.
Lưu ý:
Tệp vars cho cài đặt Easy-RSA 3 đã được tạo.
Chúng ta sẽ xây dựng tất cả các khóa đó bằng dòng lệnh 'easyrsa'. Đi đến thư mục '/etc/openvpn/easy-rsa/3'.
Khởi tạo thư mục PKI và xây dựng khóa CA bằng lệnh bên dưới.
Bây giờ hãy nhập mật khẩu cho khóa CA của bạn và bạn sẽ nhận được các tệp 'ca.crt' và 'ca.key' trong thư mục 'pki'.
Xây dựng khóa máy chủ 'hakase-server' bằng lệnh bên dưới.
Lưu ý:
Bạn sẽ được yêu cầu nhập mật khẩu 'CA', hãy nhập mật khẩu và nhấn Enter. Và bạn sẽ nhận được tệp chứng chỉ 'hakase-server.crt' trong thư mục 'pki/issued/'.
Xác minh tệp chứng chỉ bằng lệnh OpenSSL và đảm bảo không có lỗi.
Tất cả các khóa chứng chỉ máy chủ đã được tạo. Khóa riêng của máy chủ nằm ở 'pki/private/hakase-server.key', còn chứng chỉ máy chủ nằm ở 'pki/issued/hakase-server.crt'.
Tạo khóa 'client01' bằng lệnh bên dưới.
Bây giờ hãy ký khóa 'client01' bằng chứng chỉ CA của chúng tôi như bên dưới.
Nhập 'yes' để xác nhận yêu cầu chứng chỉ máy khách, sau đó nhập mật khẩu CA.
Chứng chỉ máy khách có tên 'client01' đã được tạo, hãy xác minh chứng chỉ máy khách bằng lệnh openssl.
Tạo khóa Diffie-Hellman bằng lệnh bên dưới.
Khóa DH đã được tạo, nằm tại thư mục 'pki'.
Nếu bạn muốn thu hồi một số khóa, hãy chạy lệnh như bên dưới.
Sau đó tạo khóa CRL.
Tệp PEM CRL đã được tạo trong thư mục 'pki' - sau đây là ví dụ trên máy chủ của tôi.
Sao chép khóa máy chủ và chứng chỉ.
Sao chép Khóa và Chứng chỉ client01.
Sao chép Khóa DH và CRL.
Vào thư mục '/etc/openvpn/' và tạo tệp cấu hình mới 'server.conf' bằng vim.
Dán cấu hình máy chủ OpenVPN sau vào đó.
Lưu và thoát.
Cấu hình cho OpenVPN đã được tạo.
Kích hoạt mô-đun hạt nhân chuyển tiếp cổng bằng cách chạy các lệnh sau.
Tiếp theo, cấu hình định tuyến bằng Firewalld cho OpenVPN.
Thêm dịch vụ 'openvpn' vào dịch vụ danh sách firewalld và thêm giao diện 'tun0' vào vùng tin cậy firewalld.
Bật 'MASQUERADE' trên vùng 'tin cậy' firewalld.
Bật NAT cho địa chỉ IP nội bộ OpenVPN '10.10.1.0/24' thành địa chỉ IP bên ngoài 'SERVERIP'.
Và tải lại firewalld.
Chuyển tiếp cổng và định tuyến Firewalld đã hoàn tất, bây giờ hãy khởi động dịch vụ openvpn và cho phép nó tự động khởi chạy mọi lúc khi khởi động hệ thống.
Kiểm tra bằng các lệnh bên dưới.
Máy chủ OpenVPN đang hoạt động trên cổng giao thức udp '1194'.
Dán cấu hình máy khách OpenVPN sau vào đó.
Lưu và thoát.
Bây giờ hãy nén thư mục '/etc/openvpn/client' thành tệp 'zip' hoặc 'tar.gz' và tải xuống tệp đã nén bằng scp từ máy cục bộ của bạn máy tính.
Nén thư mục '/etc/openvpn/client' vào tệp 'client01.tar.gz'.
Nếu bạn muốn kết nối bằng shell terminal, hãy chạy lệnh OpenVPN bên dưới.
Khi bạn đã kết nối với OpenVPN, hãy mở tab terminal mới và kiểm tra kết nối bằng lệnh curl.
Và bạn sẽ nhận được địa chỉ IP của máy chủ OpenVPN.
Giải nén tệp 'client01.tar.gz' và đổi tên thư mục 'client' thành 'client01.tblk'.
Nhấp đúp vào 'client01.tblk' và Tunnelblick sẽ tự động phát hiện cấu hình OpenVPN rồi nhập.
Bây giờ hãy kết nối thông qua Tunnelblick trên thanh trên cùng.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình OpenVPN từng bước trên CentOS 7.6. Và chúng ta sẽ triển khai xác thực OpenVPN dựa trên chứng chỉ.
Điều kiện tiên quyết
- CentOS 7.6
- Quyền root
Chúng ta sẽ làm gì?
- Cài đặt OpenVPN và Easy-RSA
- Cấu hình Easy-RSA 3 Vars
- Xây dựng khóa OpenVPN
- Cấu hình máy chủ OpenVPN
- Cấu hình Firewalld và bật chuyển tiếp cổng
- Thiết lập máy khách
- Kiểm tra
Bước 1 - Cài đặt OpenVPN và Easy-RSA
Trong hướng dẫn này, chúng ta sẽ sử dụng phiên bản mới nhất của máy chủ centos (7.5) và chúng ta sẽ sử dụng OpenVPN 2.4 với easy-rsa 3. Trước khi cài đặt OpenVPN và Các gói easy-rsa, hãy đảm bảo kho lưu trữ 'epel' được cài đặt trên hệ thống. Nếu bạn không có, hãy cài đặt kho lưu trữ epel bằng lệnh yum bên dưới.
Mã:
yum install epel-release -y
Mã:
yum install openvpn easy-rsa -y
Mã:
openvpn --version
ls -lah /usr/share/easy-rsa/
OpenVPN 2.4 với easy-rsa 3 đã được cài đặt.
Bước 2 - Cấu hình Easy-RSA 3
Trong bước này, chúng ta sẽ cấu hình easy-rsa 3 bằng cách tạo tệp 'vars' mới. Tệp 'vars' chứa các thiết lập Easy-RSA 3.Đi đến thư mục '/etc/openvpn/' và sao chép tập lệnh 'easy-rsa'.
Mã:
cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/
Mã:
cd /etc/openvpn/easy-rsa/3/
vim vars
Mã:
set_var EASYRSA "$PWD"set_var EASYRSA_PKI "$EASYRSA/pki"set_var EASYRSA_DN "cn_only"set_var EASYRSA_REQ_COUNTRY "NHẬN DẠNG"set_var EASYRSA_REQ_PROVINCE "Jakarta"set_var EASYRSA_REQ_CITY "Jakarta"set_var EASYRSA_REQ_ORG "CƠ QUAN CHỨNG NHẬN hakase-labs"set_var EASYRSA_REQ_EMAIL "[emailprotected]"set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA"set_var EASYRSA_KEY_SIZE 2048set_var EASYRSA_ALGO rsaset_var EASYRSA_CA_EXPIRE 7500set_var EASYRSA_CERT_EXPIRE 365set_var EASYRSA_NS_SUPPORT "không"set_var EASYRSA_NS_COMMENT "CƠ QUAN CHỨNG NHẬN HAKASE-LABS"set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"set_var EASYRSA_DIGEST "sha256"
Lưu ý:
- Thay đổi giá trị của các biến theo nhu cầu.
- Tăng 'EASYRSA_KEY_SIZE' để bảo mật tốt hơn.
- Thay đổi 'EASYRSA_CA_EXPIRE' và 'EASYRSA_CERT_EXPIRE'.
Mã:
chmod +x vars
Bước 3 - Xây dựng Khóa OpenVPN
Trong bước này, chúng ta sẽ xây dựng các khóa OpenVPN dựa trên tệp easy-rsa 3 'vars' mà chúng ta đã tạo. Chúng ta sẽ xây dựng khóa CA, khóa Máy chủ và Khóa Máy khách, tệp DH và CRL PEM.Chúng ta sẽ xây dựng tất cả các khóa đó bằng dòng lệnh 'easyrsa'. Đi đến thư mục '/etc/openvpn/easy-rsa/3'.
Mã:
cd /etc/openvpn/easy-rsa/3/
Khởi tạo và xây dựng CA
Trước khi xây dựng bất kỳ khóa nào, chúng ta cần khởi tạo thư mục PKI và xây dựng khóa CA.Khởi tạo thư mục PKI và xây dựng khóa CA bằng lệnh bên dưới.
Mã:
./easyrsa init-pki
./easyrsa build-ca
Xây dựng khóa máy chủ
Bây giờ chúng ta muốn xây dựng khóa máy chủ và chúng ta sẽ xây dựng khóa máy chủ có tên 'hakase-server'.Xây dựng khóa máy chủ 'hakase-server' bằng lệnh bên dưới.
Mã:
./easyrsa gen-req hakase-server nopass
Lưu ý:
- nopass = tùy chọn để vô hiệu hóa mật khẩu cho khóa 'hakase-server'.
Mã:
./easyrsa sign-req server hakase-server
Xác minh tệp chứng chỉ bằng lệnh OpenSSL và đảm bảo không có lỗi.
Mã:
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
Xây dựng khóa máy khách
Bây giờ chúng ta cần xây dựng khóa cho máy khách. Chúng tôi sẽ tạo khóa máy khách mới có tên là 'client01'.Tạo khóa 'client01' bằng lệnh bên dưới.
Mã:
./easyrsa gen-req client01 nopass
Bây giờ hãy ký khóa 'client01' bằng chứng chỉ CA của chúng tôi như bên dưới.
Mã:
./easyrsa sign-req client client01
Chứng chỉ máy khách có tên 'client01' đã được tạo, hãy xác minh chứng chỉ máy khách bằng lệnh openssl.
Mã:
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Xây dựng Diffie-Hellman Khóa
Hành động này sẽ mất nhiều thời gian, tùy thuộc vào độ dài khóa mà chúng ta đã chọn và entropy khả dụng trên máy chủ. Chúng ta sẽ sử dụng khóa có độ dài mà chúng ta xác định trên tệp 'vars'.Tạo khóa Diffie-Hellman bằng lệnh bên dưới.
Mã:
./easyrsa gen-dh
Tùy chọn: Tạo khóa CRL
Khóa CRL (Danh sách thu hồi chứng chỉ) sẽ được sử dụng để thu hồi khóa máy khách. Nếu bạn có nhiều chứng chỉ máy khách trên máy chủ vpn của mình và bạn muốn thu hồi một số khóa, bạn chỉ cần thu hồi bằng lệnh easy-rsa.Nếu bạn muốn thu hồi một số khóa, hãy chạy lệnh như bên dưới.
Mã:
./easyrsa recall someone
Mã:
./easyrsa gen-crl
Sao chép tệp chứng chỉ
Tất cả các chứng chỉ đã được tạo, bây giờ hãy sao chép các tệp chứng chỉ và tệp PEM.Sao chép khóa máy chủ và chứng chỉ.
Mã:
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
Mã:
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
Mã:
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
Bước 4 - Cấu hình OpenVPN
Trong bước này, chúng ta sẽ tạo cấu hình mới 'server.conf' cho máy chủ openvpn.Vào thư mục '/etc/openvpn/' và tạo tệp cấu hình mới 'server.conf' bằng vim.
Mã:
cd /etc/openvpn/
vim server.conf
Mã:
# Cổng OpenVPN, Giao thức và Tunport 1194proto udpdev tun# Chứng chỉ máy chủ OpenVPN - CA, khóa máy chủ và chứng chỉca /etc/openvpn/server/ca.crtcert /etc/openvpn/server/hakase-server.crtkey /etc/openvpn/server/hakase-server.key#Khóa DH và CRLdh /etc/openvpn/server/dh.pemcrl-verify /etc/openvpn/server/crl.pem# Cấu hình mạng - Mạng nội bộ# Chuyển hướng tất cả kết nối qua máy chủ OpenVPNserver 10.10.1.0 255.255.255.0push "redirect-gateway def1"# Sử dụng DNS từ https://dns.watchpush "dhcp-option DNS 84.200.69.80"push "dhcp-option DNS 84.200.70.40"# Cho phép nhiều máy khách kết nối với cùng một khóa chứng chỉduplicate-cn# Bảo mật TLScipher 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# Cấu hình kháckeepalive 20 60persist-keypersist-tuncomp-lzo yesdaemonuser nobodygroup nobody# Nhật ký OpenVPNlog-append /var/log/openvpn.logverb 3
Cấu hình cho OpenVPN đã được tạo.
Bước 5 - Bật Port-Forwarding và Cấu hình Routing Firewalld
Trong bước này, chúng ta sẽ kích hoạt mô-đun hạt nhân chuyển tiếp cổng và cấu hình định tuyến 'Firewalld' cho OpenVPN.Kích hoạt mô-đun hạt nhân chuyển tiếp cổng bằng cách chạy các lệnh sau.
Mã:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
Thêm dịch vụ 'openvpn' vào dịch vụ danh sách firewalld và thêm giao diện 'tun0' vào vùng tin cậy firewalld.
Mã:
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Mã:
firewall-cmd --permanent --zone=trusted --add-masquerade
Mã:
SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
Mã:
firewall-cmd --reload
Mã:
systemctl start openvpn@server
systemctl enable openvpn@server
Kiểm tra bằng các lệnh bên dưới.
Mã:
netstat -plntu
systemctl status openvpn@server
Bước 6 - Thiết lập máy khách OpenVPN
Vào thư mục '/etc/openvpn/client' và tạo tệp cấu hình máy khách openvpn mới 'client01.ovpn' bằng vim.
Mã:
cd /etc/openvpn/client
vim client01.ovpn
Mã:
clientdev tunproto udpremote 139.xx.xx.xx 1194ca ca.crtcert client01.crtkey client01.keycipher AES-256-CBCauth SHA512auth-nocachetls-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-SHA256resolv-retry infinite
compress lzo
nobindpersist-keypersist-tunmute-replay-warningsverb 3
Bây giờ hãy nén thư mục '/etc/openvpn/client' thành tệp 'zip' hoặc 'tar.gz' và tải xuống tệp đã nén bằng scp từ máy cục bộ của bạn máy tính.
Nén thư mục '/etc/openvpn/client' vào tệp 'client01.tar.gz'.
Mã:
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*
Mã:
scp [emailprotected]:/etc/openvpn/client01.tar.gz .
Bước 7 - Kiểm tra OpenVPN
Kiểm tra trên Máy khách.- Trên Linux
Cài đặt gói OpenVPN và nếu bạn muốn cấu hình GUI, hãy cài đặt OpenVPN network-manager.
Mã:
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
Mã:
openvpn --config client01.ovpn
Mã:
curl ifconfig.io
Trên Mac OS
Tải xuống Tunnelblick và cài đặt.Giải nén tệp 'client01.tar.gz' và đổi tên thư mục 'client' thành 'client01.tblk'.
Mã:
tar -xzvf client01.tar.gz
mv client client01.tblk
Bây giờ hãy kết nối thông qua Tunnelblick trên thanh trên cùng.