Conexión remota segura mediante ssh con Openssh.
El servidor de shell seguro o SSH (Secure SHell) es un servicio muy similar al servicio telnet ya que permite que un usuario acceda de forma remota a un sistema Linux pero con la particularidad de que, al contrario que telnet, las comunicaciones entre el cliente y servidor viajan encriptadas desde el primer momento de forma que si un usuario malintencionado intercepta los paquetes de datos entre el cliente y el servidor, será muy dificil que pueda extraer la información ya que se utilizan sofisticados algoritmos de encriptación.
No utilizar nunca telnet y utilizar ssh en su lugar.
Para que un usuario se conecte a un sistema mediante ssh, deberá disponer de un cliente ssh. Desde la primera conexión, y mediante encriptación asimétrica, las comunicaciones se encriptan incluido el proceso de autentificación del usuario cuando proporciona su nombre y su contraseña. También se proporciona una clave de encriptación simétrica para encriptar las comunicaciones del resto de la sesión mediante encriptación simétrica por su menor necesidad de procesamiento.
OpenSSH
OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar
comunicaciones cifradas a través de una red, usando como base al protocolo SSH.
Para instalar el servidor y el cliente ssh debemos instalar mediante apt-get el paquete ssh,
tanto en la aplicación del servidor como en la aplicación cliente:
// Instalación de servidor Openssh y cliente Openssh
root@servidor:# apt-get install ssh
Los archivos de configuración son:
• /etc/ssh/ssh_config: Archivo de configuración del cliente ssh
• /etc/ssh/sshd_config: Archivo de configuración del servidor ssh
Arranque y parada manual del servidor ssh
El servidor ssh, al igual que todos los servicios en Debian, dispone de un script de arranque y parada en la
carpeta /etc/init.d.
// Iniciar o Reiniciar el servidor ssh
root@cnice-desktop:# /etc/init.d/ssh restart
// Parar el servidor ssh
root@cnice-desktop:# /etc/init.d/ssh stop
Arranque automático del servidor se han de crear los enlaces simbolicos
Configuración de OpenSSH
Archivos de configuración del servidor
La ubicación de los ficheros referentes al servidor se encuentran en la ruta: /etc/ssh/
Dentro del directorio podemos encontrar los siguientes ficheros de configuración:
moduli Contiene grupos Diffie-Hellman usados para el intercambio de la clave Diffie-Hellman que es imprescindible para la construcción de una capa de transporte seguro. Cuando se intercambian las claves al inicio de una sesión SSH, se crea un valor secreto y compartido que no puede ser determinado por ninguna de las partes individualmente. Este valor se usa para proporcionar la autenticación del host.
ssh_config El archivo de configuración del sistema cliente SSH por defecto. Este archivo se sobrescribe si hay alguno ya presente en el directorio principal del usuario
sshd_config El archivo de configuración para el demonio sshd
Factor Evolución SA de CV http://www.linuxparatodos.net
ssh_host_dsa_key La clave privada DSA usada por el demonio sshd
ssh_host_dsa_key.pub La clave pública DSA usada por el demonio sshd
ssh_host_rsa_key La clave privada RSA usada por el demonio sshd para la
versión 2 del protocolo SSH. ssh_host_rsa_key.pub La clave pública RSA usada por el demonio sshd para la versión 2 del protocolo SSH.
Archivos de configuración del cliente
La ubicación de los ficheros referentes al cliente se encuentran almacenados en el directorio de trabajo de cada usuario:
Ejemplo: “/home/antonio/.ssh/”
Dentro del directorio podemos encontrar los siguientes ficheros de configuración:
- identity.pub La clave pública RSA usada por ssh para la versión 1 del protocolo SSH.
- known_hosts Este archivo contiene las claves de host DSA de los servidores SSH a los cuales el usuario ha accedido. Este archivo es muy importante para asegurar que el cliente SSH está conectado al servidor SSH correcto.
Configuración de fichero sshd_config
La función que desempeñan los ficheros de configuración de openSSH son de vital importancia para la seguridad de nuestro servidor , ya que si no se llegaran a configurar apropiadamente estos ficheros, la vulnerabilidad de nuestro servidor podría aumentar.
Blindando el fichero sshd_config
Este fichero lo podrá localizar en en la siguiente ruta /etc/ssh/
El siguiente paso sera abrir el fichero con la ayuda del editor de textos
[root@server1:~$ nano /etc/ssh/sshd_config
A partir de este punto comenzaremos a blindar SSH.
*Cambiando el puerto
SSH tiene asignado por defecto el puerto 22, esto es algo que conocen todos nuestros posibles atacantes , por lo que es una buena idea cambiarlo se recomienda usar un puerto cualquiera por encima del 1024, por lo que tendrá que editar el parámetro Port del
fichero de configuración el cual deberá quedar así:
Port 59345
* Protocolos ssh.
Hay dos versiones de ssh en cuanto a su protocolo de comunicación, estas son:
● Versión 1
● Versión 2.
La versión 1 de openSSH hace uso de varios algoritmos de cifrado de datos que han dejado de ser mantenidos por sus creadores y por lo tanto presenta serios huecos de seguridad que potencialmente permite a un intruso insertar datos en el canal de comunicación. Para evitar el uso del protocolo 1 y sus posibles ataques a este, basta con indicar que solo admita comunicaciones de ssh basadas en el protocolo 2.
Por defecto en debian/ubuntu ya viene configurado en el versión 2 del protocolo.
*Parámetro PermitRootLogin.
Este es quizá el parámetro más importante de seguridad que podemos indicar para blindar
nuestro servidor. Prácticamente la mayoría de sistemas operativos Linux crean por defecto al usuario root , es por ello que la mayoría de los ataques informáticos se concentran en atacar al equipo a través de la cuenta de root y mucho mas si la cuenta tiene asignada una contraseña débil, una manera de deshabilitar el logeo al sistema a través de la cuenta de root es poner en ‘no’ la variable PermitRootLogin , con esto el usuario root no tendrá permiso de acceder mediante ssh y por lo tanto cualquier intento de ataque directo a root será inútil. Con esto siempre tendremos que ingresar como un usuario normal y ya estando adentro entonces mediante un su – cambiarnos a la cuenta de root.
Para llevar a cabo estos cambios tendrá que editar el parámetro PermitRootLogin del fichero de configuración el cual deberá quedar de la siguiente manera:
PermitRootLogin no
* Parámetro X11Forwarding.
Si nuestro servidor no tienen entorno gráfico instalado, o no queremos que los usuarios se
conecten a él, definiremos esta opción en el fichero de configuración: Para llevar a cabo estos cambios tendrá que editar el parámetro X11Forwarding del fichero de configuración el cual deberá quedar de la siguiente manera:
X11Forwarding no
*Parámetro LoginGraceTime.
El número indica la cantidad de segundos en que la pantalla de login estará disponible para que el usuario capture su nombre de usuario y contraseña, si no lo hace, el login se cerrará, evitando así dejar por tiempo indeterminado pantallas de login sin que nadie las use, o peor aun, que alguien este intentando mediante un script varias veces el adivinar un usuario y contraseña. Si somos el único usuario del sistema considero que con 20 o 30 segundos es más que suficiente.
Para llevar a cabo estos cambios editamos el parámetro LoginGraceTime del fichero de
configuración el cual deberá quedar de la siguiente manera:
LoginGraceTime 30
* Permitiendo AllowUsers.
Este parámetro solo permitirá la conexión a los usuario que este registrados del archivo de
configuración del openssh si el parámetro no existe nosotros lo podemos agregar el parámetro al final del archivo.
AllowUsers curso