¿Cómo usar SSH y VPN en combinación en un solo comando ssh?

¿Cómo usar SSH y VPN en combinación en un solo comando ssh?

En mi configuración, primero necesito conectarme a una VPN y luego debo conectarme a un servidor.

Actualmente me gusta esto:

openvpn myconfig.ovpn
ssh myuser@myserver

lo que hace que todo el tráfico de mi red pase por esa VPN.

Sin embargo, lo hagonoQuiero que todo mi tráfico de datos pase por esta VPN. Usando GNU/Linux, ¿qué herramientas uso para usar una VPN solo en una conexión ssh específica?

Es decir, qué herramientas puedo usar en un script bash para poder hacer lo siguiente:

ssh-over-vpn.sh myuser.ovpn [email protected]

y usar la configuración vpn solo para la conexión ssh a[correo electrónico protegido]?

Mi archivo de configuración actual myuser.ovpn tiene:

client                                                                                                                                                                                        
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 200.200.200.18 443
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-GCM
setenv opt block-outside-dns
key-direction 1
verb 3
<ca> ... </ca> <cert> ...<key> ...<tls-auth> ...

Respuesta1

Sin embargo, no quiero que todo mi tráfico de datos pase por esta VPN. Usando GNU/Linux, ¿qué herramientas uso para usar una VPN solo en una conexión ssh específica?

Cambie la configuración de su cliente OpenVPN anoextraiga la ruta 'predeterminada' del servidor; en su lugar, especifique solo las rutas necesarias:

route-nopull
route 10.0.0.66 255.255.255.255 vpn_gateway

Es decir, qué herramientas puedo usar en un script bash para poder hacer lo siguiente:

No hay mucho para elegir. Herramientas similares son relativamente fáciles para los proxies SOCKS (por ejemplo, torify), ya que los túneles de la capa de transporte se asignan directamente a los sockets que crea el programa empaquetado;un pocoEs más difícil con los túneles de capa IP (VPN), ya que entonces la herramienta de ajuste necesitaría reimplementar la mayor parte de la pila de red del sistema operativo (generando paquetes IP, mapeando los paquetes recibidos a los sockets emulados...) además de reimplementar el protocolo OpenVPN real. .

Lo más parecido que podrías usar esespacios de nombres de red(uno de los componentes básicos de los contenedores) que le da al programa un conjunto completamente aislado de interfaces y tablas de enrutamiento. Es fácil crear un espacio de nombres de red usando unshareo ip netnsy ejecutar programas dentro, pero de forma predeterminada están desconectados (el cliente openvpn no tendría acceso al servidor), por lo que también necesita vincularlo al espacio de nombres "principal" usando veth, etc.

Toda esta configuración del espacio de nombres termina reimplementando partes de Docker/nspawn/etc, por lo que podría ser posible simplemente activar un contenedor Docker que ejecute su cliente OpenVPN y el cliente SSH.

Respuesta2

Por lo tanto, las VPN son inherentemente inconscientes de cualquier cosa que esté por encima de la tercera capa de la red.modelo OSI, lo que significa que no pueden ver qué puertos o protocolos se están utilizando. Quizás sea posible hacer algo de magia con el firewall para lograr el efecto deseado, pero te recomendaría que uses SSH directamente.

Supongo que todos los sistemas y redes involucrados son de su propiedad y están administrados por usted. SSH es un protocolo muy seguro cuando se configura correctamente y debería ser tan seguro de usar en Internet como lo es openvpn. Hay algunos genialesguíaspor ahí para "endurecer" openssh. Algunas otras recomendaciones de seguridad:

  • Cambie el puerto del servidor a algo oscuro.En realidad, esto no lo hace más "seguro" per se, pero sí reduce la cantidad de robots de web scraping que inundan los registros con intentos fallidos de inicio de sesión. Hice esto hace unos años y no he visto ni un solo intento desde entonces.
  • Busque en fail2ban.Este es un software útil que monitorea los intentos de inicio de sesión y "prohíbe" el acceso de las direcciones IP a su servidor después de una serie de fallas agregando una regla de firewall en iptables. Es fantástico.

Una vez que haga eso, puede usar la opción de configuración ProxyJump en openssh para usar esa conexión como túnel para otras conexiones en la LAN.

¡Espero que esto ayude!

información relacionada