Ir al contenido principal

Asegurando SSH

Tomado de http://miguadalinex.blogspot.com/2009/03/servidor-ssh-con-una-ip-dinamica.html

Servidor ssh con una IP dinamica

SSH (Secure SHell) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo el ordenador mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X arrancado.

Instalación

Instala los paquetes openssh-server y openssh-client del repositorio main de Guadalinex.

Configuración

La configuración del servidor ssh no es complicada, voy a explicar como hacerla desde la línea de comandos en un Guadalinex V4 / V5, ignoro si en las anteriores sigue siendo igual.

Permitiendo y denegando el acceso al servidor

Para permitir y denegar los accesos, editaremos los archivos /etc/hosts.deny y /etc/hosts.allow. En el primero de ellos denegaremos todos los hosts y en el segundo permitiremos algunos, de forma que quedará todo denegado excepto lo que permitamos en hosts.allow.

Es imprescindible que comprendamos que los archivos hosts no se aplican solo al servidor ssh, sino a toda la máquina, por lo que hay que tener especial cuidado a la hora de permitir o denegar los accesos. Ésta práctica puede no ser adecuada en servidores web y tener en cuenta qué servicios permitir y denegar.

De ésta forma, si tenemos un servidor conectado a dos redes (una red interna y una red pública) podríamos denegar el acceso desde la red pública.

sudo gedit /etc/hosts.deny

Y añadimos la línea:

ALL: ALL

Ahora editamos el archivo hosts.allow:

sudo gedit /etc/hosts.allow

Y añadimos los hosts que queramos:

sshd: 192.168.0.10 # Permitir una dirección.
sshd: 192.168.0.* # Permitir todo el rango de la IP 192.168.0.1 a 192.168.0.255.

Ahora definiremos en qué dirección queremos que escuche el servidor ssh, de forma que en caso de tener varias interfaces de red (una pública y otra privada) sólo se acceda por una de ellas:

Editar el archivo /etc/ssh/sshd_config:

sudo gedit /etc/ssh/sshd_config

Cambiar la directiva ListenAddress a (por ejemplo) la dirección privada del servidor:

ListenAddress 192.168.0.1

Agregar usuarios para conectarse dentro del rango de IP en la red interna configurar

AllowUsers usuario@192.168.0.* # corresponde al rango 192.168.0.1 al 192.168.0.255
AllowUsers usuario@192.168.0.11 usuario2@192.168.0.12 usuario3@192.168.0.7 # definir 1 dirección de IP por usuario

Agregar usuarios para conectarse desde cualquier parte del mundo

AllowUsers usuario usuario2 usuario3

Recomendación: para evitar ataques de hackers y hacerles más difícil que se conecten se debe desactivar la opcion para que se conecte el usuario "root", cambiando a no en la siguiente líne.

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

Incrementado la seguridad

Cambiando a un puerto no estándar

Para aumentar la seguridad, una de las prácticas habituales es cambiar el puerto estándar (22) a uno no estádar (por ejemplo 5039).

Editamos el archivo /etc/ssh/sshd_config:

sudo gedit /etc/ssh/sshd_config

Cambiamos la directiva Port de 22 a (por ejemplo) 5039:

Port 5039

Con los pasos anteriores tendremos un servidor ya bastante seguro, pero todo se puede mejorar. Ahora vamos a definir otros aspectos de seguridad.

Cambiar el número de intentos fallidos de autentificación

Cambiar el número de intentos fallidos de autentificación es una buena estrategia, sobre todo si nuestro servidor está escuchando en una red pública. De ésta forma podemos evitar que un posible atacante intente repetidamente averiguar una contraseña.

Editamos el archivo /etc/ssh/sshd_config:

sudo gedit /etc/ssh/sshd_config

Cambiamos la directiva (si no está la añadimos) MaxAuthTries:

MaxAuthTries 2

Si fallas la contraseña dos veces, te desconecta.

Cambiar el número de conexiones concurrentes no autentificadas

Ésta es una buena estrategia también, para evitar intentos de conexión. La directiva MaxStartUps controla el número de conexiones no autenticadas en el servidor, de ésta forma, evitamos que posibles atacantes intentasen conectarse demasiadas veces.

Editamos el archivo /etc/ssh/sshd_config

sudo gedit /etc/ssh/sshd_config

Cambiamos o añadimos la directiva MaxStartUps:

MaxStartUps 3

Ya solo nos queda reiniciar el demonio ssh para que vuelva a funcionar con la nueva configuración:

$ sudo /etc/init.d/ssh restart

De ésta forma tendríamos un servidor ssh muy seguro.

Ya podemos hacer pruebas dentro de una red local desde un shell:

ssh -p puerto usuario@192.168.1.2

Conectarnos desde internet a nuestra IP dinámica

Una de las complicaciones para que exista la comunicación entre ambos computadores radica en que para comunicarse entre sí se debe conocer la IP del computador servidor (el que recibe la conexión); actualmente esto se hace prácticamente imposible debido que son cada vez menos los ISP'S que entregan IP estática, ahora cuando te conectas a internet recibes una nueva IP. Es aquí donde entra No-IP, el cual se encarga de averiguar la IP que se nos a entregado y la transforma en un nombre estático del tipo nombre.redirectme.net por ejemplo.
  • Ahora debemos crear una cuenta en la página de no-ip.com.
    Una vez realizada el alta y activada la cuenta mediante el enlace que te mandan por correo electronico nos vamos al apartado Add host y creamos uno nuevo.
  • Instalamos no-ip en Ubuntu. Podemos hacerlo de forma manual:

$ sudo apt-get install no-ip

y lo configuramos......

$ sudo no-ip -C

o bien desde los repositorios software de ubuntu donde encontraremos la ultima version llamada noip2 al instalarla se abre directamente la ventana de configuración.

Se nos preguntará por el e-mail y la password con que nos inscribimos en no-ip.com

No está demás recordar que debemos tener abiertos los puertos en nuestro cortafuegos/firewall desde donde "salen" los servicios (sshd, no-ip), el puerto de sshd depende de cual tu configuraste en el paso anterior y para no-ip es 8245 TCP. No obstante, no-ip se las apaña aunque no redireccionemos su puerto.

Especial cuidado hay que tener con los router que comunmente usamos y que por defecto no presentan actividados los puertos. Hay que entrar en la configuración del router desde un navegador web introduciendo 192.198.1.1 o en su defecto la puerta de enlace que hayamos configurado, introducimos el user y el pass del router (mirad vuestros manuales) y activar el puerto correspondiente en la cofiguracion NAT.

Ahora solo basta conectarnos de la siguiente manera:

$ ssh -p puerto (el que configuramos anteriormente) usuario@nombre.redirectme.net

NOTA: Hay que tener cuidado si estamos con ambos ordenadores en la misma red local y deseamos probar que funciona el servicio mediante el host no-ip. Recordemos que nuestro router solo redirecciona un puerto a una maquina por lo tanto debemos conectarnos al servidor por un puerto y escuchar con el cliente en otro... ambos habilitados en la configuración del router y en nuestro firewall. Existe una opción de conexión ssh -r que permite realizarlo aunque yo lo he provado, si estamos en la red local nos conectamos con ssh -p puerto 192.168.1.? y si estamos conectados a internet remotamente mediante nuestro host no-ip ssh -p puerto nombre.redirect.net.

Acceso ssh desde nuestro navegador de archivos nautilus

Siempre es bastante engorroso utilizar la consola comparado con un par de click con el ratón desde el entorno grafico. Así, vamos a configurar nuestro navegador de ubuntu nautilus para poder trabajar remotamente con nuestro servidor ssh como si se tratará de un disco duro local.

Pulsamos en el menu superior sobre archivo y a continuación conectar con el servidor y rellenamos el formulario: tipo de servicio a ssh, servidor con nuestra IP local o el host remoto no-ip según desde donde realicemos nuestra conexion, el puerto configurado en el servicio ssh, en carpeta ponemos el directorio raiz / o bien la ruta especifica a la que deseemos y marcamos la opción Añadir marcador espeficando el nombre del acceso directo que queramos que se muestre.

Ya tenemos configurado el acceso ssh mediante sftp nuestro servidor remoto mediante un simple click. Al pulsar sobre el acceso directo y realizar la conexión nos pide la contraseña, yo recomiendo dejar la opción por defecto Olvidar la contraseña inmediatamente o como máximo recordarla para la sesion pero esto ya es a gusto del consumidor y teniendo en cuenta que personas en un futuro pueden tener acceso a nuestro ordenador.

Comentarios

Entradas populares de este blog

Vulnerabilidad en Bluetooth -- BIAS

Será el fin de TCP con la llegada de HTTP/3

La  IETF (Internet Engineering Task Force)  ha  publicado  información sobre lo que será el nuevo protocolo de transferencia de hypertexto que tanto usamos a diario, cuando accedemos a sitios web. HTTP/3 ya no usará TCP nunca más. En su lugar se ejecutará sobre el protocolo QUIC. El protocolo QUIC fue elaborado conceptualmente por Google en 2012 y tiene como objetivo mejorar tanto la seguridad como el rendimiento ofrecido por  TCP - Transmission Control Protocol , sobre todo lo segundo. ¿Qué es Quic y sus diferencias con TCP?   Quick UDP Internet Connections, es un protocolo de capa de transporte que se basa en el multiplexado de conexiones UDP. De hecho, QUIC utiliza esta combinación: TCP + TLS + SDPY sobre UDP Esto lo hace con varias mejoras respecto a la actual implementación de TCP. La IETF ha estado desde 2016 trabajando a fondo con una versión global del protocolo alumbra do por Google, y finalmente ha sido este año cuando ha decidido incluirlo en la nueva versión HTTP/3.   Sin e

Zoom y sus vulnerabilidades

Leyendo acerca de todas las quejas en cuanto a brechas de seguridad que tiene Zoom la plataforma de videoconferencia que conocí hace unos años, pero que ahora debido a la necesidad de estar en casa debido al COVID19, la ha convertido en la herramienta que muchos usan para sus reuniones empresariales virtuales, sus llamadas privadas o incluso para las fiestas virtuales o noches de Netflix.   Solo precisar que no es la única herramienta que se tiene para tener este tipo de video conferencias, alternativas como WhatsApp (Vulnerable- Facebook de por medio.. hmm) o como Teams de Microsoft, Cisco Webex, Webex Meetings (se necesita pago) o  Jitsi , esta última es de uso gratuito también y con algunas mejoras en su seguridad realizadas hace poco, puede ser una plataforma para cubrir esta necesidad.   Si  la opción es usar Zoom, no esta de más revisar este  link  para tratar de asegurar esta aplicación y sentirse un poco más tranquilo, o también puede ver el siguiente video.   Aquí les comparto