CLICK HERE FOR THOUSANDS OF FREE BLOGGER TEMPLATES »

domingo, 8 de febrero de 2009

Archivo de configuracion de openssh

Líneas de configuración de openssh sshd_config.

Vayamos a las primeras líneas que están así:

#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::

esto es el puerto tcp en el que escucha peticiones el servidor sshd. Por lo tanto quedara así:

Port 22

Ahora hay que descomentamos la linea de #Protocol 2,1 y dejarla así:

Protocol 2

En este caso solo haremos uso de la versión 2 del protocolo ssh.

La siguiente linea, es para configurar la dirección IP asignada a alguna interfaz de red en la que el servidor ssh escuchara peticiones, si el servidor tiene varias interfaces de red con diferentes direcciones IP asignadas entonces por default el servidor sshd escuchara peticiones en todas ellas, como lo vimos al ejecutar el comando netstat en la parte de arriba, esto es útil por ejemplo cuando tenemos un servidor que tiene dos interfaces de red una para Internet y otra para la red local, y solo quisiéramos que escuchara peticiones en la interfaz de la red local, o en la de Internet, entonces podría ser cambiado a algo así:

ListenAddress 192.168.0.1

NOTA: Si deseas que escuche peticiones en todas las interfaces de red, quizás porque necesites administrar el servidor de manera remota por Internet entonces hay que dejar la línea tal y como esta.

Ahora, las siguientes lineas están así:

Archivos que contienen las llaves privadas de host a usar (solo permisos rw- para root)

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

Ahora sigue la parte en la que el servidor sshd guarda los registros de eventos (logs):

# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

Aquí se especifican los parámetros para el registro de eventos, SyslogFacility especifica el tipo de registros que hará, en este caso es AUTH, ósea de las autenticaciones que se hacen contra el servidor, el parámetro AUTH es el predeterminado.

En LogLevel INFO es el valor predeterminado.


Ahora sigue la parte de los métodos de autenticación.

Por default esta así:

# Authentication:
#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6

La primera opción es: #LoginGraceTime 2m, esto le dice al servidor sshd el tiempo en el que desconectara a el usuario después de que no ha podido iniciar sesión satisfactoriamente, si el valor es 0, no hay limite de tiempo para que un usuario se autentique, lo cual no es recomendable ya que de esta manera podrían hacer ataques de fuerza bruta, o usando métodos de diccionario y así adivinar la contraseña (estos métodos son muy comunes últimamente, por lo tanto no es recomendable dejar este parámetro a 0, el valor predeterminado es: 2m, osea 120 segundos.
Se des comentara y se dejara por default haciendo explicito:

LoginGraceTime 2m

El siguiente parámetro es uno de los más importantes en cuanto a seguridad en el servidor sshd se refiere: #PermitRootLogin yes, este parámetro por default le dice que acepte conexiones con el usuario "root" lo cual no es nada recomendable, porque alguien podría identificarse como tal usuario y podría adivinar la contraseña, y tendría privilegios de "root" y así podría hacer cualquier cosa, por lo tanto se desactivara poniendo:

PermitRootLogin no

Luego sigue: StrictModes yes, esto significa que sshd revisara los modos y permisos de los archivos de los usuarios y el directorio $HOME de el usuario antes de aceptar la sesión. Esto es normalmente deseable porque algunos novatos algunas veces dejan sus directorios accidentalmente con permiso de escritura para cualquiera, el valor predeterminado es 'yes'. Por lo tanto lo dejaremos con su valor predeterminado y solo lo des comentaremos para hacerlo explicito:

StrictModes yes

Y el último de estas opciones es: MaxAuthTries 6, esta opción especifica el máximo número de intentos de autenticación permitidos por conexión. Una vez que el intento alcanza la mita de este valor, las conexiones fallidas siguientes serán registradas. El valor predeterminado es 6. En este caso lo dejaremos con su valor predeterminado, pero lo des comentaremos para hacerlo explicito, así:

MaxAuthTries 6

Las siguientes opciones son:

Permitimos la autentificación por RSA (solo para v1)
#RSAAuthentication yes

Permitimos la autentificación por clave pública (solo para v2)
#PubkeyAuthentication yes

Y esta otra se usa en conjunto cuando se usa autenticación por llave pública, que específica donde se guardaran las llaves en el host remoto, el valor por default es: ~/.ssh/authorized_keys esta ruta es por default para el protocolo 2 de ssh, entonces la des comentaremos para hacerla explicita, así:
#AuthorizedKeysFile .ssh/authorized_keys

Las siguientes opciones son:

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

Todas están comentadas de manera predeterminada, la mayoría se refieren a autenticación por RSA y rhosts, una que es importante aclarar es la de: #IgnoreUserKnownHosts no, la cual especifica si se ignorara o no el uso de el archivo ~/.ssh/known_hosts el cual al principio vimos que ahí se agregan las llaves de los servidores ssh a los cuales nos conectamos y confiamos. Por lo tanto debe de estar en 'no' para no ignorar este archivo, entonces deberá de quedar todo el bloque así:

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes

El siguiente bloque es:

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

La primera opción es para especificar si se permite la autenticación por medio de usuario/contraseña, por default esta en 'yes' entonces lo dejaremos así, cuando sigamos en la segunda parte de el documento donde se usan par de llaves publica/privada, se cambiara este parámetro para solo conectarnos usando nuestro par de llaves. La segunda opción especifica si se permitirá el uso de contraseñas vacías, es decir autenticarse sin contraseña (no recomendable), esto solo es valido cuando se usa PaswordAuthenticacion yes. Por ahora dejaremos los valores predeterminados y solos las descomentaremos para hacerlas explicitas, así:

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
PermitEmptyPasswords no

Ahora miraremos la sección que esta así:

#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10

Aquí solo comentare a grandes rasgos algunas opciones.

AllowTcpForwarding yes:

Especifica si se permite hacer re direccionamiento de protocolos TCP, esto para hacer túneles de la conexión de un protocolo no seguro, que envía la información en texto plano, y mandarla por un túnel cifrado, muy usual con conexiones POP3 o IMAP, se recomienda dejarlo por default.

X11Forwarding no, X11DisplayOffset 10 y X11UseLocalhost yes:

Se refieren para especificar si se permite hacer uso de el X11 Forwarding, esto para ejecutar aplicaciones gráficas de el server, en el host local, podría ser útil para conectarse a hosts y ejecutar alguna aplicación gráfica, aunque en algunos servidores es raro tener el sistema gráfico, por ahora se dejaran tal y como están.

PrintMotd yes:

Específica si cuando se establezca una conexión, se imprima el Mensaje de el Día (MOTD) se deja por default.

PrintLastLog yes:

Aquí se especifica si se mostrara el mensaje mostrando la dirección IP de donde se conecto el usuario la ultima vez, muy útil para saber si alguien más se esta conectando con un usuario en especifico.

TCPKeepAlive yes:

Significa que el servidor sshd enviara mensajes de keepalive a el cliente después de que detecta alguna inactividad (idle), este método puede ser spoofable.

UsePrivilegeSeparation yes:

Significa que después de que la sesión ssh se ha establecida se pasaran los privilegios de ese proceso a el usuario de quien inicie la conexión, sin esto el proceso estará a nombre de root, muy bueno esto para evitar elevación de privilegios.

ClientAliveInterval 0:

Esta opción especifica el intervalo de tiempo en segundos en el cual después de que no se ha recibido ningún dato de el cliente, sshd enviara un mensaje a través de el canal cifrado para requerir una respuesta de el cliente, el valor predeterminado es 0, el cual significa que no se envía tal mensaje, esta opción aplica solamente al protocolo ssh 2 esta opción útil cuando se tienen una conexión intermitente.

ClientAliveCountMax 3:


Este valor indica las veces que el servidor sshd enviara mensajes keepalive cuando el cliente esta inactivo, si el cliente no envia ninguna respuesta entonces el servidor terminara la conexion y por lo tanto la sesion, si tienes una conexiones intermitentes es recomendable subir el numero a este valor, hay que notar que esta opcion es diferente la opcion TCPKeepAlive, estos mensajes son enviados a través de el canal cifrado, por lo tanto no sera spoofable, como el TCPKeepAlive.


PidFile /var/run/sshd.pid

Esta opcion indica identificador de proceso (pid) de sshd.

Bien ahora que hable de las opciones de este bloque, usando los valores predeterminados, deberá quedar asi:

AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes
PrintMotd yes
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression yes
ClientAliveInterval 0
ClientAliveCountMax 3
UseDNS yes
PidFile /var/run/sshd.pid
MaxStartups 10

Y por ultimo esta la opcion:

# override default of no subsystems
Subsystem sftp /usr/libexec/sftp-server

Esta opcion lo que hace es iniciar el servidor sftp-server el cual es un sustituto para un servidor ftp, pero la comunicacion es segura, ya que se hace por un canal cifrado.

1 comentarios:

Miss Rodriguez dijo...

Muchas gracias por tu post y tu tiempo. Estoy aprendiendo Debian y esto me viene fenomenal.