====== 13 - Acceso remoto ====== El acceso remoto es un concepto fundamental en los servicios de red que permite a los usuarios interactuar con dispositivos, sistemas o redes desde ubicaciones físicas distintas. Esta tecnología es esencial en entornos modernos, donde la movilidad y la descentralización de los equipos de trabajo son cada vez más comunes. El acceso remoto facilita tareas como la administración de servidores, la transferencia de archivos, el soporte técnico y el teletrabajo, garantizando que los recursos de una red sean accesibles desde cualquier parte del mundo. Sin embargo, también plantea desafíos importantes en términos de seguridad, rendimiento y confiabilidad. En este apartado, exploraremos los conceptos clave, las tecnologías utilizadas, los métodos de implementación y las mejores prácticas para garantizar un acceso remoto seguro y eficiente. ===== Tecnologías ===== El acceso remoto se basa en diversas tecnologías y protocolos que permiten la conexión a dispositivos y redes de manera eficiente y segura. ==== SSH (Secure Shell) ==== **SSH** es un protocolo criptográfico que asegura el acceso remoto a dispositivos, especialmente servidores. Es ampliamente utilizado en sistemas Unix/Linux debido a su robustez y facilidad de uso. * Ofrece cifrado para proteger las comunicaciones frente a ataques. * Permite la autenticación mediante contraseñas o claves públicas/privadas. * Opera en el puerto 22 por defecto. ssh usuario@servidor.com ==== RDP (Remote Desktop Protocol) ==== **RDP**, desarrollado por Microsoft, es una herramienta para acceder de forma remota a escritorios en sistemas Windows. Este protocolo es ideal para administrar máquinas de forma gráfica. * Soporta la transferencia de archivos y la conexión de periféricos. * Compatible con sistemas operativos Windows y algunos clientes multiplataforma. * Opera en el puerto 3389. ==== VPN (Virtual Private Network) ==== Las **VPN** permiten una conexión segura entre un dispositivo remoto y una red interna mediante el cifrado de datos. Son especialmente útiles en entornos corporativos. * Proporcionan privacidad y seguridad frente a redes públicas. * Soportan protocolos como OpenVPN, IPsec o WireGuard. ==== Telnet ==== **Telnet** es uno de los protocolos más antiguos para el acceso remoto. Sin embargo, su falta de cifrado lo hace inseguro para el uso moderno. * Opera en texto plano, por lo que no protege las comunicaciones. * Ha sido sustituido en gran medida por SSH. * Utiliza el puerto 23. ==== SFTP ==== Variante segura de FTP que utiliza SSH para cifrar las transferencias de archivos. sftp usuario@servidor.com ===== SSH ===== SSH es una de las tecnologías más utilizadas para el acceso remoto seguro, especialmente en entornos Linux/Unix. Proporciona un canal cifrado que protege la integridad y confidencialidad de las comunicaciones entre cliente y servidor. ==== Características Principales ==== * **Seguridad**: Utiliza criptografía para proteger los datos en tránsito. * **Versatilidad**: Permite ejecutar comandos remotos, transferir archivos y realizar túneles seguros. * **Compatibilidad**: Disponible en la mayoría de sistemas operativos y dispositivos. * **Extensibilidad**: Soporta autenticación mediante contraseñas, claves públicas/privadas y autenticación multifactor. ==== Estructura Básica de una Conexión SSH ==== La conexión SSH se realiza mediante un cliente y un servidor. El cliente inicia la conexión y proporciona credenciales para autenticarse en el servidor. ssh usuario@servidor.com * **usuario**: Nombre del usuario en el servidor remoto. * **servidor.com**: Dirección IP o nombre de dominio del servidor. ==== Generación de Claves SSH ==== El sistema de claves públicas/privadas es un mecanismo de autenticación asimétrica que proporciona una forma más segura de verificar la identidad entre cliente y servidor. Este método elimina la necesidad de enviar contraseñas a través de la red, reduciendo el riesgo de ataques como el phishing o la captura de credenciales. * **Clave Privada**: Es un archivo que debe permanecer en secreto y almacenarse en el cliente. Es utilizado para demostrar que el cliente es quien afirma ser. * **Clave Pública**: Es un archivo que se comparte libremente y se almacena en el servidor remoto. Su propósito es verificar las conexiones provenientes de la clave privada correspondiente. Ambas claves están matemáticamente relacionadas, de modo que lo que se cifra con una puede ser descifrado únicamente con la otra. === Proceso de Autenticación === * **Intercambio Inicial**: El cliente inicia la conexión con el servidor y declara su intención de autenticarse mediante claves públicas. * **Desafío del Servidor**: El servidor envía un mensaje cifrado (un desafío) utilizando la clave pública almacenada en el archivo ~/.ssh/authorized_keys. * **Validación del Cliente**: El cliente utiliza su clave privada para descifrar el desafío. Una vez descifrado, el cliente envía el resultado de vuelta al servidor. * **Verificación Final**: El servidor utiliza la clave pública para verificar que la respuesta del cliente es correcta. Si todo coincide, se permite el acceso al cliente. === Ventajas del Sistema de Claves Públicas/Privadas === * **Seguridad Mejorada**: No se envían contraseñas por la red, eliminando el riesgo de interceptación. * **Conveniencia**: Permite acceso sin necesidad de introducir contraseñas, especialmente útil en tareas automatizadas como scripts o cron jobs. * **Compatibilidad con MFA**: Puede combinarse con otros métodos de autenticación para mayor seguridad, como contraseñas o tokens. === Archivos Clave en SSH === * **Clave Privada (id_rsa, id_ecdsa, etc.)**: Archivo almacenado localmente en el cliente. Solo debe ser accesible por el propietario. * **Clave Pública (id_rsa.pub, id_ecdsa.pub, etc.)**: Archivo que se transfiere al servidor remoto y se almacena en ~/.ssh/authorized_keys. * **Configuración de Permisos**: * Clave privada: Solo el propietario debe tener permisos de lectura/escritura. * Clave pública: Puede ser leída por el servidor, pero no debe ser modificada sin autorización. ==== Transferencia de Archivos con SSH ==== SSH facilita la transferencia de archivos de manera segura usando herramientas como **scp** y **sftp**. * Copiar un archivo desde el cliente al servidor: scp archivo.txt usuario@servidor.com:/ruta/destino * Copiar un archivo desde el servidor al cliente: scp usuario@servidor.com:/ruta/origen/archivo.txt ./ ==== Túneles SSH ==== Un túnel SSH es una técnica que permite redirigir el tráfico de red a través de una conexión SSH segura. Esto es útil para proteger la transmisión de datos entre un cliente y un servidor o para acceder a recursos de una red remota como si estuvieran locales. Un túnel SSH se establece redirigiendo los puertos entre el cliente y el servidor. * **Puertos locales**: En el dispositivo cliente. * **Puertos remotos**: En el servidor remoto. * **Puertos intermedios**: Si es necesario, puede haber puertos intermedios en la red. El túnel permite encapsular datos que viajan a través de la conexión SSH, asegurándolos con cifrado. === Tipos de Túneles SSH == **Reenvío de Puertos Local (Local Port Forwarding)** * Redirige el tráfico de un puerto local a un puerto en el servidor remoto. * Útil para acceder a servicios en la red remota que no son directamente accesibles desde la red del cliente. Supongamos que tienes un servidor remoto (servidor.com) que puede acceder a una base de datos MySQL en localhost:3306. Desde tu máquina local, puedes redirigir este puerto así: ssh -L 3307:localhost:3306 usuario@servidor.com Ahora puedes conectarte a localhost:3307 en tu máquina local como si estuvieras accediendo directamente a la base de datos remota. **Reenvío de Puertos Remoto (Remote Port Forwarding)** Permite redirigir el tráfico desde un puerto en el servidor remoto a un puerto en la máquina cliente. Útil para exponer un servicio local a través de un servidor remoto. Supongamos que tienes un servidor web local en el puerto 8080 de tu máquina y quieres que sea accesible desde el servidor remoto (servidor.com) en el puerto 9090: ssh -R 9090:localhost:8080 usuario@servidor.com Ahora, cualquier conexión al servidor remoto en el puerto 9090 se redirigirá a tu servidor web local en el puerto 8080. **Reenvío Dinámico de Puertos (Dynamic Port Forwarding)** Funciona como un proxy SOCKS, permitiendo redirigir tráfico de múltiples servicios o puertos a través del túnel SSH. Útil para navegar de forma segura o acceder a múltiples servicios en una red remota. Para crear un proxy SOCKS en el puerto 1080 de tu máquina local: ssh -D 1080 usuario@servidor.com Luego, puedes configurar aplicaciones o navegadores para usar localhost:1080 como un proxy SOCKS. === Ventajas de los Túneles SSH === * **Seguridad**: Todo el tráfico redirigido a través del túnel está cifrado. * **Flexibilidad**: Permiten el acceso a recursos remotos sin necesidad de exponerlos directamente a internet. * **Facilidad de Configuración**: La mayoría de las herramientas SSH soportan túneles sin requerir software adicional. === Casos de Uso de los Túneles SSH === * Acceder a bases de datos remotas sin exponerlas a internet. * Redirigir tráfico web a través de un proxy seguro. * Acceder a servicios detrás de firewalls o NATs. * Exponer servicios locales temporalmente para pruebas o demostraciones.