Tengo la pregunta exacta hace unos meses, pero además, quería tener una conexión IPv6 si es posible. Puede que le interesen mis preguntas sobre Serverfault:
Solo tenía una NIC ("interfaz de red") en mi servidor para usar. En mi configuración, NetworkManager no fue suficiente porque necesito ejecutar un script personalizado para admitir IPv6. Sin embargo, por simplicidad, usaré NetworkManager aquí y omitiré el soporte de IPv6.
Primero, solo tome una decisión sobre el método de autenticación. Usaré el método de certificado más seguro que funciona como SSL: durante el protocolo de enlace se elige un secreto común que se utilizará para la sesión. Los otros métodos son una clave compartida; Un nombre de usuario y contraseña.
Servidor
1. Prepárate
Primero, instale el servidor openvpn. Esto es tan fácil como sudo apt-get install openvpn
. La parte difícil es configurarlo. La configuración está presente en /etc/openvpn
.
2. Configure la autenticación
El servidor necesita certificados para identificarse a sí mismo y a sus clientes. Estos certificados se recuperan de una CA (Autoridad Común). La creación de los certificados y las claves privadas relacionadas se puede hacer en cualquier máquina, no es necesario que se haga en el servidor. Si eres realmente paranoico, debes hacerlo en una máquina que no esté conectada a una red y usar una tarjeta de memoria para transferir los certificados.
Crear una CA y certificados para el servidor
Este paso debe realizarse una vez, a menos que la clave privada de su CA se vea comprometida. En ese caso, se pueden crear certificados válidos que serán aceptados por el servidor, resultando en una violación de seguridad.
La documentación oficial sugiere hacer la administración en /etc/openvpn
. No soy un gran fanático de ejecutar todo como root, por lo que lo pondré en un directorio diferente.
Cree el directorio de administración y copie los archivos en él ejecutando:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- Edite los valores predeterminados
vars
según sea necesario, por ejemplo, ajuste KEY_SIZE=2048
porque es paranoico.
Cargue las variables y cree el directorio de claves ejecutando:
. vars
Si obtiene un error que No ... openssl.cnf file could be found
Further invocations will fail
, ejecute ln -s openssl-1.0.0.cnf openssl.cnf
, . vars
nuevamente.
Si es la primera vez que usa esta CA, prepare el entorno de claves. No , no ejecutar este comando si desea mantener su CA. creado previamente Hacerlo requerirá que implemente una nueva ca.crt
.
./clean-all
- Cree la CA ejecutando
./build-ca
. Puede completar los detalles que desee, pero tenga en cuenta que esta información será visible en los archivos de registro cuando los clientes se conecten al servidor. Esto creará los archivos ca.key
y ca.crt
en la subcarpeta keys
. Mantenga el ca.key
archivo en secreto en todas las circunstancias . De lo contrario, cualquiera que tenga la clave podrá conectarse a su servidor.
- Si tiene un certificado anterior que se perdió o caducó, primero debe revocar el anterior con
./revoke-full server
. De lo contrario, obtendrá un error en la base de datos.
Cree el certificado para el servidor ejecutando:
./build-key-server server
Cuando se le solicite una contraseña, déjela vacía a menos que esté dispuesto a ingresarla cada vez que se inicie el servidor (no recomendado). Confirme al firmar el certificado y al confirmarlo. Aparecerán dos nuevos archivos en el directorio keys
: server.key
y server.crt
.
DH y use prepare para tls-auth
Genere los parámetros de Diffie-Hellman usando:
./build-dh
Por consejos de endurecimiento , uso tls-auth
. Para eso, genere la clave secreta compartida usando:
openvpn --genkey --secret ta.key
El archivo resultante ( ta.key
) también debe distribuirse a los clientes, pero no debe ponerlo en público.
Crear certificados para clientes
Para cada cliente, estos pasos deben repetirse:
Ingrese el directorio en el que creó su CA y el certificado del servidor:
cd ~/openvpn-admin/easy-rsa
Si ha omitido el paso de creación de CA porque ya tiene uno, primero debe cargar las variables:
. vars
- Si está creando nuevos certificados porque los antiguos se perdieron o caducaron , primero debe revocar el anterior con
./revoke-full you
. De lo contrario, obtendrá un error en la base de datos.
Cree el certificado del cliente you.key
y su certificado correspondiente you.crt
:
./build-key you
El CommonName
debe ser único. Deje la contraseña vacía si está utilizando KDE ya que aún no es compatible a partir de 10.10. Al igual que con la generación del certificado del servidor, confirme la firma del certificado y la confirmación de los cambios.
3. Configurar el servicio OpenVPN
Por defecto, OpenVPN se ejecuta como root cuando acepta conexiones. No es una buena idea si se puede acceder al servicio desde el malvado Internet.
Cree un usuario dedicado para OpenVPN, diga openvpn
:
sudo useradd openvpn
Copiar los archivos server.key
, server.crt
, ca.crt
y dh1024.pem
(o dh2048.pem
si ha cambiado el tamaño de clave) del directorio de llaves en /etc/openvpn
. Un permiso de 400 (solo lectura para el propietario) está bien.
sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
Copie el archivo ta.key
también:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
Cree el archivo /etc/openvpn/server.conf
y ponga las siguientes líneas en él:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
# Compress data to save bandwidth
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
# Logs are useful for debugging
log-append openvpn-log
verb 3
mute 10
Establezca los permisos apropiados, no es necesario que sea secreto, pero prefiero no filtrar los detalles de configuración, por lo que:
sudo chmod 640 /etc/openvpn/server.conf
4. Finalizando el servidor
Si ha creado los certificados en el servidor, es una buena idea cifrarlo o sacarlo del servidor. En cualquier caso, no pierdas el ca.key
y server.key
. En el primer caso, otros podrán conectarse a su servidor. En este último, es posible un MITM .
Cliente
Además de la dirección IP del servidor, el administrador del servidor debe entregar los siguientes archivos:
ca.crt
: para verificar los certificados
server.crt
: para verificar el servidor y comunicarse con él
ta.key
: por endurecer la seguridad
you.crt
: identificarse con el servidor
you.key
: es como su contraseña, los permisos de archivo deben ser 400 (solo lectura para el propietario)
1. Instalación
Instale OpenVPN y el complemento NetworkManager (adecuado para KDE y Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
está en el repositorio del universo.
2. Configuración
En el panel de control, use los siguientes detalles:
- Gateway: la dirección IP del servidor
- Tipo: "Certificados (TLS)" (Gnome) o "Certificado X.509" (KDE)
- Certificado CA: ruta a
ca.crt
- Certificado de usuario: ruta a
you.crt
- Clave privada: ruta a
you.key
En avanzado :
- Puerto de puerta de enlace: automático (1194) (no necesita ser cambiado)
- Usar compresión de datos LZO: habilitado
- Usar conexión TCP: deshabilitado
- Usar dispositivo TAP: habilitado
- Cifrado: predeterminado
- Autenticación HMAC: predeterminada
- Utilice la autenticación TLS: habilitada
Especifique la ruta del archivo de clave ta.key
y establezca "Dirección de clave" en 1
.
- ( todo: verificarlo ) el servidor empuja la puerta de enlace predeterminada para que todo el tráfico pase por la conexión VPN. La última vez que lo comprobé, el complemento network-manager-openvpn no lo hizo.
Si no puede hacer que NetworkManager funcione o no desea usarlo, coloque los archivos ( ca.crt
, ...) /etc/openvpn
y cree el /etc/openvpn/client.conf
archivo:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
Si no desea habilitar esta VPN en el momento del arranque, edite /etc/default/openvpn
y descomente la siguiente línea eliminando #
:
#AUTOSTART="none"
Para iniciar esta conexión, ejecute:
sudo /etc/init.d/openvpn start client
client
debe renombrarse si su archivo de configuración no tiene nombre client.conf
. Ejemplo: si ha nombrado su archivo de configuración safe.conf
, debe ejecutarlo sudo /etc/init.d/openvpn start safe
.
Para detener OpenVPN, debe ejecutar:
sudo /etc/init.d/openvpn stop