Sei sulla pagina 1di 35

Introduccin a los servicios de terminal remoto TELNET y SSH

Xabiel Garca Paeda David Melendi Palacio Manuel Vilas Paz Roberto Garca Fernndez

Sistemas de terminal remoto


Acceder desde un serie de mquinas cliente a los recursos de una mquina servidor remota de forma interactiva
De la misma forma que lo hara un cliente conectado a un terminal local del equipo servidor

El protocolo TELNET
El cliente establece con el servidor una conexin TCP/IP
Normalmente en el puerto TCP:23

El cliente lee de la terminal TELNET El cliente enva al servidor El servidor recibe TELNET

Sistema Operativo

Sistema Operativo

TCP/IP
El servidor enva una pseudo terminal

Adaptarse a la heterogeneidad
El TELNET debe inter-operar con tantos sistemas como sea posible
Algunos sistemas necesitan el carcter CR (retorno de carro) para marcar el final de lnea Otros necesitan el LF (alimentacin de lnea) Otros la combinacin de ambos CR-LF

Para adaptarse, TELNET define cmo deben mandarse las secuencias de datos y comandos Se define el Terminal Virtual de Red (Network Virtual Terminal) (NVT)

Dispositivo del usuario

Formato Sistema Cliente

Internet
Cliente Formato NVT Servidor

Formato Sistema Servidor

Sistema Servidor

Terminal Virtual de Red


Una NVT es un dispositivo imaginario que posee una estructura bsica comn a una amplia gama de terminales reales Cada host mapea las caractersticas de su propia terminal sobre las de su correspondiente NVT, y asume todos los dems hosts harn lo mismo
Adapta a un formato entendible por el sitio remoto

Usuario Terminal fsico NVT

RED

Terminal Virtual de Red


La NVT cuenta con un monitor o "display" y un teclado:
El teclado produce datos de salida, que se envan por la conexin TELNET El monitor recibe los datos de entrada que llegan

Las caractersticas bsicas de una NVT, a menos que sean modificadas por opciones establecidas de comn acuerdo, son:
Los datos se representan en cdigo ASCII de 7 bits, transmitido en bytes de 8 bits La NVT es un dispositivo semi-duplex que opera en modo de buffer en lnea La NVT proporciona una funcin de eco local

Problemas de TELNET
La autenticacin de usuarios (login y password) viaja en claro por la red
Un atacante situado en algn punto intermedio, o un usuario de la mquina de destino con permisos suficientes, podra analizar el trfico y hacerse con esta informacin

El cliente no verifica la identidad del servidor


Cmo sabemos a donde nos estamos conectando?

1. Se conecta a la mquina, lanza un analizador de protocolos y espera

2. Cuando un usuario local de la mquina se conecte, el usuario malintencionado dispone del nombre y la contrasea en esa mquina y posiblemente en otras.

Solucin: SSH
SSH (Secure Shell) Autentifica los dos extremos de la conexin
El servidor se autentica ante el cliente con un certificado El cliente se autentica ante el servidor
Usuario y password Certificados

Encripta los datos intercambiados


No se transmiten usuarios ni passwords en claro La informacin transmitida viaja tambin encriptada

Mensajes del protocolo


Establecimiento TCP [ACK, SYN-ACK, ACK]

Versin a utilizar Modos de autenticacin y encriptacin soportados Cliente y servidor acuerdan una clave dinmica para codificar los datos de esa sesin Intercambio de clave de Diffie-Hellman Datos en claro

Datos encriptados A partir de este momento, los datos viajan encriptados

Establecimiento de un transporte seguro


Cliente y servidor llegarn a un acuerdo sobre una clave nica para cada sesin sin transmitir esta clave en ningn momento sobre la red
Se basa en el intercambio de clave de Diffie-Hellman (DH)
A y B acuerdan usar el nmero primo p=23 y la base g=5. A elige un nmero secreto a=6, luego enva a B (ga mod p) 56 mod 23 = 8 B elige un nmero secreto b=15, luego enva a A (gb mod p) 515 mod 23 = 19 A calcula (gb mod p)a mod p 196 mod 23 = 2 B calcula (ga mod p)b mod p 815 mod 23 = 2

A y B llegan a un secreto compartido sin que este sea transmitido sobre la red en ningn momento
Un atacante puede conocer p, g, ga mod p y gb mod p y no podra obtener la clave

Las operaciones de aritmtica modular con nmeros primos grandes (1024bits) escogidos cuidadosamente son no reversibles

Autentificacin
Cada servidor dispone de una clave que le permite autenticarse ante el cliente
El cliente puede comprobar esta clave contra una base de datos local relacionando IPs y claves El cliente puede recurrir a una tercera entidad (autoridad certificadora) para comprobar la validez del certificado

Esta clave no se usa para proteger la sesin, solo para identificar a las partes El proceso de autentificacin se basa en la presencia de un transporte seguro establecido previamente

Criptografa de clave pblica y privada


Se basan en operaciones de aritmtica modular que son de clculo sencillo pero de muy difcil inversin

Clave pblica
Conocida por todo el mundo

Clave privada
Conocida solo por su propietario

Mensaje

Mensaje Encriptado

Mensaje

Algoritmo

Algoritmo
Solo el poseedor de la clave privada puede desencriptar los mensajes El resto tendran que implementar un ataque por fuerza bruta, que, con las capacidades de computo actuales y la seleccin correcta de las claves es inviable Permite la firma de mensajes garantizando su autenticidad

Configuracin de un servidor SSH


OpenSSH Server

Xabiel Garca Paeda David Melendi Palacio Manuel Vilas Paz Roberto Garca Fernndez

Instalacin del servidor OpenSSH


Disponible en los repositorios en red de muchas distribuciones Linux
apt-get update apt-cache search openssh-server apt-get install openssh-server

Durante la instalacin se crea los ficheros de configuracin por defecto, se incluye el script de arranque del servicio y se crean los certificados del servidor Ficheros de configuracin en:
/etc/ssh/sshd_config /etc/ssh/ssh_host_dsa_key Clave privada para firmar los mensajes
Si este fichero tiene permisos de lectura universales el OpenSSH no lo utilizar

/etc/ssh/ssh_host_dsa_key.pub Clave pblica

Fichero de log por defecto:


/var/log/auth.log

Arrancar y parar el servicio:


/etc/init.d/sshd [start/restart/stop]

Funcionamiento OpenSSH
/etc/init.d/ssh restart/start
En el arranque o tras solicitud del usuario, se inicia el servicio

Llama a /usr/sbin/sshd Salvo que se le indique lo contrario, lee el fichero de configuracin por defecto /etc/ssh/sshd_config

/usr/sbin/sshd

sshd_config
Opcin 1 Opcin 2 Opcin N

Los contenidos del fichero marcan como se comporta sshd para las sesiones establecidas a partir de este momento. Para las anteriores, siguen aplicndose los parmetros definidos cuando se iniciaron P. Ej: Si se niega la entrada a un usuario, este no es expulsado

Control de acceso
En la mquina hay cuentas de usuario1, usuario2, usuario3 y root. Usuario1 solo tiene permiso para acceder en local

usuario1

Usuario2 y Usuario3 pueden acceder en remoto autenticndose mediante un certificado de cliente (no usa password) Usuario3 dej sus credenciales accesibles de forma pblica

usuario2

usuario3 root?

Opciones de configuracin de OpenSSH


Puerto en el que escucha peticiones (el puerto reservado por la AINA es el TCP:22)
Port 22

Hay dos versiones del protocolo (se recomienda por motivos de seguridad la 2). Para seleccionar entre ellas
Protocol 2,1

Control de acceso al servidor ssh


DenyUsers usuario1 usuario2 usuario3 AllowUsers usuario1 usuario2 usuario3 PermitRootLogin [yes/no] (Por defecto es yes) PermitEmptyPasswords no

Mostrar cuando entra el usuario la fecha de su ltimo acceso ssh


PrintLastLog [yes/no]

Mostrar un Banner previo a la autenticacin


Banner /PATH/fichero.txt

Control de sesiones
Conexin 1

Conexin 2

Conexin N

Un usuario podra abrir Los recursos de la mquina sesiones de forma remota y remota son limitados (CPUs, detener el proceso antes de memoria, puertos,) autenticarse (introducir el usuario) Tenemos que controlar este fenmeno, limitando el nmero de conexiones abiertas sin autenticar, el tiempo mximo que puede estar abierta una conexin sin autenticar y el nmero mximo de intentos antes de una autenticacin correcta.

Opciones de configuracin de OpenSSH


Nmero mximo de intentos de autentificacin
MaxAuthTries NUM (Por defecto son 6)

Nmero mximo de conexiones abiertas sin autenticar


MaxStartups NUM (Por defecto son 10) MaxStartups start:rate:full
Descarta el rate/100% si hay ms de start. El 100% si se llega a full.

Tiempo mximo durante el cual el cliente puede intentar logarse


LoginGraceTime NUM (Por defecto 120 segundos)

Enviar mensajes solicitando respuesta del cliente cada NUM segundos. Evita la caducidad de las sesiones en equipos NAT/PAT y Firewalls
ClientAliveInterval NUM (Por defecto = 0)

Control de sesiones cadas para evitar consumos innecesarios en el servidor. Con este valor a yes se monitoriza la disponibilidad de la conexin
TCPKeepAlive [yes/no]

Gestin de sesiones autentificadas correctamente


OpenSSH no finalizar nunca sesiones SSH autentificadas correctamente
Los recursos son finitos Los usuarios se despistan

Para controlar estas sesiones


Utilizar la variable TMOUT de Bash (evita despistes pero no usuarios malintencionados)
Para todos los usuarios: /etc/profile Para usuarios individuales: ~/.profile Podemos aprovechar para definir la codificacin adecuada para poder escribir acentos y similares export LANGUAGE=es_ES export LANG="es_ES.ISO-8859-1" export LC_ALL="es_ES.ISO-8859-1

Implementar un script que elimine sesiones inactivas durante un perodo

Conexin desde un cliente Windows


Existen clientes ssh de libre distribucin como por ejemplo Putty http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Ejercicio 1
Desplegar un servicio SSH que:
Solo admita la versin 2 (ms segura) del protocolo Permita el acceso al usuario1 pero no al usuario2
Autentificandose con su usuario y contrasea local del equipo

No permita directamente el acceso al usuario root Limite a dos el nmero de intentos de autentificacin antes de uno correcto Limite a 60 segundos el tiempo que un usuario puede consumir una lnea sin autenticarse Limite a 15 minutos la duracin de las sesiones evitando los despistes de los usuarios Mostrar un banner de entrada con un aviso sobre la funcionalidad del servicio y el almacenamiento en un fichero de log de las actividades del usuario

Autentificacin basada en certificados


Permitir autentificacin basada en certificados
PubkeyAuthentication yes

Impedir autentificacin por usuario y password


PasswordAuthentication no

Definir donde se almacenan los certificados de cada usuario. El valor por defecto es dentro de la carpeta HOME de cada usuario el fichero .ssh/authorized_keys
AuthorizedKeysFile /PATH/nombre Se pueden utilizar %h para identificar el HOME de un usuario y %u para identificar el nombre de usuario que est accediendo

Permitir solo el login basado en certificados a aquellos usuarios que definan los permisos correctos y no tengan sus claves pblicamente accesibles
StrictModes yes

Proceso de importacin
Generar claves Servidor ssh Acceso ssh Grabar

PuttyGen
Importar desde PuttyGen Exportar a ppk Importar desde Putty

Volcar en el equipo cliente

Putty

Creacin de certificados para un usuario


1. Entrar en la mquina como un cierto usuario 2. Teclear: ssh-keygen -t dsa
Generating public/private dsa key pair. Enter file in which to save the key (/home/usuario/.ssh/id_dsa): Created directory '/home/usuario/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/usuario/.ssh/id_dsa. Your public key has been saved in /home/usuario/.ssh/id_dsa.pub. The key fingerprint is:f1:9c:03:5a:b5:ad:03:41:0c:fa:e2:a3:58:be:37:02 usuario@servidor

3. Copiar id_dsa.pub a authorized_keys


cp ./.ssh/id_dsa.pub ./.ssh/authorized_keys

4. Comprobar los permisos del fichero!!!!! 5. Copiar el fichero de clave privada a un soporte seguro y llevarlo al cliente

Importar los certificados a un cliente Windows


Dada la falta de estandarizacin en el formato concreto de los certificados, tenemos que convertirlos de formato OpenSSH a formato Putty
La herramienta PuttyGen nos permite hacer eso

Importar la clave
Conversions -> Import Key Seleccionar id_dsa
Proporcionar la password asignada durante la creacin

File -> Save -> Guardar como privada.ppk

Definicin de sesin ssh basada en certificados


Dentro de la interfaz de Putty, en la columna izquierda seleccionar
Connection -> SSH -> Auth Seleccionar el certificado .ppk creado anteriormente Connection -> Auto-login username Nombre usuario para el que se cre el certificado
Si tecleamos un usuario diferente, rechaza el certificado y solicita password

Proporcionar los datos sobre IP y puerto Pulsar Open Conseguimos el acceso sin necesidad de teclear la password!!!!!!!

Ejercicio 2
Sobre el servicio SSH desplegado anteriormente:
Habilitar la autentificacin mediante certificados Habilitar el acceso mediante certificados para el usuario1 Comprobar el funcionamiento desde un cliente Windows con la aplicacin Putty

Transferencia de ficheros mediante SSH


SSH no permite solo el acceso interactivo a la interfaz de comandos
Permite la redireccin de cualquier tipo de trfico a travs del transporte seguro que se establece
Tunelizado de trfico

Adems, incluye soporte a subsistemas externos, como el sftp (Secure FTP) Para activar este soporte en OpenSSH
Subsystem sftp /usr/lib/openssh/sftp-server

Conexin desde un cliente


En equipo Linux se dispone de aplicaciones por lnea de comandos
sftp
La sintaxis es prcticamente idntica a los clientes FTP

scp P port user@]host1:file1 user@host2:file2

Al igual que para el protocolo FTP, existen clientes grficos para el protocolo SFTP
WinSCP FileZilla

WinSCP
Confirmacin de operaciones sobre ficheros Almacenamiento de parmetros de sesin Ejecucin de comandos no relacionados con la transferencia de ficheros Servicio automtico de actualizaciones Integracin con Putty, Puttygen Soporte a autentificacin por certificados

Contenidos Equipo local Ventana inicial de parmetros de sesin

Contenidos Equipo remoto

Ejercicio 3
Descargar mediante FTP el fichero ejemplos.rar del Servidor SFTP que se indique Subir los contenidos al servidor de cada grupo de usuarios

Ejemplo de script de control de duracin de la sesin


#!/bin/bash #Vemos quien tiene sesiones abiertas en la mquina y lo volcamos a un fichero who -u > /tmp/iddle #Obtenemos los PIDs PID=$(more /tmp/iddle | awk '{print $6}') #Recorremos los usuarios logados buscando en la columna inactividad algo con la forma ??:[1-9]? for i in $PID; do iddle=$(more /tmp/iddle | grep $i | awk '{print $5}' | grep ":[1-9]") #Si esas lneas no estn vacas, matamos el proceso que controla la sesin if [ -n "$iddle" ]; then kill $i fi done; Si lo introducimos en el cron para que se ejecute cada minuto, controlamos la inactividad de las sesiones abiertas: crontab -e */5 * * * * /root/monitoriza_sesiones.sh

Gestin de cantidad de sesiones por IP


Nuevamente, esta es una funcionalidad no contemplada en OpenSSH Recurriremos a filtros de trfico basados en iptables
Firewall, routing, NAT/PAT, marcado de trfico, redireccin,

Para limitar la cantidad de logins que una IP puede hacer en un perodo determinado de tiempo
#Aadimos las IPs de las conexiones nuevas (solo las nuevas NEW) a un lista recent iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set #Si hay ms de 4 ocurrencias de una cierta IP en la lista recent en los ltimos 60 segundos, descartamos iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

Si queremos eliminar las lneas aplicadas anteriormente: iptables -F

Gestin de trfico mximo de descarga


Para limitar el trfico de salida que puede consumir el SSH podemos recurrir al conformado de trfico

#!/bin/bash #Definimos un control de trfico basado en Token Bucket tc qdisc add dev eth0 root handle 1: htb default 30 #Definimos un consumo mximo de 10Mbps con una rfaga de 15Kbytes tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit burst 15k #Definimos lmites de trfico para las diferentes clases tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit burst 15k tc class add dev eth0 parent 1:1 classid 1:20 htb rate 7mbit ceil 10mbit burst 15k tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1mbit ceil 10mbit burst 15k #Definimos la gestin de cola en cada clase tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10 tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10 #Clasificamos los distintos tipos de trfico tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:10 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:20

Si queremos eliminar las lneas aplicadas anteriormente: tc qdisc del dev eth0 root

Potrebbero piacerti anche