¿Cómo configuro OpenVPN para poder usar Internet de forma segura desde un punto de acceso no seguro?

31

Objetivo: Quiero poder usar Internet de manera segura a través de la PC de mi casa mientras mi computadora portátil está conectada a un punto de acceso / punto de acceso abierto.

Yo no sé que puedo usar un túnel SSH / proxy SOCKS, pero no quiero ver alrededor de aplicaciones (por lo que lo utilizan, si es aún posible). Supongo que lo que necesito es una configuración de OpenVPN, así que estoy buscando una guía detallada sobre cómo:

  1. Instalar y configurar el servidor OpenVPN
  2. Configurar el cliente OpenVPN (NetworkManager)

Las versiones de Ubuntu en las que debería funcionar son 10.10 y 11.04.

htorque
fuente
Esta es más una pregunta por defecto del servidor que una de Ubuntu, creo.
Luis Alvarado
1
@Cyrex: 1) es, 2) probablemente no
Lekensteyn

Respuestas:

40

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.

  1. 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
    
  2. Edite los valores predeterminados varssegún sea necesario, por ejemplo, ajuste KEY_SIZE=2048porque es paranoico.
  3. Cargue las variables y cree el directorio de claves ejecutando:

    . vars
    
  4. 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, . varsnuevamente.

  5. 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
    
  6. 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.keyy ca.crten la subcarpeta keys. Mantenga el ca.keyarchivo en secreto en todas las circunstancias . De lo contrario, cualquiera que tenga la clave podrá conectarse a su servidor.
  7. 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.
  8. 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.keyy 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:

  1. Ingrese el directorio en el que creó su CA y el certificado del servidor:

    cd ~/openvpn-admin/easy-rsa
    
  2. Si ha omitido el paso de creación de CA porque ya tiene uno, primero debe cargar las variables:

    . vars
    
  3. 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.
  4. Cree el certificado del cliente you.keyy su certificado correspondiente you.crt:

    ./build-key you
    

    El CommonNamedebe 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.

  1. Cree un usuario dedicado para OpenVPN, diga openvpn:

    sudo useradd openvpn
    
  2. Copiar los archivos server.key, server.crt, ca.crty dh1024.pem(o dh2048.pemsi 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}
    
  3. Copie el archivo ta.keytambién:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Cree el archivo /etc/openvpn/server.confy 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
    
  5. 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.keyy 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.keyy 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/openvpny cree el /etc/openvpn/client.confarchivo:

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/openvpny descomente la siguiente línea eliminando #:

#AUTOSTART="none"

Para iniciar esta conexión, ejecute:

sudo /etc/init.d/openvpn start client

clientdebe 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
Lekensteyn
fuente
1
¿Cuál es la configuración del servidor para el inicio de sesión basado en nombre de usuario / contraseña, donde mi cliente no tiene conocimiento para configurar el cliente vpn?
@YumYumYum No tengo idea de cómo usar nombre de usuario / contraseña, eche un vistazo a la página de manual de openvpn ( man openvpn). Las versiones recientes de openvpn tienen la capacidad de incrustar certificados y archivos clave, por lo que quizás sea aún más fácil proporcionar ese archivo de configuración único con instrucciones para el usuario.
Lekensteyn
Tenga en cuenta que las versiones más nuevas de Ubuntu se envían con OpenSSL 1.0.1, y ejecutar el . varscomando anterior puede generar un error de que "se puede encontrar el archivo openssl.cnf. Otras invocaciones fallarán". Debe hacerlo sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, luego ejecutar . varsy los otros comandos.
Dan Dascalescu
@DanDascalescu El script whichopenssllocaliza el openssl-1.0.0.cnfarchivo correctamente para mí (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn
Muy informativo, respuesta completa. ¿Podrías responder esta pregunta ?
JB0x2D1
8

En realidad, no necesita jugar con ninguna aplicación. Esto funciona "al igual que VPN".

  1. Primero instale el tsockspaquete (calcetines temporales):

    sudo apt-get install tsocks
    
  2. Luego edite /etc/tsocks.confe ingrese

    server = 127.0.0.1
    server_port = 3333
    
  3. Ahora, abra una terminal y escriba (esto lo conecta):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Ejecutar (a través de otro terminal o ALT-F2):

    tsocks firefox
    

Ahora, Firefox transmite toda la comunicación a través del servidor SOCKS en su computadora que creó SSH. Esto se canaliza aún más a su máquina doméstica, donde va a la web. Todo lo que necesita en su máquina doméstica es un servidor SSH. Después de la primera vez, solo repita los pasos 3 y 4.

¡Funciona a las mil maravillas! Por desgracia, al cromo no le gustan los tsocks, pero bueno, Firefox funciona.

MarkovCh1
fuente
3
Bueno, vea su última oración: no quiero verificar todos mis programas primero si realmente funcionan bien con tsocks, cuando podría ser solo un clic en el applet NetworkManager con OpenVPN.
htorque
OKAY. Mi respuesta probablemente será útil para las personas que desean una solución rápida para acceder a sitios web.
MarkovCh1
1

La solución de túnel SSH es más fácil de lo que piensas. Un programa como gSTM iniciará / detendrá los túneles con una GUI. Luego, abra Network Proxy y cámbielo de Conexión directa a Internet a Configuración manual de proxy, presione "Aplicar en todo el sistema" y todas sus aplicaciones deben enviar sus datos por el túnel, sin necesidad de jugar con cada uno individualmente.

Felix
fuente