openvpn (modo de contraseña de nombre de usuario)

Tabla de contenido

1. Introducción

1. Definición

2. Principio

3. Cifrado y Autenticación

2. Cree openvpn en centos 7.5

1. Instale openvpn y easy-rsa (este paquete se usa para hacer el certificado ca)

2. Configure el directorio /etc/openvpn/

3. Crear certificado y clave de servidor

4. Crear un certificado de cliente

5. Coloque los archivos necesarios en el lado del servidor en el directorio etc/openvpn/

6. Coloque los archivos de cliente necesarios en el directorio raíz/cliente/

7. Escriba un archivo de configuración para el servidor

8. iptables establece reglas nacionales y abre el reenvío de rutas

9. Abra el servicio openvpn

3. El cliente se conecta a openvpn

1. Descarga el cliente openvpn e instálalo

2. Configurar el archivo de configuración del cliente e importarlo


1. Introducción

1. Definición

 OpenVPN es un paquete de software para crear túneles encriptados para redes privadas virtuales

2. Principio

El núcleo técnico de OpenVPN es la tarjeta de red virtual, seguida de la implementación del protocolo SSL

La tarjeta de red virtual es un software de controlador implementado mediante el uso de la tecnología de programación de red subyacente. Después de instalar dicho programa, se agregará una tarjeta de red no real al host y se puede configurar como otras tarjetas de red. El programa de servicio puede abrir la tarjeta de red virtual en la capa de aplicación.Si el software de la aplicación (como un navegador web) envía datos a la tarjeta de red virtual, el programa de servicio puede leer los datos. Si el programa de servicio escribe los datos apropiados en la tarjeta de red virtual, el software de la aplicación también puede recibirlos. Las tarjetas de red virtual se implementan en muchos sistemas operativos, lo cual es una razón importante por la que OpenVPN se puede usar en todas las plataformas.

  En OpenVPN , si el usuario accede a una dirección virtual remota (perteneciente a la serie de direcciones que utiliza la tarjeta de red virtual, que es diferente a la dirección real), el sistema operativo enviará el paquete de datos (modo TUN) o trama de datos (TAP modo) a través del mecanismo de enrutamiento En la tarjeta de red virtual, después de que el programa de servicio reciba los datos y realice el procesamiento correspondiente, los enviará desde la red externa a través de SOCKET . Esto completa un proceso de transferencia unidireccional y viceversa. Cuando el programa de servicio remoto recibe datos de la red externa a través de SOCKET , y luego del procesamiento correspondiente, los enviará de vuelta a la tarjeta de red virtual y el software de la aplicación podrá recibirlos.

3. Cifrado y Autenticación

( 1 ) cifrado

  OpenVPN utiliza la biblioteca OpenSSL para cifrar datos y controlar la información. Eso significa que puede usar cualquier algoritmo compatible con OpenSSL . Proporciona una función HMAC de paquetes opcional para aumentar la seguridad de la conexión. Además, la aceleración de hardware de OpenSSL también puede mejorar su rendimiento. Las versiones posteriores a la 2.3.0 introducen PolarSSL .

( 2 ) Autenticación

OpenVPN proporciona una variedad de métodos de autenticación para confirmar la identidad de ambas partes, que incluyen:

Pre-compartir clave privada

②Certificado de terceros

③Combinación de nombre de usuario /contraseña

  La clave precompartida es la más sencilla, pero al mismo tiempo solo se puede utilizar para crear una VPN punto a punto ; el certificado de terceros basado en PKI proporciona las funciones más completas, pero requiere un mantenimiento adicional de un Sistema de certificados PKI . Después de OpenVPN2.0, se introduce el método de autenticación de combinación de nombre de usuario y contraseña, que puede omitir el certificado del cliente, pero aún requiere un certificado de servidor para el cifrado.

2. Cree openvpn en centos 7.5

1. Instale openvpn y easy-rsa (este paquete se usa para hacer el certificado ca )

( 1 ) Instale la fuente del almacén epel

yum install epel-release -y

( 2 ) Instalar openvpn

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

( 3 ) En github , descargue la última versión de easy-rsa

https://github.com/OpenVPN/easy-rsa paquete de descarga  

②Subir , descomprimir

[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. Configure el directorio /etc/openvpn/

( 1 ) Cree un directorio y copie el directorio easy-rsa

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

( 2 ) Configure, edite el archivo vars y configure según su propio entorno

[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. Crear certificado y clave de servidor

Ingrese al directorio /etc/openvpn/easy-rsa/easyrsa3/

①Inicialización _

[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

Crear un certificado raíz

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

Nota: En la parte anterior, debe ingresar la contraseña de PEM Frase de contraseña de PEM , ingrésela dos veces, esta contraseña debe recordarse, de lo contrario no podrá firmar el certificado en el futuro. También debe ingresar el nombre común , que puede configurar para que sea único.

Crear un certificado del lado del servidor

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

En este proceso, debe ingresar el nombre común , que es opcional pero no es lo mismo que el certificado raíz anterior

④Firmar el certificado del servidor

[root@localhost easyrsa3]# ./easyrsa firmar servidor servidor

En este comando , debe confirmar la generación, debe ingresar y también debe proporcionar la contraseña cuando creamos la CA en ese momento. Si olvidas tu contraseña, vuelves a empezar desde cero

⑤Cree Diffie-Hellman para garantizar que la clave atraviese el comando de la red insegura

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

4. Crear un certificado de cliente

①Ingrese al directorio raíz para crear una nueva carpeta de cliente , la carpeta puede ser nombrada a voluntad, luego copie la carpeta easy-ras obtenida de la descompresión anterior a la carpeta de cliente e ingrese al siguiente directorio

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

②Inicialización _

[root@localhost easyrsa3]# ./easyrsa init-pki // Ingrese sí para confirmar

③Cree una clave de cliente y genere un certificado (recuerde generar la contraseña ingresada por su propio inicio de sesión de cliente)

 [root@localhost easyrsa3]# ./easyrsa gen-req nombre de usuario // Defina el nombre usted mismo

④Importar la solicitud de usuario obtenida y firmar el certificado

a. Vaya a /etc/openvpn/easy-rsa/easyrsa3/

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

B. solicitud de importación

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

C. Certificado de firma

[root@localhost easyrsa3]# ./easyrsa firma el nombre de usuario del cliente

Nota: El cliente se genera aquí , por lo que debe ser un cliente y el nombre de usuario debe ser coherente con el nombre importado previamente.

El certificado de firma anterior es similar al del servidor , por lo que no tomaré una captura de pantalla, pero aún debe ingresar la contraseña de la CA durante el período

5. Coloque los archivos necesarios en el lado del servidor en el directorio etc/openvpn/

Certificado de CA , certificado de servidor, clave secreta

[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. Coloque los archivos de cliente necesarios en el directorio raíz/cliente/

El certificado del cliente, la clave secreta y si desea iniciar sesión con el modo clave, cópielo en el cliente y cambie el modo de inicio de sesión. Este artículo utiliza el nombre de usuario y la contraseña para iniciar sesión.

[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

 Ver el archivo ca del cliente para copiarlo en el archivo de configuración del cliente

7. Escriba un archivo de configuración para el servidor

( 1 ) Cuando haya instalado openvpn , proporcionará un ejemplo de archivo de configuración del servidor , habrá un archivo server.conf en /usr/share/doc/openvpn-2.4.11/sample/sample-config-files /etc/openvpn

[raíz@localhost ~]# rpm -ql openvpn |grep servidor.conf

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

( 2 ) Modificar el archivo de configuración

[raíz@localhost ~]# vim /etc/openvpn/server.conf

[root@localhost ~]# grep '^[^#|;]' La modificación de /etc/openvpn/server.conf es la siguiente:

A. El archivo de configuración del modo de inicio de sesión clave no es muy práctico y puede ignorarse. Utilice el archivo de configuración 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. Archivo de configuración del modo de inicio de sesión con nombre de usuario y contraseña

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 ) Configurar archivos de usuario y verificar 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 ) Configurar permisos

[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 establece reglas nacionales y abre el reenvío de rutas

[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. Abra el servicio 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. El cliente se conecta a openvpn

1. Descarga el cliente openvpn e instálalo

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

Solo descarga e instala

2. Configurar el archivo de configuración del cliente e importarlo

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. Iniciar sesión

Cuarto, optimización openvpn

1. Configurar enrutamiento y dns

Agregue una ruta al archivo de configuración principal de openvpn. Cuando el cliente accede al segmento de red especificado, se usa la línea vpn. En otras ocasiones, se usa la red original de la máquina para evitar operaciones innecesarias que ocupan el tráfico de la línea vpn.

Agregue dhcp para obtener dns automáticamente, puede especificar dns de 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. Deshabilitar compresión comp-lzo

La función de compresión comp-lzo se elimina tanto en el servidor como en el cliente, y el rendimiento mejora de 2 a 4 veces

3. Cambiar el protocolo proto tcp---->proto udp puerto 21194

Todos sabemos que udp es mucho más rápido que tcp, cambiar el protocolo y el número de puerto no solo acelera, sino que también mejora la seguridad.

port 21194
proto udp

4. Configure una cuenta para múltiples inicios de sesión

duplicate-cn

5. Errores

1, sin certificado de servidor

Vie Apr 14 17:49:21 2023 ADVERTENCIA: No se ha habilitado ningún método de verificación del certificado del servidor. Consulte http://openvpn.net/howto.html#mitm para obtener más información.
Resuelva agregando el archivo del cliente

servidor remoto-cert-tls

2. Al importar el archivo, se encuentra un error: falta certificado externo

Resuelto agregando en el archivo del cliente.

client-cert-not-required 

Supongo que te gusta

Origin blog.csdn.net/zhangxueleishamo/article/details/130130211
Recomendado
Clasificación