miércoles, 17 de julio de 2013

SSH, SCP y SSHFS, conexiones seguras remotas.

Introducción.
SSH (Secure Shell, en español: interprete de ordenes seguras) es un protocolo que nos sirve para acceder a una maquina remota a través de la red y estando en otra maquina, parecer que estamos en ella. Un servidor SSH escucha por defecto en el puerto 22.

SSH trabaja de forma parecida a telnet, pero lo hace de forma cifrada, por lo que si interceptan el mensaje y no tienen la contraseña no podrán leer el contenido.

Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.

Instalación del cliente:
# aptitude install openssh-client

Instalación del servidor:
# aptitude install openssh-server

Ficheros de configuración:
Los ficheros de configuración principales se encuentran en el directorio: /etc/ssh y son:
-ssh_config: fichero de configuración del cliente.
-sshd_config: fichero de configuración del servidor.

Configuración del servidor.
Tras la instalación del servidor nos podemos conectar a el. Se instala con los parámetros por defectos y los podemos encontrar en el fichero de configuración sshd_config. Algunas lineas que nos pueden interesar (Muchas lineas están comentadas, para que funcionen tienes que quitar el # y otras no se encuentran y tienes que añadirlas):
-Port: en el especificamos el puerto en el que escucha nuestro servidor, por defecto el 22. Cambiar el puerto evita los ataques automáticos a el puerto 22.
-Protocol: protocolo ssh que utilizamos, es preferible utilizar solo el 2, ya que el 1 es mas inseguro.
-PermitRootLogin: esta opción por defecto esta en yes, no es muy aconsejable conectarse directamente como root, yo aconsejaría ponerla en no.
-MaxAuthTries: en esta linea especificamos el numero de intentos fallidos de autenticación. Si fallas ese numero de veces, te desconectas.
-ListenAddress:  dirección en la que escucha el servidor.
-AllowUsers: por defecto están todos los usuarios, si ponemos esta directiva, solo podrán conectarse los usuarios que pongamos separados por espacios.

Tras la modificación de algunos de las opciones anteriores tenemos que reiniciar el servidor para que funcione con ellas:
/etc/init.d/ssh restart

Otros ficheros que tenemos que tener en cuenta a la hora de la seguridad de nuestro servidor son los ficheros /etc/hosts.allow y /etc/hosts.deny.
hosts.deny: este fichero sirve para denegar el acceso, yo por defecto lo tengo todo denegado.
ALL : ALL

hosts.allow: este fichero sirve para permitir el acceso. En nuestro caso solo tenemos que darle acceso a el servidor ssh. Yo le he dado permiso a todas las redes, podríamos ser mas estrictos.
sshd : ALL

Comandos básicos del cliente.
La conexión mas sencilla, seria:
$ ssh usuario@servidor

Si el usuario con el que nos conectamos se llama igual que con el que nos conectamos, podemos omitir el nombre de usuario:
$ ssh servidor

Para conectarnos a un puerto diferente utilizamos la opción -p y el puerto, por ejemplo el 2222:
$ ssh -p 2222 usuario@servidor

Si nos va a hacer falta ejecutar programas que necesitan interfaz gráfica utilizamos la opción -X(es mayúscula):
$ ssh -X usuario@servidor

Copia remota de archivos(SCP).
Esto es muy útil para pasar archivos de una maquina a otra. Para copiar archivos de un servidor (/ruta/archivo) a nuestra maquina (/home/usuario):
$ scp -r -p usuario@servidor:/ruta/archivo /home/usuario
Las opciones -r y -p son opcionales. Su funciones son:
-r: copiado recursivo.
-p: preservar los atributos de los archivos.

También podemos hacerlo al revés y copiar archivos locales a un servidor:
$ scp /home/usuario/archivo usuario@servidor:/ruta/

Utilización de llaves de autenticación.
Lo primero es crear la llave del cliente, para esto, en la maquina del cliente y con el usuario que queremos acceder ejecutamos:
$ ssh-keygen -t rsa -b 2048

Este comando te pregunta donde desea guardar las claves y si quieres ponerle contraseña. Si no le ponemos contraseña cualquiera puede utilizar la clave. Ahora tenemos que enviar la clave a el servidor, ya sea con un USB, DVD, CD... lo que deseen, yo suelo optar por el scp:
$ scp ~/.ssh/id_rsa.pub usuario@servidor:~

Ya tenemos la clave en nuestro servidor, ahora tenemos que agregarla a nuestras claves autorizadas. Para esto ejecutamos (desde el servidor):
$ cat id_rsa.pub >> .ssh/authorized_keys || rm id_rsa.pub

Tenemos que tener la lista de claves bien protegidas:
$ chmod 600 ~/.ssh/authorized_keys

Esto puede ser utilizado cuando queremos que dos servidores automaticen cosas uno del otro, así puede acceder automáticamente.

Montar un sistema de archivos remoto (SSHFS).

Con esta herramienta podemos montar un sistema de archivos, como si estuvieran en nuestra maquina. Lo primero es la instalación:
# aptitude install sshfs

Comprobamos que tenemos cargado el modulo fuse, de no ser asi lo cagamos:
# lsmod | grep fuse
Si no aparece:
# modprobe fuse

Si queremos utilizar esta herramienta con un usuario que no sea el superusuario tendremos que agregarlo al el grupo fuse en el fichero /etc/group. Tras agregarlo cerrar e iniciar sesión de nuevo para que coja los cambios.

Bibliografía:
http://wiki.debian.org/SSH
https://wiki.archlinux.org/index.php/Secure_Shell_(Espa%C3%B1ol)
http://wiki.debianchile.org/SSH#Uso_de_SSH# aptitude install openssh-server

Ficheros de configuración:
Los ficheros de configuración principales se encuentran en el directorio: /etc/ssh y son:
-ssh_config: fichero de configuración del cliente.
-sshd_config: fichero de configuración del servidor.

Configuración del servidor.
Tras la instalación del servidor nos podemos conectar a el. Se instala con los parámetros por defectos y los podemos encontrar en el fichero de configuración sshd_config. Algunas lineas que nos pueden interesar (Muchas lineas están comentadas, para que funcionen tienes que quitar el # y otras no se encuentran y tienes que añadirlas):
-Port: en el especificamos el puerto en el que escucha nuestro servidor, por defecto el 22. Cambiar el puerto evita los ataques automáticos a el puerto 22.
-Protocol: protocolo ssh qu e utilizamos, es preferible utilizar solo el 2, ya que el 1 es mas inseguro.
-PermitRootLogin: esta opción por defecto esta en yes, no es muy aconsejable conectarse directamente como root, yo aconsejaría ponerla en no.
-MaxAuthTries: en esta linea especificamos el numero de intentos fallidos de autenticación. Si fallas ese numero de veces, te desconectas.
-ListenAddress:  dirección en la que escucha el servidor.
-AllowUsers: por defecto están todos los usuarios, si ponemos esta directiva, solo podrán conectarse los usuarios que pongamos separados por espacios.

Tras la modificación de algunos de las opciones anteriores tenemos que reiniciar el servidor para que funcione con ellas:
/etc/init.d/ssh restart

Otros ficheros que tenemos que tener en cuenta a la hora de la seguridad de nuestro servidor son los ficheros /etc/hosts.allow y /etc/hosts.deny.
hosts.deny: este fichero sirve para denegar el acceso, yo por defecto lo tengo todo denegado.
ALL : ALL

hosts.allow: este fichero sirve para permitir el acceso. En nuestro caso solo tenemos que darle acceso a el servidor ssh. Yo le he dado permiso a todas las redes, podríamos ser mas estrictos.
sshd : ALL

Comandos básicos del cliente.
La conexión mas sencilla, seria:
$ ssh usuario@servidor

Si el usuario con el que nos conectamos se llama igual que con el que nos conectamos, podemos omitir el nombre de usuario:
$ ssh servidor

Para conectarnos a un puerto diferente utilizamos la opción -p y el puerto, por ejemplo el 2222:
$ ssh -p 2222 usuario@servidor

Si nos va a hacer falta ejecutar programas que necesitan interfaz gráfica utilizamos la opción -X(es mayúscula):
$ ssh -X usuario@servidor

Copia remota de archivos(SCP).
Esto es muy útil para pasar archivos de una maquina a otra. Para copiar archivos de un servidor (/ruta/archivo) a nuestra maquina (/home/usuario):
$ scp -r -p usuario@servidor:/ruta/archivo /home/usuario
Las opciones -r y -p son opcionales. Su funciones son:
-r: copiado recursivo.
-p: preservar los atributos de los archivos.

También podemos hacerlo al revés y copiar archivos locales a un servidor:
$ scp /home/usuario/archivo usuario@servidor:/ruta/

Utilización de llaves de autenticación.
Lo primero es crear la llave del cliente, para esto, en la maquina del cliente y con el usuario que queremos acceder ejecutamos:
$ ssh-keygen -t rsa -b 2048

Este comando te pregunta donde desea guardar las claves y si quieres ponerle contraseña. Si no le ponemos contraseña cualquiera puede utilizar la clave. Ahora tenemos que enviar la clave a el servidor, ya sea con un USB, DVD, CD... lo que deseen, yo suelo optar por el scp:
$ scp ~/.ssh/id_rsa.pub usuario@servidor:~

Ya tenemos la clave en nuestro servidor, ahora tenemos que agregarla a nuestras claves autorizadas. Para esto ejecutamos (desde el servidor):
$ cat id_rsa.pub >> .ssh/authorized_keys || rm id_rsa.pub

Tenemos que tener la lista de claves bien protegidas:
$ chmod 600 ~/.ssh/authorized_keys

Esto puede ser utilizado cuando queremos que dos servidores automaticen cosas uno del otro, así puede acceder automáticamente.

Montar un sistema de archivos remoto (SSHFS).

Con esta herramienta podemos montar un sistema de archivos, como si estuvieran en nuestra maquina. Lo primero es la instalación:
# aptitude install sshfs

Comprobamos que tenemos cargado el modulo fuse, de no ser asi lo cagamos:
# lsmod | grep fuse
Si no aparece:
# modprobe fuse

Si queremos utilizar esta herramienta con un usuario que no sea el superusuario tendremos que agregarlo al el grupo fuse en el fichero /etc/group. Tras agregarlo cerrar e iniciar sesión de nuevo para que coja los cambios.

Bibliografía:
http://wiki.debian.org/SSH
https://wiki.archlinux.org/index.php/Secure_Shell_(Espa%C3%B1ol)
http://wiki.debianchile.org/SSH#Uso_de_SSH