在 Rocky Linux 8 上設置 OpenVPN 服務器


在本指南中,您將學習如何在 Rocky Linux 8 上安裝和設置 OpenVPN 服務器。 OpenVPN 是一款功能強大且靈活的開源 VPN 軟件,它使用 OpenSSL 庫的所有加密、身份驗證和身份驗證功能通過單個 UDP 或 TCP 端口安全地建立 IP 網絡。幫助通過公共網絡擴展專用網絡,同時在專用網絡上保持可實現的安全性。

在 Rocky Linux 8 上設置 OpenVPN 服務器

安裝 EPEL 存儲庫

最新的 OpenVPN 包由 RockyLinux8 和其他類似的衍生 EPEL 存儲庫提供。 通過運行以下命令可以在 Rocky Linux 8 上安裝 EPEL:

dnf install epel-release -y

在 Rocky Linux 8 上安裝 OpenVPN

一旦 EPEL 存儲庫就位,您可以運行以下命令在 RockyLinux8 上安裝 OpenVPN 包。

dnf install openvpn

在 RockyLinux8 上安裝 Easy-RSACA 實用程序

Easy-RSA 包是一個基於 shell 的 CA 實用程序,用於生成 SSL 密鑰對以保護 VPN 連接。

dnf install easy-rsa

創建 OpenVPN 公鑰基礎設施

設置 OpenVPN 服務器的第一步是創建一個 PKI,其中包含 OpenVPN 服務器和連接的客戶端的公鑰和私鑰,以及用於簽署 OpenVPN 服務器和客戶端證書的主證書頒發機構證書和私鑰。做。如果可能,出於安全原因,您應該在另一台運行 OpenVPN 的服務器上創建 PKI。

初始化 PKI

Easy-RSA 用於 PKI 管理。 Easy-RSA 腳本安裝在 /usr/share/easy-rsa 目錄。

為防止升級過程中 Easy-RSA 創建的配置被覆蓋,請將腳本複製到另一個目錄。 /etc 目錄。

mkdir /etc/easy-rsa
cp -air /usr/share/easy-rsa/3/* /etc/easy-rsa/

放置腳本後,進入目錄並初始化PKI。

cd /etc/easy-rsa/
./easyrsa init-pki

命令輸出示例;

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/easy-rsa/pki

生成證書頒發機構 (CA) 證書和密鑰

然後在上面的 Easy-RSA 目錄中運行以下命令,生成 CA 證書和用於簽署證書的密鑰。

./easyrsa build-ca

這將提示您輸入 CA 密鑰的密碼和服務器的公用名。

Using SSL: openssl OpenSSL 1.1.1g FIPS  21 Apr 2020

Enter New CA Key Passphrase: 
Re-Enter New CA Key Passphrase: 
Generating RSA private key, 2048 bit long modulus (2 primes)
........................................+++++
....................................................+++++
e is 65537 (0x010001)
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) [Easy-RSA CA]:Kifarunix-demo CA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/easy-rsa/pki/ca.crt

證書文件 /etc/easy-rsa/pki/ca.crt..

生成 DiffieHellman 參數

在與上述相同的 Easy-RSA 目錄中,運行以下命令以生成 Diffie-Hellman 密鑰文件,您可以在與連接的客戶端進行 TLS 握手期間使用該文件進行密鑰交換。

./easyrsa gen-dh

命令完成需要一些時間。然後將DH參數存儲在 /etc/easy-rsa/pki/dh.pem 文檔。

生成 OpenVPN 服務器證書和密鑰

要生成 OpenVPN 服務器證書和私鑰,請運行以下命令:

cd /etc/easy-rsa
./easyrsa build-server-full server nopass

運行該命令時,系統將提示您輸入上面創建的 CA 密鑰的密碼。

nopass 禁止在證書中使用密碼。

Using SSL: openssl OpenSSL 1.1.1g FIPS  21 Apr 2020
Generating a RSA private key
.....+++++
...............................+++++
writing new private key to '/etc/easy-rsa/pki/easy-rsa-10170.VLZsfK/tmp.4TRoOP'
-----
Using configuration from /etc/easy-rsa/pki/easy-rsa-10170.VLZsfK/tmp.jTJJ7f
Enter pass phrase for /etc/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Oct  3 18:03:20 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

生成基於散列的消息認證碼 (HMAC) 密鑰

要生成用於向所有 SSL/TLS 握手數據包添加附加 HMAC 簽名的 TLS/SSL 預共享身份驗證密鑰以避免 DoS 攻擊和 UDP 端口氾濫,請運行以下命令:

openvpn --genkey --secret /etc/easy-rsa/pki/ta.key

生成撤銷的證書

要撤銷以前簽署的證書,您需要生成一個已撤銷的證書。

./easyrsa gen-crl
Using SSL: openssl OpenSSL 1.1.1g FIPS  21 Apr 2020
Using configuration from /etc/easy-rsa/pki/easy-rsa-10284.mSzk9F/tmp.qdix0A
Enter pass phrase for /etc/easy-rsa/pki/private/ca.key:

An updated CRL has been created.
CRL file: /etc/easy-rsa/pki/crl.pe

吊銷證書保存如下 /etc/easy-rsa/pki/crl.pem..

將服務器證書和密鑰複製到服務器目錄

然後將所有生成的證書/密鑰複製到 OpenVPN 服務器配置目錄。

cp -rp /etc/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private} /etc/openvpn/server/

生成 OpenVPN 客戶端證書和密鑰

要生成 OpenVPN 客戶端證書和私鑰,請運行以下命令:

cd /etc/easy-rsa
./easyrsa build-client-full gentoo nopass

樣本輸出;

Using SSL: openssl OpenSSL 1.1.1g FIPS  21 Apr 2020
Generating a RSA private key
........................+++++
.........................................................................................+++++
writing new private key to '/etc/easy-rsa/pki/easy-rsa-10316.rcXRdS/tmp.tauo7u'
-----
Using configuration from /etc/easy-rsa/pki/easy-rsa-10316.rcXRdS/tmp.RxlTaw
Enter pass phrase for /etc/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'gentoo'
Certificate is to be certified until Oct  3 18:05:23 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

在哪裡 gentoo 生成證書和密鑰的客戶端的名稱。始終為生成證書和密鑰的每個客戶端使用唯一的通用名稱。

為第二個客戶端生成

./easyrsa build-client-full johndoe nopass

將客戶端證書和密鑰複製到客戶端目錄

在 OpenVPN 客戶端目錄中為每個客戶端創建一個目錄

mkdir /etc/openvpn/client/{gentoo,johndoe}

然後將所有客戶端生成的證書/密鑰和 CA 證書複製到 OpenVPN 客戶端配置目錄。你能行的

cp -rp /etc/easy-rsa/pki/{ca.crt,issued/gentoo.crt,private/gentoo.key} /etc/openvpn/client/gentoo
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/johndoe.crt,private/johndoe.key} /etc/openvpn/client/johndoe/

使用 RockyLinux8 配置 OpenVPN 服務器

OpenVPN 在文檔目錄中附帶了一個示例配置文件。將文件複製到 /etc/openvpn/server/ 更改它以滿足您的需求。

cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

打開配置進行更改。

vim /etc/openvpn/server/server.conf

這份文件受到高度讚賞。閱讀每個配置選項的說明。

下面列出了最基本的未註釋配置選項。

port 1194
proto udp4
dev tun
ca ca.crt
cert issued/server.crt
key private/server.key  # This file should be kept secret
dh dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 192.168.10.3"
client-to-client
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
auth SHA512

完成更改後,保存配置並退出。

想為您的 OpenVPN 客戶端分配一個固定/靜態 IP 地址嗎?請遵循以下準則。

為 OpenVPN 客戶端分配靜態 IP 地址

創建日誌目錄。

mkdir /var/log/openvpn/

檢查配置並進一步對其進行微調以滿足您的需求。

配置 OpenVPN 服務器路由

為了讓來自客戶端的流量通過服務器的 IP 地址(這有助於屏蔽客戶端的 IP 地址)進行路由,必須在 OpenVPN 服務器上啟用 IP 轉發。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

要使更改在不重新啟動服務器的情況下生效,請運行以下命令:

sysctl --system

允許 OpenVPN 服務端口通過防火牆

firewall-cmd --add-port=1194/udp --permanent

啟用 IP 偽裝

firewall-cmd --add-masquerade --permanent

將在指定 OpenVPN 子網(例如本例中的 10.8.0.0/24)上接收到的流量轉發到發送數據包的接口。

通過運行以下命令查找發送數據包的接口:

ip route get 8.8.8.8
8.8.8.8 via 10.0.2.2 dev enp0s3 src 10.0.2.15 uid 0 
    cache

在您的情況下,定義的接口名稱和子網可能不同。相應地更換它們。

firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s3 -j MASQUERADE

重新加載 firewalld 以使更改生效。

firewall-cmd --reload

啟動 OpenVPN 並將其設置為在系統啟動時運行。

systemctl enable --now [email protected]

當 OpenVPN 服務運行時,隧道接口 tun0 被創建。

ip add s
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::afd7:17a6:57ee:7f3b/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

請檢查日誌。

tail /var/log/openvpn/openvpn.log
/sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255
Socket Buffers: R=[212992->212992] S=[212992->212992]
UDPv4 link local (bound): [AF_INET][undef]:1194
UDPv4 link remote: [AF_UNSPEC]
GID set to nobody
UID set to nobody
MULTI: multi_init called, r=256 v=256
IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0
IFCONFIG POOL LIST
Initialization Sequence Completed

OpenVPN 服務器現在正在運行。關於如何在 RockyLinux8 上安裝和設置 OpenVPN 服務器的指南到此結束。

您現在可以繼續配置 OpenVPN 客戶端並通過 VPN 服務器將它們互連。

在 RockyLinux8 上安裝和配置 OpenVPN 客戶端

為 OpenVPN 客戶端分配靜態 IP 地址

配置基於 OpenVPN LDAP 的身份驗證