1. Autenticación de cliente: conectarse de una máquina A a otra B por ssh, autenticándose por los métodos:
Para la realización de esta practica es necesario tener openssh-server instalado. Esto ya se hizo en la practica anterior y solo fue necesario ejecutar el siguiente comando.
#aptitude install openssh-server
En el laboratorio hay un problema de configuración del router que no deja acceder a otras máquinas, por lo que se realizará en local. Al equipo se le ha asignado un nombre para identificarlo.
#nano /etc/hosts
 
127.0.0.1       localhost
127.0.1.1       alumno-desktop
172.16.193.146  mi-pc
 
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
 
a) password.
Para conectar por ssh a una máquina solamente hay que ejecutar el comando ssh y como parametro pasarle la dirección IP, pero como hemos asignado un nombre a esa dirección se le puede pasar como parámetro en lugar de la dirección.
pr2.1a.png
b) clave pública con passphrase no nula, siendo iguales usuarios en ambas máquinas. Copiar la clave con scp añadiéndola al final (sin sobreescribir) del fichero authorized_keys.

practica2b1

practica2b2
c) clave pública con passphrase no nula, siendo usuarios distintos en cada máquina. Usar ssh-copy-id para pasar la clave.

Como antes, se genera una clave.
pr2.1c.png
A continuación se copia la ID.
pr2.1c2.png
Para finalizar se prueba a entrar.
pr2.1c3.png

2. Autenticación de servidor: ver la huella (key fingerprint) de un fichero que contenga una clave pública.
pr2.2.png

3. Demostrar el uso de ssh-agent.

Primero se arranca el demonio exportando las variables de entorno.
pr2.3a.png
A continuación se añaden las claves al agente.
pr2.3b.png
Para finalizar se comprueba que no pide contraseña.
pr2.3c.png

4. Establecer una conexión que reenvíe las X11 de forma encriptada, comprobándolo mediante el lanzamiento de xclock

Configuramos los archivos /etc/ssh/ssh_config y /etc/ssh/sshd_config.

practica4_configuracion

practica4_configuracionb

pract4

5. Preparar una configuración en base a claves privadas/públicas sin password según la cual un comando que emplee ssh con dicha clave pública ejecute automáticamente un script que muestre el comando enviado, y no pueda ejecutar ningún otro. Pista: $SSH_ORIGINAL_COMMAND

Vamos a /home/alumno/.ssh/authorized_keys para ver las claves públicas y con la opción command especificamos la instrucción a ejecutar si se conecta un usuario con esa contraseña.

pract51

practica52

Comprobamos su funcionamiento:

practica53

7. Lanzar un servidor sshd que escuche por los puertos 22 y 20022 en un equipo A. En otro equipo B dejar un servidor ssh por el puerto 22 y algún servicio por el puerto 80 (ej. apache o netcat en modo escucha). Hacer estas conexiones ssh desde B:

Primero configuramos el archivo /etc/ssh/sshd_config en el equipo A para que escuche por los puertos 22 y 20022.

pract7

practica7
A continuación reiniciamos el servicio ssh.
# /etc/init.d/ssh restart
Comprobámos que esté funcionando correctamente.
# netstat -tl
Conexiones activas de Internet (solo servidores)
Protocolo Recv-Q Send-Q Dirección Local Dirección Externa Estado
tcp        0      0 *:ssh                   *:*                     ESCUCHAR
tcp        0      0 *:20022                 *:*                     ESCUCHAR
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR
tcp6       0      0 [::]:ssh                [::]:*                  ESCUCHAR
tcp6       0      0 [::]:20022              [::]:*                  ESCUCHAR
tcp6       0      0 localhost:ipp           [::]:*                  ESCUCHAR
 
Ponemos a escuchar al equipo B por el puerto 80.
# nc -l localhost -p 80
Se comprueba que esté funcionando correctamente.
# netstat -tl
Conexiones activas de Internet (solo servidores)
Protocolo Recv-Q Send-Q Dirección Local Dirección Externa Estado
tcp        0      0 *:www                   *:*                     ESCUCHAR
tcp        0      0 *:ssh                   *:*                     ESCUCHAR
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR
tcp6       0      0 [::]:ssh                [::]:*                  ESCUCHAR
tcp6       0      0 localhost:ipp           [::]:*                  ESCUCHAR
 
a) al puerto 22 de A, con dos túneles inversos:
-Uno que haga que al conectarse en A al puerto 40022 se llegue al 22 de B.

Desde el equipo B:
 ssh ivan@192.168.10.1 -p 22 -R 40022:192.168.10.2:22
The authenticity of host '192.168.10.1 (192.168.10.1)' can't be established.
RSA key fingerprint is 68:69:c6:f0:21:cc:ac:8c:72:9f:78:d6:3d:65:fd:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.1' (RSA) to the list of known hosts.
ivan@192.168.10.1's password:
Linux ivan-desktop 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686
 
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
 
Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.
 
 
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
 
Se comprueba desde A:
# netstat -tl
Conexiones activas de Internet (solo servidores)
Protocolo Recv-Q Send-Q Dirección Local Dirección Externa Estado
tcp        0      0 *:40022                 *:*                     ESCUCHAR
tcp        0      0 *:ssh                   *:*                     ESCUCHAR
tcp        0      0 *:20022                 *:*                     ESCUCHAR
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR
tcp6       0      0 [::]:ssh                [::]:*                  ESCUCHAR
tcp6       0      0 [::]:20022              [::]:*                  ESCUCHAR
tcp6       0      0 localhost:ipp           [::]:*                  ESCUCHAR
 
Nos conectamos desde el equipo A al puerto 40022 local y nos llevará al 22 del equipo B.
ssh ivan@localhost -p 40022
The authenticity of host '[localhost]:40022 ([127.0.0.1]:40022)' can't be established.
RSA key fingerprint is ff:cb:63:24:6c:54:bb:87:0e:80:56:73:8a:05:ab:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:40022' (RSA) to the list of known hosts.
ivan@localhost's password:
Linux ivan-desktop 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686
 
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
 
Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.
 
 
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
 
-Otro que haga que al conectarse en A al puerto 40080 se entre al 80 de B.
Desde el equipo B:
ivan@ivan-desktop:~$ ssh ivan@192.168.10.1 -p 22 -R 40080:192.168.10.2:80
ivan@192.168.10.1's password:
Linux ivan-desktop 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686
 
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
 
Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.
 
Last login: Sun Mar 28 11:48:34 2010 from ivan-desktop-2.local
 
Se comprueba desde A:
# netstat -tl
Conexiones activas de Internet (solo servidores)
Protocolo Recv-Q Send-Q Dirección Local Dirección Externa Estado
tcp        0      0 *:40080                 *:*                     ESCUCHAR
tcp        0      0 *:ssh                   *:*                     ESCUCHAR
tcp        0      0 *:20022                 *:*                     ESCUCHAR
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR
tcp6       0      0 [::]:ssh                [::]:*                  ESCUCHAR
tcp6       0      0 [::]:20022              [::]:*                  ESCUCHAR
tcp6       0      0 localhost:ipp           [::]:*                  ESCUCHAR
 
Nos conectamos desde el equipo A al puerto 40080 local y nos llevará al 80 del equipo B.
ivan@ivan-desktop:~$ ssh ivan@localhost -p 40080
ssh_exchange_identification: Connection closed by remote host
 
Y en el netcat del equipo B nos muestra los siguiente:
invalid connection to [192.168.10.2] from (UNKNOWN) [192.168.10.2] 40888
 
b) al puerto 20022 de A, con un túnel inverso que haga que al conectarse en A al puerto 50022 se llegue al 22 de B.
Desde B:
ssh ivan@192.168.10.1 -p 20022 -R 50022:192.168.10.2:22
ivan@192.168.10.1's password:
Linux ivan-desktop 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686
 
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
 
Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.
 
Last login: Sun Mar 28 12:03:12 2010 from ivan-desktop-2.local
 
Se comprueba desde A:
netstat -tl
Conexiones activas de Internet (solo servidores)
Protocolo Recv-Q Send-Q Dirección Local Dirección Externa Estado
tcp        0      0 *:50022                 *:*                     ESCUCHAR
tcp        0      0 *:ssh                   *:*                     ESCUCHAR
tcp        0      0 *:20022                 *:*                     ESCUCHAR
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR
tcp6       0      0 [::]:ssh                [::]:*                  ESCUCHAR
tcp6       0      0 [::]:20022              [::]:*                  ESCUCHAR
tcp6       0      0 localhost:ipp           [::]:*                  ESCUCHAR
 
Y se conecta desde el equipo A al puerto 50022 local al puerto 22 del equipo B.
ssh ivan@localhost -p 50022
The authenticity of host '[localhost]:50022 ([127.0.0.1]:50022)' can't be established.
RSA key fingerprint is ff:cb:63:24:6c:54:bb:87:0e:80:56:73:8a:05:ab:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:50022' (RSA) to the list of known hosts.
ivan@localhost's password:
Linux ivan-desktop 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686
 
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
 
Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.
 
Last login: Sun Mar 28 11:59:34 2010 from ivan-desktop-2.local
 
Mirar las relaciones padre-hijo entre los procesos de A
ivan@ivan-desktop:~$ ps -Af | grep sshd
root      1860     1  0 11:15 ?        00:00:00 /usr/sbin/sshd
root      2974  1860  0 12:13 ?        00:00:00 sshd: ivan [priv]
ivan      3029  2974  0 12:13 ?        00:00:00 sshd: ivan@pts/1
ivan      3104  3064  0 12:40 pts/2    00:00:00 grep --color=auto sshd
ivan@ivan-desktop:~$ sudo netstat -lapn | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               ESCUCHAR    1860/sshd
tcp        0      0 0.0.0.0:20022           0.0.0.0:*               ESCUCHAR    1860/sshd
tcp        0      0 192.168.10.1:20022      192.168.10.2:34240      ESTABLECIDO 2974/sshd: ivan [pr
tcp6       0      0 :::22                   :::*                    ESCUCHAR    1860/sshd
tcp6       0      0 :::20022                :::*                    ESCUCHAR    1860/sshd
unix  3      [ ]         FLUJO      CONECTADO     14116    2974/sshd: ivan [pr
unix  3      [ ]         FLUJO      CONECTADO     13997    2974/sshd: ivan [pr
unix  2      [ ]         DGRAM                    13996    2974/sshd: ivan [pr
 
El demonio de ssh tiene un PID 1860 y al crear el túnel inverso ha creado el proceso 2974. Cada vez que se recibe una conexión, el proceso 2974 crea un hijo, en este caso el 3029.

8. Configurar un proxy SOCKS con ssh y comprobarlo con un navegador.

ssh dispone de una opción para utilizarlo como proxy SOCKS. Esta opcion es -D y solo hay que indicar en que puerto quieres realizar la conexion, el nombre de usuario y el del equipo que vas a utilizar como proxy.

pr2.8_con.png

A continuación hay que configurar el navegador para que se conecte a través del proxy. En firefox se configura desde Editar > Preferencias > Avanzado > Red > Conexión > Configuración. Ahi hay que realizar una configuración manual indicando la direccion del servidor SOCKS y el puerto.

pr2.8_conf.png

En la siguiente captura se ve como hace una peticón GET http al puerto 29654, que es en el cual está configurado el proxy SOCKS, y su correspondiente respuesta.

pr2.8_cap.png
pr2.8_cap2.png

9.- Se desea acceder al correo electrónico de la Escuela desde el exterior por POP3. Pero el único puerto que la Escuela tiene abierto al exterior es el 2200 con el servicio ssh, y además el equipo del servicio sshd puede conectarse con el servidor de correo en el puerto típico POP3.
Definir la conexión desde el exterior.


ssh usuario@servidor_ssh_ehu -p 2200 -L puerto_local:servidor_correo_ehu:puerto_POP3

10.- Se tienen dos redes locales R1 y R2. En R1 hay un servidor web S que sólo tiene abierto el puerto 80 a sus equipos locales, y un equipo proxy P para servir peticiones de ssh al exterior.

a) Indicar la conexión ssh de un equipo E en R2 de modo que haga de proxy ssh hacia R1 para que cualquiera del resto de equipos de R2 pueda acceder a páginas S.


ssh usuario@equipoP -L 80:equipoS:80 -g

b) ¿Qué URL habrá de indicarse en los clientes de R2?

http://IPequipoE/pagina_web.

11.- Se tienen dos redes locales R1 y R2. En R1 hay un equipo A1 accesible por vnc (puerto 5900) y otro equipo S1 que es un servidor web. En R2 hay un servidor S2 corriendo sshd a la escucha por el puerto 10001.

a)Indicar el comando de conexión desde S1 a S2 para que los equipos de R2 puedan conectarse tanto al vnc de A1 como a las páginas web de S.


ssh usuario@equipoS2 –p 10001 –R 5900:equipoA1:5900 y ssh usuario@equipoS2 –p 10001 –R 80:localhost:80

b) ¿Qué URL habrá de indicarse en los clientes de R2 para acceder a la web de S1?

http://equipoS2/pagina_web

c) Si el servidor web S1 sólo atiende atiende peticiones que empiecen por http://www.xxx.com/ ¿Cuál es una solución posible a hacer en los equipos de R2 para que éstos puedan acceder a páginas servidas por S1?

Tendremos que añadir en los equipos de R2 una línea al fichero /etc/hosts en la que asignamos la dirección www.xxx.com a la ip del servidor.

12.- Una máquina A tiene su IP pública dinámica, y otra máquina B tiene su IP pública fija. B tiene un daemon ssh escuchando en el puerto 4444. Se desea poder entrar por ssh en A desde B. Para ello, establecer un túnel inverso desde A a B con las siguientes características:
-Una vez establecido el túnel, desde B se deberá poder hacer ssh a A conectándose al puerto 55555 de B.
-La conexión del túnel en A ha de funcionar en background.

ssh usuario@maquinaB –p 4444 –R 55555:localhost:22 &