Conexiones SSH
Conexiones SSH (Secure Shell)
¿Qué es SSH?
SSH (Secure Shell) es un protocolo de red que permite a los usuarios acceder y administrar de forma segura un servidor o dispositivo a través de una red insegura. SSH proporciona autenticación fuerte, comunicación encriptada y la integridad de los datos, asegurando que las comunicaciones entre el cliente y el servidor sean confidenciales y a prueba de manipulaciones.
Componentes Clave de SSH
-
Cliente SSH:
- Un software que inicia la conexión con el servidor SSH.
- Ejemplos:
ssh
en Linux, PuTTY en Windows.
-
Servidor SSH:
- Un software que acepta conexiones desde clientes SSH.
- Ejemplos:
sshd
en Linux.
-
Autenticación:
- Métodos para verificar la identidad del cliente.
- Ejemplos: contraseñas, claves públicas/privadas, autenticación de dos factores.
-
Encriptación:
- Cifrado de datos para asegurar la privacidad y la integridad de la comunicación.
- Ejemplos de algoritmos de cifrado: AES, Blowfish.
-
Túneles SSH:
- Canales seguros que permiten el redireccionamiento de tráfico a través de la conexión SSH.
- Tipos: túnel local, túnel remoto, túnel dinámico.
Funcionalidades Principales de SSH
-
Acceso Remoto Seguro:
- Permite a los usuarios acceder y controlar máquinas remotas de forma segura.
- Comando:
ssh usuario@servidor
-
Transferencia Segura de Archivos:
- SCP (Secure Copy Protocol): Transferencia segura de archivos.
- Comando:
scp archivo_local usuario@servidor:/ruta/remota
- Comando:
- SFTP (SSH File Transfer Protocol): Transferencia interactiva de archivos.
- Comando:
sftp usuario@servidor
- Comando:
- SCP (Secure Copy Protocol): Transferencia segura de archivos.
-
Túneles SSH:
- Túnel Local: Redirige el tráfico desde un puerto local a un servidor remoto.
- Comando:
ssh -L puerto_local:host_remoto:puerto_remoto usuario@servidor
- Comando:
- Túnel Remoto: Redirige el tráfico desde un puerto remoto a una máquina local.
- Comando:
ssh -R puerto_remoto:host_local:puerto_local usuario@servidor
- Comando:
- Túnel Dinámico: Crea un proxy SOCKS que puede redirigir el tráfico a múltiples destinos.
- Comando:
ssh -D puerto_local usuario@servidor
- Comando:
- Túnel Local: Redirige el tráfico desde un puerto local a un servidor remoto.
Ejemplos Prácticos
1. Conexión SSH Básica
Conéctate a un servidor remoto utilizando SSH:
ssh usuario@servidor_remoto
2. Uso de Claves SSH
Genera un par de claves SSH (pública y privada):
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa
Copia la clave pública al servidor remoto:
ssh-copy-id usuario@servidor_remoto
Conéctate al servidor utilizando la clave SSH:
ssh -i ~/.ssh/id_rsa usuario@servidor_remoto
3. Transferencia de Archivos con SCP
Copia un archivo local a un servidor remoto:
scp archivo.txt usuario@servidor_remoto:/ruta/remota
Copia un archivo desde un servidor remoto a tu máquina local:
scp usuario@servidor_remoto:/ruta/remota/archivo.txt /ruta/local
4. Túnel Local
Redirige el tráfico desde el puerto local 8080 a un servidor web remoto en el puerto 80:
ssh -L 8080:www.ejemplo.com:80 usuario@servidor_remoto
5. Túnel Remoto
Redirige el tráfico desde el puerto 9090 en el servidor remoto a un servidor web local en el puerto 80:
ssh -R 9090:localhost:80 usuario@servidor_remoto
6. Túnel Dinámico
Crea un proxy SOCKS en el puerto local 1080:
ssh -D 1080 usuario@servidor_remoto
Configura tu navegador para usar localhost:1080
como un proxy SOCKS para redirigir el tráfico a través del servidor SSH.
Seguridad en SSH
-
Autenticación de Claves Públicas/Privadas:
- Más segura que el uso de contraseñas.
- Implica generar un par de claves y almacenar la clave pública en el servidor.
-
Desactivar el Acceso Root Directo:
- Mejora la seguridad al evitar que el usuario root inicie sesión directamente.
- Configuración en
/etc/ssh/sshd_config
:PermitRootLogin no
-
Cambio del Puerto por Defecto:
- El puerto por defecto para SSH es el 22. Cambiarlo puede reducir los intentos de intrusión automatizados.
- Configuración en
/etc/ssh/sshd_config
:Port 2222
-
Autenticación de Dos Factores (2FA):
- Añade una capa adicional de seguridad.
- Puede configurarse utilizando herramientas como Google Authenticator.
-
Firewall y Limitación de Acceso:
- Usar firewalls para limitar el acceso al puerto SSH.
- Configurar
iptables
oufw
para permitir solo direcciones IP específicas.
Conclusión
SSH es una herramienta esencial para la administración remota de sistemas y la transferencia segura de datos. Ofrece múltiples capas de seguridad, incluyendo autenticación de claves públicas, encriptación de datos y soporte para túneles seguros. La comprensión y el uso adecuado de SSH permiten a los administradores de sistemas y a los usuarios finales interactuar de manera segura y eficiente con los recursos de la red.
Link de la pagina para practicar
ssh bandit0@bandit.labs.overthewire.org -p 2220
Recuerda que la contraseña para el usuario ‘bandit0‘ es ‘bandit0‘.
export TERM=xter
Nivel 1
Nivel 2
Nivel 3
Nivel 4
Nivel 5
Nivel 6
Nivel 7
Nivel 8
Nivel 9
Nivel 10
Nivel 11
Nivel 12
Nivel 13
Y asi hasta el final
#!/bin/bash
function ctrl_c(){
echo -e "\n\n[!] Saliendo...\n"
exit 1
}
# Ctrl+C
trap ctrl_c INT
first_file_name="data.gz"
decompressed_file_name="$(7z l data.gz | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"
7z x $first_file_name &>/dev/null
while [ $decompressed_file_name ]; do
echo -e "\n[+] Nuevo archivo descomprimido: $decompressed_file_name"
7z x $decompressed_file_name &>/dev/null
decompressed_file_name="$(7z l $decompressed_file_name 2>/dev/null | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"
done
Nivel 14
El manejo de pares de claves y las conexiones SSH son aspectos fundamentales para garantizar una comunicación segura entre dos máquinas en una red, especialmente en entornos de administración de sistemas y en la nube. Aquí te explico en detalle cómo funcionan los pares de claves, cómo se utilizan en conexiones SSH y cómo puedes gestionarlos.
Concepto de Pares de Claves
1. Pares de Claves
Un par de claves SSH consiste en dos claves criptográficas:
- Clave Privada: La clave privada es secreta y debe ser guardada de forma segura por el usuario. Nunca debe ser compartida.
- Clave Pública: La clave pública puede ser compartida libremente con cualquier servidor al que el usuario desee conectarse.
Estas claves se utilizan en un algoritmo criptográfico que asegura que la identidad del usuario pueda ser verificada por el servidor sin necesidad de enviar la clave privada a través de la red.
2. Criptografía Asimétrica
Las claves SSH utilizan criptografía asimétrica. La clave privada genera una firma digital única que solo puede ser verificada por su correspondiente clave pública. Esto permite que las comunicaciones sean seguras y que solo el poseedor de la clave privada pueda iniciar una sesión segura.
Conexiones SSH Usando Pares de Claves
Proceso de Conexión SSH
-
Generación de Par de Claves: El primer paso es generar un par de claves usando
ssh-keygen
.ssh-keygen -t rsa -b 4096
Esto genera una clave privada y una clave pública (por defecto,
id_rsa
yid_rsa.pub
). -
Copiar la Clave Pública al Servidor: La clave pública debe ser colocada en el archivo
authorized_keys
del servidor.ssh-copy-id usuario@servidor
Este comando copia automáticamente la clave pública al servidor en el archivo adecuado.
-
Inicio de Sesión SSH: Cuando el usuario intenta iniciar sesión en el servidor, el servidor crea un mensaje, lo cifra con la clave pública y lo envía al cliente.
ssh usuario@servidor
El cliente usa la clave privada para descifrar el mensaje. Si el descifrado es exitoso, se demuestra la posesión de la clave privada y se establece la sesión sin necesidad de contraseña.
Ventajas del Uso de Pares de Claves en SSH
- Seguridad Mejorada: Es mucho más difícil comprometer una clave criptográfica que adivinar una contraseña.
- Automatización: Las conexiones pueden ser automatizadas sin intervención humana, ideal para scripts y tareas automatizadas.
- Control de Acceso: Las claves pueden ser añadidas o revocadas fácilmente del servidor para permitir o restringir el acceso.
Mejores Prácticas de Seguridad
- Proteger la Clave Privada: La clave privada debe ser guardada de forma segura, protegida por una frase de paso fuerte y solo accesible por el usuario.
- Permisos Adecuados: Asegúrate de que los permisos de los archivos de claves privadas sean restrictivos (
chmod 600 ~/.ssh/id_rsa
). - Rotación de Claves: Las claves deben ser cambiadas regularmente para mitigar los riesgos asociados con el robo o compromiso de claves a largo plazo.
- Uso de
ssh-agent
: Utilizassh-agent
para mantener las claves cargadas en memoria y seguras, evitando tener que introducir la frase de paso cada vez.
Conclusión
El manejo efectivo de pares de claves es esencial para mantener seguras las conexiones SSH. A través del uso de criptografía asimétrica, se puede asegurar que las conexiones entre el cliente y el servidor sean confiables y seguras, minimizando el riesgo de interceptación o acceso no autorizado. Con una configuración adecuada y siguiendo las mejores prácticas de seguridad, los pares de claves SSH proporcionan una herramienta robusta para la gestión segura de servidores y automatización de tareas.
Nivel 15
Nivel 16
Nivel 17
#!/bin/bash
function ctrl_c(){
echo -e "\n\n[!] Saliendo...\n"
exit 1
}
# Ctrl+C
trap ctrl_c INT
for i in $(seq 1 254); do
timeout 1 bash -c "ping -c 1 192.168.1.$i &>/dev/null" && echo "[+] Host 192.168.1.$i - ACTIVE" &
done; wait
#!/bin/bash
function ctrl_c(){
echo -e "\n\n[!] Saliendo...\n"
tput cnorm; exit 1
}
# Ctrl+C
trap ctrl_c INT
tput civis # Ocultar el cursor
for port in $(seq 1 65535); do
(echo '' > /dev/tcp/127.0.0.1/$port) 2>/dev/null && echo "[+] $port - OPEN" &
done; wait
# Recuperamos el cursor
tput cnorm