Mostrando entradas con la etiqueta ssh. Mostrar todas las entradas
Mostrando entradas con la etiqueta ssh. Mostrar todas las entradas

domingo, 14 de marzo de 2010

SSH: Conexiones seguras para tod@s ( y III ) VPN's

Pues aqui esta la ultima parte de SSH: Conexiones seguras para tod@as, las VPN's, vamos alla...
[Nota]: en todo el proceso vas a necesitar privilegios de root

Preparando el terreno
Para poder utilizar un servidor SSH para hacer una VPN, tendremos que hacer algunos cambios:

El primero es cargar el modulo del kernel "tun" (si aparece al hacer lsmod|grep tun , no hace falta), esto se puede hacer con modprobe tun

Despues vamos a /etc/ssh/sshd_config y comprobamos que los parametros PermitRootLogin y PermitTunnel esten activados (yes)

Y reiniciamos el servidor SSH

Levantando la VPN

Se establece una conexion SSH  con el servidor de una forma parecida a la que se utiliza para usarlo de proxy:
ssh -w <interface local>[:<interface remota>]  [<usuario> @]<host>
Las interfaces seran las que conecten la VPN, se pueden especificar a traves de un numero (que no puede estar en uso), o "any" (para utilizar la primera "no ocupada").

[Nota]: Siempre se va a necesitar una cuenta root en el servidor (ya que se crean nuevas interfaces)

Automaticamente, se crearan interfaces tunel (del tipo point to point) en el cliente y en el servidor (por ejemplo seran tun0 y tun1, aqui para abreviar,usaremos tunC para la del cliente y tunS para la del servidor)

Pues bien, una vez creadas hay que conectarlas, suponiendo que la VPN vaya a utilizar la subred 10.0.0.0, que el servidor vaya a  utilizar la IP 10.0.0.1, y el cliente 10.0.0.9, habria que hacer:

En el cliente: ifconfig tunC 10.0.0.9 pointopoint 10.0.0.1  

En el servidor: ifconfig tunS 10.0.0.1 pointopoint 10.0.0.9

(La "formula general" seria ifconfig <interfaz tunel> <IP local> pointopoint <IP remota> )

Y ya esta, se acabo el SSH! (al menos por ahora ;)} )

[ Referencias ]
http://prefetch.net/
http://fermiparadox.wordpress.com/

domingo, 7 de marzo de 2010

SSH: Conexiones seguras para tod@s ( II ) SSHFS

Siguiendo con la segunda parte de SSH: Conexiones seguras para tod@s, ahora SSHFS... la idea era mostrar tambien las VPN's, pero ahora mismo no es posible  :(, prometo que pronto saldran ;)

SSHFS

¿ Que es SSHFS ?
Es un cliente que permite montar un sistema de archivos remoto en una carpeta local ("bajo la superficie", el cliente funciona con SFTP, con lo que las comunicaciones van cifradas adecuadamente)

Instalandolo
La instalacion es la tipica, no me voy a liar con esto, lo unico decir que usa FUSE, si no viene instalado por defecto (que me extraña), cualquier gestor de paquetes decente deberia instalarlo con sshfs, el resto es el clasico sudo apt-get install sshfs (para basados en debian, por ejemplo)

Montando una carpeta
El comando para montar una carpeta es
sshfs [<usuario>@]<host>:[<directorio>]  [-p <puerto>] <punto de montaje>
Los parametros son:
Usuario: si el usuario es distinto en el host que el que se esta utilizando actualmente
Host: direccion a la que se conecta
Directorio: raiz de sistema de archivos (si es distinta al directorio HOME del usuario)
Puerto: si se usa un puerto SSH no estandar (distinto del 22)
Punto de montaje: carpeta local a traves de donde se accede al SSHFS

Como se puede ver, el comando es bastante parecido al de ssh, de hecho, si no se tiene la clave publica del host (o si ha cambiado), hace lo que haria ssh ( y pedira la clave  del usuario )

Una  vez montada, se puede navegar por la carpeta como si fuera una normal

Desmontando una carpeta
El comando para desmontar una carpeta es
fusermount -u  <punto de montaje>

El unico parametro, Punto de montaje, sirve para especificar la carpeta donde se monto el SSHFS

Y ya esta!

[Referencias]
http://tuxpepino.wordpress.com/

Hasta ahora!!

lunes, 8 de febrero de 2010

SSH: Conexiones seguras para tod@s


Seguramente muchos conozcais telnet, una forma de conseguir una consola de comandos en un ordenador remoto, igualmente muchos sabreis que es inseguro por que va "en plano" por la red (un ordenador cualquiera de la red podria ver lo que pasa en el pc remoto, secuestrar la sesion o incluso capturar las contraseñas), por eso desde hace unos años (desde el 99) se utiliza SSH (secure shell), que utiliza conexiones seguras, peroo... sabiais que ademas de utilizarlo como una consola de comandos se puede utilizar para:

  • Transferencias de archivos al estilo FTP
  • Copia de archivos en red
  • Cifrar casi cualquier tipo de conexion (todo lo que se pueda a traves de SOCKS: web, correo, mensajeria instantanea,... )
  •  Acceder a sistemas de archivos remotos como si fuesen locales (SSHFS)
  • VPN (aunque mientras se escribe esto solo es posible con el cliente y el servidor de OpenSSH)
Y todo esto sin dejar de lado la seguridad...

Para las pruebas se utilizo un servidor OpenSSH_5.3p1 y un cliente OpenSSH, el servidor puede necesitar alguna configuracion, pero la mayoria de las veces las distros/flavours ya lo traen listo para usar, ademas algunas cosas solo se pueden hacer con este servidor en concreto (OpenSSH)


Para intentar hacer todo mas claro, los comandos usaran este tipo de letra, lo que vaya etiquetado <asi> es una campo ( por ejemplo <direccion del servidor> podria ser ssh.pruebas.com o 192.168.1.17 ), por ultimo lo que va entre ´[´ y ´]´ es opcional (se usa, entre otras cosas, para activar opciones adicionales)

Empezando por lo basico:

Para abrir una consola de comandos en el servidor se utilizara el siguiente comando:

ssh [<usuario>@]<servidor> [-p <puerto>]

La parte de <usuario>@ solo es necesaria si se va a usar un usuario distinto al de la maquina local, y  -p <puerto> se usa para acceder por un puerto no estandar (que es el 22).

Este es un ejemplo posible:
Desde el pc 'vBox' el usuario 'kenkeiras' hace ssh al servidor 'sleepless' (ssh sleepless), aqui en vez de haber utilizado el nombre del servidor se puede utilizar su ip... si es la primera vez que se conecta a este servidor se pedira al usuario que confirme que el fingerprint de la clave del servidor coincida con la real (para evitar que se produzca un ataque Man-in-the-middle, por ejemplo)

Y despues la ejecucion seguiria como antes, pide la contraseña y abre la sesion del usuario.

Este comando (ssh sleepless) es el mismo que ssh $USERNAME@sleepless -p 22 ya que se presupone que el usuario va a ser el mismo en el servidor que en el pc local y que el puerto va a ser el estandar (el 22).

Manejando archivos:


Transferencia de archivos por SFTP (Secure File Transfer Protocol, Protocolo Seguro de Transferencia de Archivos) :

El uso de sftp es bastante sencillo, el comando de inicio es como el de ssh:
sftp [<usuario>@]servidor [-oPort=<puerto>]
La unica diferencia es que para especificar un puerto diferente (el estandar sigue siendo 22, todo funciona a traves de ssh) se utiliza -oPort , en vez de -p

Se utliza como un cliente ftp normal, pero siempre se usa binary para las transferencias (para los que no lo entiendan, esto ultimo da igual)

Por ejemplo:

Los comandos basicos son:

  • cd <directorio>: Cambia al directorio especificado
  • put <archivo local> [<archivo remoto>]: Envia un archivo 'archivo local' al servidor (si no se especifica el 'archivo remoto' se utilizara como nombre el de 'archivo local')
  • get <archivo remoto> [<archivo local>]: Envia del servidor el 'archivo remoto' al pc local (si no se especifica el 'archivo local' se utiliza como nombre el de 'archivo remoto')
  • mkdir <directorio>: Crea un directorio en el servidor
  • ls [<ruta>]: Muestra los contenidos del directorio actual (o si se especifica una ruta, de esa)
  • rm <archivo>: Elimina el archivo 'archivo'
  • rmdir <directorio>: Elimina el directorio 'directorio'
  • exit: Salir
  • !: Volver a la consola del pc local (cuando se salga de la consola se volvera a el SFTP)

SCP (Secure Copy, Copia Segura):


El comando basico de scp es el siguiente scp [[<usuario>@]<servidor>:]<archivo origen> [[<usuario>@]<servidor>:]<archivo destino 1> [ [[<usuario>@]<servidor>:]<archivo destino 2> ... ]

Es decir, el comando es scp y en cada opcion se utiliza la siguiente notacion para definir un archivo:

    [[<usuario>@]<servidor>:]<archivo> Si el archivo esta (o se va a copiar) a otro pc, se escribe <servidor> :  <archivo> , si el archivo es local, solo el nombre del archivo, y si el archivo esta en otro pc, pero se accede a traves de otro usuario, <usuario> @ <servidor> : <archivo>

El primer archivo es el que se va a copiar y los demas es a donde se va a copiar, por ejemplo:
Aqui se copia un archivo ('example') del servidor 'sleepless', a el archivo local 'example'.
Las opciones son parecidas a la del programa cp de unix, por ejemplo permite copiar directiorios enteros:

Cifrando conexiones:

Si conoces el protocolo SOCKS sabras que sirve para hacer servidores proxy y clientes para cualquier protocolo que funcione sobre TCP/IP (con SOCKS5 tambien sobre UDP/IP, pero en este caso concreto no), ssh permite utilizarlo para cifrar conexiones entre el cliente y el servidor, para proteger los datos en la red que hay entre los dos (y que puede ser insegura), la idea es algo asi:


[Cliente SSH] ~~~~~~~~~> [Servidor SSH] --------------> [Destino]
                        Red insegura                       Red segura
                          (Cifrado)                            (sin cifrar)

Esto sirve por ejemplo para un portatil que esta conectado a una wifi y que tiene (ya dentro de la red con cable, protegida, ...) un servidor SSH, se tunelan los paquetes hasta el servidor (a la aplicacion lo trata como un simple proxy SOCKS), donde ya no es posible un ataque tan sencillo como usar un sniffer en una red WEP.
Para hacer esto usaremos  ssh -D [<ip de enlace>:]<puerto de enlace>   [<usuario>@]< servidor> [-p <puerto para ssh>]

Como se puede ver es igual que un comando ssh con la diferencia de que se añade -D [<ip de enlace>:]<puerto de enlace>

La opcion -D significa que el tunelado sera dinamico (hay otras opciones que usan tunelado estatico, siempre al mismo pc y en el mismo puerto), sobre SOCKS.
La ip del enlace es opcional y sirve para concretar que interfaz de red se va a utilizar para la conexion, si no se especifica (o se usa un '*') cualquier pc en la red podra utilizar el tunel (esto puede ser util o no, dependiendo de las circunstancias), si no hay motivos para dejarlo abierto recomendaria utilizar 'localhost' (o '127.0.0.1') para permitir solo las conexiones locales.
Y puerto de enlace es el puerto que se proporcionara a los programas para que se conecten al tunel

Por ejemplo:

ssh -D localhost:1234 sleepless

Abrira una conexion SSH con 'sleepless' y un tunel SSH que se puede acceder por 'localhost' y por el puerto '1234' (normalmente solo el superusuario tiene permiso para abrir puertos con un numero menor que 1024)


Y esto es todo por ahora... (proximamente el SSHFS y las VPN)

[Referencias]
http://www.openssh.org/
http://www.lucianobello.com.ar/openssh/
http://tuxpepino.wordpress.com/2007/05/11/ssh-el-dios-de-la-administracion-remota/

Hasta otra.