openvpn (Benutzername-Passwort-Modus)

Inhaltsverzeichnis

1. Einleitung

1. Definition

2. Prinzip

3. Verschlüsselung und Authentifizierung

2. Erstellen Sie OpenVPN auf Centos 7.5

1. Installieren Sie openvpn und easy-rsa (dieses Paket wird zum Erstellen eines CA-Zertifikats verwendet).

2. Konfigurieren Sie das Verzeichnis /etc/openvpn/

3. Erstellen Sie ein Serverzertifikat und einen Schlüssel

4. Erstellen Sie ein Client-Zertifikat

5. Legen Sie die erforderlichen Dateien serverseitig im Verzeichnis etc/openvpn/ ab

6. Legen Sie die erforderlichen Client-Dateien im Verzeichnis root/client/ ab

7. Schreiben Sie eine Konfigurationsdatei für den Server

8. iptables legt NAT-Regeln fest und öffnet die Routenweiterleitung

9. Öffnen Sie den OpenVPN-Dienst

3. Der Client stellt eine Verbindung zu openvpn her

1. Laden Sie den OpenVPN-Client herunter und installieren Sie ihn

2. Konfigurieren Sie die Client-Konfigurationsdatei und importieren Sie sie


1. Einführung

1. Definition

 OpenVPN ist ein Softwarepaket zum Erstellen verschlüsselter Tunnel für virtuelle private Netzwerke

2. Prinzip

Der technische Kern von OpenVPN ist die virtuelle Netzwerkkarte, gefolgt von der Implementierung des SSL- Protokolls

Die virtuelle Netzwerkkarte ist eine Treibersoftware, die mithilfe der zugrunde liegenden Netzwerkprogrammierungstechnologie implementiert wird. Nach der Installation eines solchen Programms wird dem Host eine nicht echte Netzwerkkarte hinzugefügt, die wie andere Netzwerkkarten konfiguriert werden kann. Das Dienstprogramm kann die virtuelle Netzwerkkarte auf der Anwendungsebene öffnen. Wenn die Anwendungssoftware (z. B. ein Webbrowser) Daten an die virtuelle Netzwerkkarte sendet, kann das Dienstprogramm die Daten lesen. Wenn das Dienstprogramm die entsprechenden Daten auf die virtuelle Netzwerkkarte schreibt, kann die Anwendungssoftware diese auch empfangen. In vielen Betriebssystemen sind virtuelle Netzwerkkarten implementiert, was ein wichtiger Grund dafür ist, dass OpenVPN plattformübergreifend genutzt werden kann.

  Wenn der Benutzer in OpenVPN auf eine entfernte virtuelle Adresse zugreift (die zu der von der virtuellen Netzwerkkarte verwendeten Adressreihe gehört und sich von der realen Adresse unterscheidet), sendet das Betriebssystem das Datenpaket (TUN-Modus) oder den Datenrahmen (TAP Modus) über den Routing- Mechanismus. Nachdem das Dienstprogramm die Daten auf der virtuellen Netzwerkkarte empfangen und die entsprechende Verarbeitung durchgeführt hat, sendet es sie über SOCKET aus dem externen Netzwerk . Damit ist ein Transfervorgang in eine Richtung abgeschlossen und umgekehrt. Wenn das Remote-Service-Programm Daten vom externen Netzwerk über SOCKET empfängt und diese nach entsprechender Verarbeitung an die virtuelle Netzwerkkarte zurücksendet, kann die Anwendungssoftware sie empfangen.

3. Verschlüsselung und Authentifizierung

( 1 ) Verschlüsselung

  OpenVPN verwendet die OpenSSL- Bibliothek, um Daten zu verschlüsseln und Informationen zu steuern. Das heißt, es kann jeden von OpenSSL unterstützten Algorithmus verwenden. Es bietet eine optionale Paket -HMAC- Funktion, um die Sicherheit der Verbindung zu erhöhen. Darüber hinaus kann die Hardwarebeschleunigung von OpenSSL auch die Leistung verbessern. Versionen nach 2.3.0 führen PolarSSL ein .

( 2 ) Authentifizierung

OpenVPN bietet eine Vielzahl von Authentifizierungsmethoden zur Bestätigung der Identität beider Parteien, darunter:

Private Schlüssel vorab teilen

②Zertifikat Dritter

③Benutzername /Passwort-Kombination

  Der vorinstallierte Schlüssel ist der einfachste, kann aber gleichzeitig nur zum Erstellen eines Punkt-zu-Punkt- VPN verwendet werden; das auf PKI basierende Drittanbieter-Zertifikat bietet die umfassendsten Funktionen, erfordert jedoch eine zusätzliche Wartung von a PKI- Zertifikatsystem. Nach OpenVPN2.0 wird die Authentifizierungsmethode mit der Kombination aus Benutzername und Passwort eingeführt, bei der das Client-Zertifikat weggelassen werden kann, für die Verschlüsselung jedoch weiterhin ein Serverzertifikat erforderlich ist.

2. Erstellen Sie OpenVPN auf Centos 7.5

1. Installieren Sie openvpn und easy-rsa (dieses Paket wird zum Erstellen eines CA- Zertifikats verwendet).

( 1 ) Installieren Sie die Epel- Warehouse-Quelle

yum install epel-release -y

( 2 ) Installieren Sie openvpn

[root@localhost ~]# yum -y install openvpn

( 3 ) Laden Sie auf Github das neueste Easy-RSA herunter

https://github.com/OpenVPN/easy-rsa Download-Paket  

②Hochladen , dekomprimieren

[root@localhost ~]# mkdir openvpn
[root@localhost  openvpn]# unzip easy-rsa-3.0.5.zip
[root@localhost  openvpn]# mv easy-rsa-3.0.5 easy-rsa

2. Konfigurieren Sie das Verzeichnis /etc/openvpn/

( 1 ) Erstellen Sie ein Verzeichnis und kopieren Sie das easy-rsa- Verzeichnis

[root@localhost  ~]# mkdir -p /etc/openvpn/
[root@localhost  openvpn]# cp -Rp easy-rsa /etc/openvpn/

( 2 ) Konfigurieren Sie, bearbeiten Sie die vars- Datei und konfigurieren Sie sie entsprechend Ihrer eigenen Umgebung

[root@localhost  test]# cd /etc/openvpn/easy-rsa/easyrsa3
[root@localhost  easyrsa3]# cp vars.example vars
[root@localhost  easy-rsa3]# vim vars (将下面6行写入文件)

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Beijing"
set_var EASYRSA_REQ_ORG         "username"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "My OpenVPN"

3. Erstellen Sie ein Serverzertifikat und einen Schlüssel

Geben Sie das Verzeichnis /etc/openvpn/easy-rsa/easyrsa3/ ein

①Initialisierung _

[root@localhost  ~]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@localhost  easyrsa3]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/easyrsa3/pki

Erstellen Sie ein Stammzertifikat

[root@localhost easyrsa3]# ./easyrsa build-ca

Hinweis: Im obigen Teil müssen Sie das PEM- Passwort ( PEM-Passphrase) eingeben und zweimal eingeben. Dieses Passwort muss man sich merken, sonst können Sie das Zertifikat in Zukunft nicht mehr signieren. Sie müssen außerdem den allgemeinen Namen eingeben , den Sie eindeutig festlegen können.

Erstellen Sie ein serverseitiges Zertifikat

[root@localhost easyrsa3]# ./easyrsa gen-req server nopass

In diesem Prozess müssen Sie den allgemeinen Namen eingeben , der optional ist, aber nicht mit dem vorherigen Stammzertifikat identisch ist

④Signieren Sie das Serverzertifikat

[root@localhost easyrsa3]# ./easyrsa sign server server

In diesem Befehl müssen Sie die Generierung bestätigen, Sie müssen „yes“ eingeben und Sie müssen auch das Passwort angeben, als wir die Zertifizierungsstelle zu diesem Zeitpunkt erstellt haben. Wenn Sie Ihr Passwort vergessen, beginnen Sie noch einmal von vorne

⑤Erstellen Sie Diffie-Hellman, um sicherzustellen, dass der Schlüssel den Befehl des unsicheren Netzwerks durchläuft

[root@localhost easyrsa3]# ./easyrsa gen-dh

4. Erstellen Sie ein Client-Zertifikat

①Geben Sie das Stammverzeichnis ein, um einen neuen Client- Ordner zu erstellen . Der Ordner kann nach Belieben benannt werden. Kopieren Sie dann den aus der vorherigen Dekomprimierung erhaltenen Easy-Ras- Ordner in den Client- Ordner und geben Sie das folgende Verzeichnis ein

[root@localhost  ~]# mkdir client
[root@localhost  ~]# cp /etc/openvpn/easy-rsa client -Rp
[root@localhost  ~]# cd client/easy-rsa/easyrsa3/

②Initialisierung _

[root@localhost easyrsa3]# ./easyrsa init-pki // Geben Sie zur Bestätigung „Ja“ ein

③Erstellen Sie einen Client- Schlüssel und generieren Sie ein Zertifikat (denken Sie daran, das von Ihrem eigenen Client-Login eingegebene Passwort zu generieren).

 [root@localhost easyrsa3]# ./easyrsa gen-req username // Definieren Sie den Namen selbst

④Importieren Sie die erhaltene Benutzeranforderung und signieren Sie das Zertifikat

a. Gehen Sie zu /etc/openvpn/easy-rsa/easyrsa3/

[root@localhost easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/

B. Importanforderung _

[root@localhost  easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/username.req username

c. Signaturzertifikat

[root@localhost easyrsa3]# ./easyrsa signiert den Client-Benutzernamen

Hinweis: Der Client wird hier generiert , daher muss es sich um einen Client handeln und der Benutzername muss mit dem zuvor importierten Namen übereinstimmen

Das obige Signaturzertifikat ähnelt dem des Servers , daher werde ich keinen Screenshot machen, aber Sie müssen während des Zeitraums trotzdem das Passwort der Zertifizierungsstelle eingeben

5. Legen Sie die erforderlichen Dateien serverseitig im Verzeichnis etc/openvpn/ ab

CA- Zertifikat, Serverzertifikat, geheimer Schlüssel

[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn/

6. Legen Sie die erforderlichen Client-Dateien im Verzeichnis root/client/ ab

Das Zertifikat des Clients, den geheimen Schlüssel und wenn Sie sich im Schlüsselmodus anmelden möchten, kopieren Sie es in den Client und ändern Sie den Anmeldemodus. In diesem Artikel werden der Benutzername und das Passwort zum Anmelden verwendet

[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/username.crt /root/client/
[root@localhost  ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/username.key /root/client

 Sehen Sie sich die Client-CA-Datei zum Kopieren in die Client-Konfigurationsdatei an

7. Schreiben Sie eine Konfigurationsdatei für den Server

( 1 ) Wenn Sie openvpn installiert haben , stellt er ein Beispiel für eine Serverkonfigurationsdatei bereit. Unter /usr/share/doc/openvpn-2.4.11/sample/sample-config-files befindet sich eine server.conf- Datei, die wir kopieren diese Datei nach /etc/openvpn

[root@localhost ~]# rpm -ql openvpn |grep server.conf

[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/

( 2 ) Ändern Sie die Konfigurationsdatei

[root@localhost ~]# vim /etc/openvpn/server.conf

[root@localhost ~]# grep '^[^#|;]' Die Änderung von /etc/openvpn/server.conf ist wie folgt:

A. Die Konfigurationsdatei für den Schlüssel-Anmeldemodus ist nicht sehr praktisch und kann ignoriert werden. Verwenden Sie die B-Konfigurationsdatei

local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3

B. Konfigurationsdatei für den Anmeldemodus mit Benutzername und Passwort

local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3
script-security 3
auth-user-pass-verify /etc/openvpn/checkpw.sh via-env    #指定用户认证脚本
username-as-common-name
verify-client-cert none

( 3 ) Benutzerdateien konfigurieren und Skripte überprüfen

#检查脚本
[root@localhost ~]# vim /etc/openvpn/checkpw.sh 
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/pw-file"
LOG_FILE="/var/log/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

###########################################################

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1


#密码文件
[root@localhost ~]# vim /etc/openvpn/pw-file 
user1 123456789
user2 haha2023

( 4 ) Konfigurieren Sie Berechtigungen

[root@localhost  ~]# mkdir /var/log/openvpn
[root@localhost  ~]# chown -R openvpn.openvpn /var/log/openvpn/
[root@localhost  ~]# chown -R openvpn.openvpn /etc/openvpn/*

8. iptables legt NAT- Regeln fest und öffnet die Routenweiterleitung

[root@localhost  ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
[root@localhost  ~]# iptables -vnL -t nat
[root@localhost  ~]# vim /etc/sysctl.conf //打开路由转发
net.ipv4.ip_forward = 1
[root@localhost  ~]# sysctl -p

9. Öffnen Sie den OpenVPN- Dienst

[root@localhost  ~]# openvpn /etc/openvpn/server.conf &

[root@localhost ~]# netstat -ntlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      14948/openvpn       

3. Der Client stellt eine Verbindung zu openvpn her

1. Laden Sie den OpenVPN- Client herunter und installieren Sie ihn

https://download.csdn.net/download/zhangxueleishamo/87688762

Einfach herunterladen und installieren

2. Konfigurieren Sie die Client- Konfigurationsdatei und importieren Sie sie

client
proto tcp
remote 服务器ip 1194
dev tun
nobind
persist-key
persist-tun
cipher AES-128-GCM
verb 3
comp-lzo
auth-user-pass
<ca>
将上文二.6中ca密码在上文中有直接复制进来,即可
</ca>

 3. Anmelden

Viertens OpenVPN-Optimierung

1. Routing und DNS konfigurieren

Fügen Sie der Hauptkonfigurationsdatei von openvpn eine Route hinzu. Wenn der Client auf das angegebene Netzwerksegment zugreift, wird die VPN-Leitung verwendet. Zu anderen Zeiten wird das ursprüngliche Netzwerk des Computers verwendet, um unnötige Vorgänge zu vermeiden, die den VPN-Leitungsverkehr belegen.

Fügen Sie DHCP hinzu, um DNS automatisch abzurufen. Sie können Intranet-DNS angeben

push "route 10.0.0.0 255.0.0.0"
#push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 202.106.0.20"
push "dhcp-option DNS 94.140.14.14"

 2. Deaktivieren Sie die Komprimierung comp-lzo

Die Komprimierungsfunktion comp-lzo wird sowohl auf dem Server als auch auf dem Client entfernt und die Leistung wird um das 2- bis 4-fache verbessert

3. Ändern Sie das Protokoll-Proto-TCP---->Proto-UDP-Port 21194

Wir alle wissen, dass UDP viel schneller ist als TCP. Das Ändern des Protokolls und der Portnummer beschleunigt nicht nur die Geschwindigkeit, sondern verbessert auch die Sicherheit

port 21194
proto udp

4. Konfigurieren Sie ein Konto für mehrere Anmeldungen

duplicate-cn

5. Fehler

1、Kein Serverzertifikat

Fr. 14. April 17:49:21 2023 WARNUNG: Es wurde keine Methode zur Überprüfung des Serverzertifikats aktiviert. Weitere Informationen finden Sie unter http://openvpn.net/howto.html#mitm.
Gelöst durch Hinzufügen in der Client-Datei

Remote-Cert-TLS-Server

2. Beim Importieren der Datei wird ein Fehler festgestellt: externes Zertifikat fehlt

Gelöst durch Hinzufügen der Client-Datei

client-cert-not-required 

Ich denke du magst

Origin blog.csdn.net/zhangxueleishamo/article/details/130130211
Empfohlen
Rangfolge