viernes, 23 de abril de 2004

Guía para la instalación de OpenSSH (y II)

Aprovechando la reciente publicación de la versión 3.8.1 de
OpenSSH, la versión libre de la familia de protocolos SSH,
ofrecemos una breve guía sobre como obtenerlo, verificar su
integridad, compilarlo, instalarlo, así como unas nociones
básicas acerca la configuración del mismo.

Instalación

Finalizada la compilación sin errores disponemos de una copia
personalizada de OpenSSH lista para su instalación, realizando
los siguientes pasos:

$ su
Password:

# find /* > OpenSSH1
# make install
# find /* > OpenSSH2
# diff OpenSSH1 OpenSSH2 > OpenSSH-Installed

Los pasos que realizamos son los siguientes:

En primer lugar, nos hacemos administrador del sistema, debido a
que la instalación de OpenSSH debe realizarse en determinados
directorios sobre los que únicamente el administrador tiene
privilegios de escritura.

A continuación obtenemos una relación de todos los archivos
existentes en el sistema y la salvamos en un archivo temporal.

El tercer paso consiste en ejecutar make install para proceder a
la instalación de OpenSSH.

Repetimos la operación de obtener un listado de todos los
archivos existentes en el sistema. Comparando con diff las dos
listas, antes y después de la instalación, obtendremos la
relación de todos los cambios que ha realizado la instalación de
OpenSSH en nuestro sistema.


Verificación

La forma más simple de verificar que la nueva versión es
totalmente operativa consiste en probarla. Para ello, es
necesario ejecutar el servidor de SSH y realizar una serie de
comprobaciones básicas

# /usr/sbin/sshd
# telnet localhost 22
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.8.1p1

Hasta ahora todo parece correcto. A continuación, podemos
utilizar el cliente ssh para realizar una conexión al servidor:

# ssh usuario@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 05:75:98:18:fd:52:ae:1b:8a:2f:7f:1c:0b:5b:ff:d6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
usario@localhost's password:
$

El cliente SSH ha podido establecer la conexión con el servidor,
nos avisa de que no puede establecer la autenticidad del servidor
ya que no identifica la clave pública del mismo dentro del
archivo de sistemas de confianza por lo que nos pide si realmente
queremos conectar con él. A continuación pide la contraseña del
usuario y, si facilitamos la correcta, nos devuelve el indicador
del shell.

Si esto no funciona. es hora de utilizar las funciones de
depuración, tanto en el servidor (/usr/sbin/sshd -d3) como en el
cliente (ssh -v) que son de gran ayuda para identificar los
problemas.


Configuración de SSH

Si lo que hemos realizado es una actualización de OpenSSH, ya
hemos terminado.

En cambio, si es una instalación nueva, existe un paso adicional:
crear los archivos de configuración del servidor (sshd) y del
cliente (ssh). Vamos a mostrar una configuración simple que pueda
servir de base para personalizar a los requerimientos especiales
de cada instalación.


Archivo de configuración del servidor SSH

Editar el archivo /etc/ssh/sshd_config tomando como ejemplo el
que incluimos a continuación:

--- sshd_config ---

Port 22
Protocol 2
ListenAddress x.x.x.x
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 768
LoginGraceTime 60
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd yes
KeepAlive yes
SyslogFacility AUTHPRIV
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication no
PasswordAuthentication yes
PermitEmptyPassowrds no
AllowUsers sysadmin
UsePrivilegeSeparation yes
Subsystem sftp /usr/libexec/openssh/sftp-server

--- sshd_config ---

En esta configuración, indicamos que sólo se utiliza el protocolo
SSHv2, la interfaz (indicada por la dirección IP) asociada al
servidor, la ubicación de las claves del servidor, el tamaño de
la clave y la auto-regeneración automática de la misma, ignorar
los archivos rhosts y shosts, los tipos de autenticación que se
permiten (como hemos configurado el servidor para que sólo
utilice SSHv2, no permitimos la utilización de claves RSA para la
autenticación), etc.

Todos los parámetros que utilizamos en esta configuración están
pensados para un servidor SSH con autenticación de usuarios
mediante contraseña y utilizando las diversas opciones de
seguridad disponibles.


Archivo de configuración del cliente SSH

El archivo de configuración del cliente es /etc/ssh/ssh_config. Aconsejamos
utilizar las siguientes opciones:

--- ssh_config ---

Host *
ForwardAggent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication no
PasswordAuthentication yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP yes
StrictHostKeyChecking yes
IdentityFile ~/.ssh/identity
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_rsa
Port 22
Protocol 2
Cipher blowfish
EscapeChar ~

Host x.x.x.x
# Opciones especificas para
# un servidor SSH concreto

--- ssh_config ---

En este archivo de configuración se activan las características
generales de seguridad del cliente SSH para realizar únicamente
conexiones con protocolo SSHv2, permitiendo la autenticación
mediante contraseñas.

Asimismo se deshabilitan expresamente algunas opciones que pueden
provocar agujeros en la seguridad, como la posibilidad de
utilizar rsh si no es posible establecer una conexión SSH.

Adicionalmente, en función de la versión del sistema operativo
que se utilice existen otros archivos que puede ser necesario
configurar, tales como la configuración del soporte PAM de
OpenSSH (habitualmente, /etc/pam.d/sshd) y el script para
ejecutar sshd automáticamente cada vez que arranca el sistema.
Debido al carácter general de este boletín, no podemos cubrir
todas las posibles variantes, por lo que el lector deberá acudir
a la documentación específica de su sistema.


Xavier Caballé
xavi@hispasec.com


Más información:

OpenSSH
http://www.openssh.org