openvpn (mode mot de passe du nom d'utilisateur)

Table des matières

1. Introduction

1. Définition

2. Principe

3. Chiffrement et authentification

2. Construisez openvpn sur centos 7.5

1. Installez openvpn et easy-rsa (ce package est utilisé pour créer un certificat ca)

2. Configurez le répertoire /etc/openvpn/

3. Créer un certificat et une clé de serveur

4. Créer un certificat client

5. Placez les fichiers nécessaires côté serveur dans le répertoire etc/openvpn/

6. Placez les fichiers client nécessaires dans le répertoire root/client/

7. Ecrire un fichier de configuration pour le serveur

8. iptables définit les règles nat et ouvre la voie de transfert

9. Ouvrez le service openvpn

3. Le client se connecte à openvpn

1. Téléchargez le client openvpn et installez-le

2. Configurez le fichier de configuration du client et importez-le


1. Présentation

1. Définition

 OpenVPN est un progiciel permettant de créer des tunnels cryptés pour les réseaux privés virtuels

2. Principe

Le cœur technique d' OpenVPN est la carte réseau virtuelle, suivie de l'implémentation du protocole SSL

La carte réseau virtuelle est un logiciel pilote implémenté à l'aide de la technologie de programmation réseau sous-jacente. Après avoir installé un tel programme, une carte réseau non réelle sera ajoutée à l'hôte et pourra être configurée comme les autres cartes réseau. Le programme de service peut ouvrir la carte réseau virtuelle au niveau de la couche application. Si le logiciel d'application (tel qu'un navigateur Web) envoie des données à la carte réseau virtuelle, le programme de service peut lire les données. Si le programme de service écrit les données appropriées sur la carte réseau virtuelle, le logiciel d'application peut également les recevoir. Les cartes réseau virtuelles sont implémentées dans de nombreux systèmes d'exploitation, ce qui est une raison importante pour laquelle OpenVPN peut être utilisé sur toutes les plates-formes.

  Dans OpenVPN , si l'utilisateur accède à une adresse virtuelle distante (appartenant à la série d'adresses utilisée par la carte réseau virtuelle, qui est différente de l'adresse réelle), le système d'exploitation enverra le paquet de données (mode TUN) ou la trame de données (TAP mode) via le mécanisme de routage Sur la carte réseau virtuelle, une fois que le programme de service reçoit les données et effectue le traitement correspondant, il les enverra depuis le réseau externe via SOCKET . Ceci termine un processus de transfert à sens unique et vice versa. Lorsque le programme de service à distance reçoit des données du réseau externe via SOCKET , et après le traitement correspondant, il les renverra à la carte réseau virtuelle et le logiciel d'application pourra les recevoir.

3. Cryptage et authentification

( 1 ) cryptage

  OpenVPN utilise la bibliothèque OpenSSL pour chiffrer les données et contrôler les informations. Cela signifie qu'il peut utiliser n'importe quel algorithme pris en charge par OpenSSL . Il fournit une fonction optionnelle HMAC de paquets pour augmenter la sécurité de la connexion. De plus, l'accélération matérielle d' OpenSSL peut également améliorer ses performances. Les versions postérieures à la 2.3.0 introduisent PolarSSL .

( 2 ) Authentification

OpenVPN fournit une variété de méthodes d'authentification pour confirmer l'identité des deux parties, notamment :

Clé privée pré-partagée

②Certificat de tiers

③Combinaison nom d'utilisateur /mot de passe

La clé pré-partagée est la plus simple, mais en même temps elle ne peut être utilisée que pour créer un VPN   point à point ; le certificat tiers basé sur PKI fournit les fonctions les plus complètes, mais nécessite une maintenance supplémentaire d'un Système de certificat PKI . Après OpenVPN2.0, la méthode d'authentification par combinaison nom d'utilisateur/mot de passe est introduite, qui peut omettre le certificat client, mais nécessite toujours un certificat serveur pour le cryptage.

2. Construisez openvpn sur centos 7.5

1. Installez openvpn et easy-rsa (ce package est utilisé pour créer un certificat ca )

( 1 ) Installer la source d'entrepôt epel

yum install epel-release -y

( 2 ) Installer openvpn

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

( 3 ) Sur github , téléchargez le dernier easy-rsa

https://github.com/OpenVPN/easy-rsa télécharger le package  

②Télécharger , décompresser

[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. Configurez le répertoire /etc/openvpn/

( 1 ) Créez un répertoire et copiez le répertoire easy-rsa

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

( 2 ) Configurez, modifiez le fichier vars et configurez en fonction de votre propre environnement

[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. Créer un certificat et une clé de serveur

Entrez le répertoire /etc/openvpn/easy-rsa/easyrsa3/

①Initialisation _

[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

Créer un certificat racine

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

Remarque : Dans la partie ci-dessus, vous devez entrer le mot de passe PEM Phrase de passe PEM , entrez-le deux fois, ce mot de passe doit être mémorisé, sinon vous ne pourrez pas signer le certificat à l'avenir. Vous devez également entrer le nom commun , que vous pouvez définir comme unique.

Créer un certificat côté serveur

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

Dans ce processus, vous devez entrer le nom commun , qui est facultatif mais différent du certificat racine précédent

④Signer le certificat du serveur

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

Dans cette commande , vous devez confirmer la génération, vous devez entrer yes et vous devez également fournir le mot de passe lorsque nous avons créé l'autorité de certification à ce moment-là. Si vous oubliez votre mot de passe, vous recommencez à zéro

⑤Créez Diffie-Hellman pour vous assurer que la clé traverse la commande du réseau non sécurisé

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

4. Créer un certificat client

①Entrez dans le répertoire racine pour créer un nouveau dossier client , le dossier peut être nommé à volonté, puis copiez le dossier easy-ras obtenu à partir de la décompression précédente dans le dossier client , et entrez dans le répertoire suivant

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

②Initialisation _

[root@localhost easyrsa3]# ./easyrsa init-pki // Entrez oui pour confirmer

③Créer une clé client et générer un certificat (n'oubliez pas de générer le mot de passe saisi par votre propre login client)

 [root@localhost easyrsa3]# ./easyrsa gen-req username // Définissez vous-même le nom

④Importez la demande d'utilisateur obtenue et signez le certificat

a. Accédez à /etc/openvpn/easy-rsa/easyrsa3/

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

b. demande d'importation

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

C. Certificat de signature

[root@localhost easyrsa3]# ./easyrsa signe le nom d'utilisateur du client

Remarque : Le client est généré ici , il doit donc s'agir d'un client , et le nom d'utilisateur doit être cohérent avec le nom précédemment importé

Le certificat de signature ci-dessus est similaire au serveur , donc je ne ferai pas de capture d'écran, mais vous devez toujours entrer le mot de passe de l'autorité de certification pendant la période

5. Placez les fichiers nécessaires côté serveur dans le répertoire etc/openvpn/

Certificat CA , certificat serveur, clé secrète

[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. Placez les fichiers client nécessaires dans le répertoire root/client/

Le certificat du client, la clé secrète et si vous souhaitez vous connecter avec le mode clé, copiez-le dans le client et modifiez le mode de connexion. Cet article utilise le nom d'utilisateur et le mot de passe pour se connecter

[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

 Afficher le fichier ca du client pour le copier dans le fichier de configuration du client

7. Ecrire un fichier de configuration pour le serveur

( 1 ) Lorsque vous aurez installé openvpn , il fournira un exemple de fichier de configuration du serveur , il y aura un fichier server.conf sous /usr/share/doc/openvpn-2.4.11/sample/sample-config-files /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 ) Modifier le fichier de configuration

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

[root@localhost ~]# grep '^[^#|;]' La modification de /etc/openvpn/server.conf est la suivante :

A. Le fichier de configuration du mode de connexion par clé n'est pas très pratique et peut être ignoré. Utilisez le fichier de configuration B

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. Fichier de configuration du mode de connexion par nom d'utilisateur et mot de passe

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 ) Configurer les fichiers utilisateur et vérifier les scripts

#检查脚本
[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 ) Configurer les autorisations

[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 définit les règles nat et ouvre la voie de transfert

[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. Ouvrez le service openvpn

[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. Le client se connecte à openvpn

1. Téléchargez le client openvpn et installez-le

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

Il suffit de télécharger et d'installer

2. Configurez le fichier de configuration du client et importez-le

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. Connexion

Quatrièmement, l'optimisation openvpn

1. Configurer le routage et le DNS

Ajoutez une route au fichier de configuration principal d'openvpn. Lorsque le client accède au segment de réseau spécifié, la ligne vpn est utilisée. À d'autres moments, le réseau d'origine de la machine est utilisé pour éviter les opérations inutiles qui occupent le trafic de la ligne vpn.

Ajoutez dhcp pour obtenir automatiquement le DNS, vous pouvez spécifier le DNS intranet

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. Désactiver la compression comp-lzo

La fonction de compression comp-lzo est supprimée à la fois sur le serveur et le client, et les performances sont améliorées de 2 à 4 fois

3. Changez le protocole proto tcp---->proto udp port 21194

Nous savons tous que udp est beaucoup plus rapide que tcp, changer le protocole et le numéro de port non seulement accélère, mais améliore également la sécurité

port 21194
proto udp

4. Configurez un compte pour plusieurs connexions

duplicate-cn

5. Erreurs

1、Aucun certificat de serveur

Fri Apr 14 17:49:21 2023 AVERTISSEMENT : Aucune méthode de vérification de certificat de serveur n'a été activée. Voir http://openvpn.net/howto.html#mitm pour plus d'informations.
Résolu en ajoutant dans le fichier client

serveur distant-cert-tls

2. Lors de l'import du fichier, une erreur est détectée : certificat externe manquant

Résolu en ajoutant dans le fichier client

client-cert-not-required 

Je suppose que tu aimes

Origine blog.csdn.net/zhangxueleishamo/article/details/130130211
conseillé
Classement