La seguridad en los tiempos actuales requiere de estrategias para minimizar los ataques. Este documento presenta una estrategia para administrar remotamente un servidor privado mediante SSH a traves de una conexion a una VPN.
1. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
Conexión Segura a un VPS mediante una VPN SSL
Introducción:
Para asegurar la administración remota de un servidor privado virtual (Virtual Private
Server al cual llamaremos VPS de ahora en adelante) o una instancia virtual en la nube,
es recomendable establecer una conexión encriptada primero. Esto lo podemos hacer
mediante una VPN o consola SSH. La ventaja de una conexión mediante VPN es que
la misma dirige todo el tráfico mediante el túnel encriptado mientras que la conexión SSH
solamente lo haría por medio de la creación de túneles.
Al utilizar una conexión mediante una VPN SSL como OpenVPN estamos utilizando
solamente un puerto TCP, el 443, el cual es compartido por los servicios Web del
servidor.
Para efectos de este documento estaremos usando un servidor VPS con acceso de root
y les estaremos dando las siguientes recomendaciones para una conexión lo más segura
posible.
El sistema operativo utilizado en el VPS es el Ubuntu 16.04 LTS, y para las conexiones
estaremos usando el cliente SSH para SmartTTY http://smartty.sysprogs.com/ para
sistemas operativos Windows.
En este artículo se asume que el lector conoce como conectarse remotamente al servidor
VPS mediante SSH por lo que obviamos esa parte.
2. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
1. Actualización del sistema operativo Ubuntu:
Para actualizar el sistema operativo Ubuntu debemos ejecutar los siguientes
comandos
3. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
Este comando actualiza la lista de paquetes disponibles y sus versiones, pero no
instala o actualiza ningún paquete. Esta lista la coge de los servidores con
repositorios que tenemos definidos en el archivo /etc/apt/sources.list.
Después de ejecutado el comando anterior, se ejecuta el siguiente comando
Este comando instala las nuevas versiones los paquetes disponibles en la lista
definida en /etc/apt/sources.list.
2. Cambiar la clave del usuario root y cambiar el usuario root por un usuario con
menos privilegios para el acceso remoto.
Para cambiar la clave del usuario root debemos ejecutar
Aquí debemos introducir la clave en dos ocasiones para que sea almacenada
correctamente.
Después podemos agregar el usuario que estaremos usando en lugar de root para
conectarnos al servidor.
Con este comando agregamos al usuario, y el mismo comando nos pedirá
información del usuario como la clave y algunos datos del mismo. Adicionalmente
creara un grupo y carpeta de usuario.
4. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
3. Modificar la configuración del archivo /etc/ssh/sshd_config para evitar el
acceso por root y cambiar el puerto de conexión.
Para esto entramos a editar el archivo, en nuestro caso usaremos el editor nano.
Dentro del archivo de configuración recomendamos cambiar las siguientes opciones:
Port: es el puerto TCP al cual se conectara remotamente
ListenAddress: la dirección IP que tendrá abierto el puerto definido anteriormente y
que permitirá conexiones. Debe ser un IP activo del VPS. En este caso
recomendamos un IP privado del rango de la VPN que se creara posteriormente. Por
ahora lo dejaremos en el defecto 0.0.0.0 que indica que puede recibir conexiones de
cualquier dirección IP. Después de configurada la VPN podemos cambiar esta
dirección por una privada.
5. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
La siguiente opción a cambiar es la siguiente:
PermitRootLogin: originalmente esta en Yes, cambiar a no.
Agregar la línea AllowUsers y colocar al lado el nombre del usuario que se creó en
el segundo paso.
Después de realizados los cambios hay que salvar la configuración.
4. Instalación de la VPN SSL (OpenVPN)
Para la conexión remota a la administración usaremos una VPN SSL. Esto permite
utilizar el puerto 443 para la conexión desde el Internet. Estaremos usando el
producto OpenVPN Access Server que está basado en OpenVPN. Este paquete
contiene conexiones para dos usuarios lo que sería suficiente para la administración.
Para instalar este paquete en Ubuntu 16.04 debemos descargar el instalador genérico
para DEBIAN del sitio https://openvpn.net/index.php/access-server/download-
openvpn-as-sw/113.html?osfamily=Ubuntu
Para instalar nos ubicamos en la carpeta /tmp y ejecutamos el siguiente comando
6. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
Esto descargara la aplicación desde Internet. El nombre debe corresponder a la
última versión disponible en el repositorio.
Para instalar la aplicación se ejecuta el siguiente comando:
El último comando que se debe ejecutar es para asignar una clave segura al usuario
openvpn que es el administrador por defecto de la VPN.
Para acceder a la administración del VPN se utiliza el siguiente URL:
https://direcion-ip-publica:943/admin
7. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
La administración del OpenVPN está por ahora fuera de este documento por lo cual
instamos al lector a buscar referencias sobre cómo crear usuarios. Posteriormente
haremos un artículo detallado sobre el mismo. Como referencia dejamos el enlace
oficial del sitio web de OpenVPN.
https://openvpn.net/index.php/access-server/docs.html?id=229 .
Para descargar el cliente OpenVPN se entra a la dirección pública
Se coloca el usuario y la clave y se escoge la opción Login de la lista desplegable y
se presiona GO.
Después de entrar podrá encontrar la página con todos los clientes disponibles que
puede usar para conectarse.
8. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
La licencia gratuita permite hasta dos conexiones simultáneas al servidor VPN.
5. Cambiar Dirección de servicio SSH y ajuste del Firewall interno
Después de una prueba exitosa de conexión vienen los pasos más importantes para
garantizar que no podrán realizarse más conexiones desde cualquier dirección IP al
servidor SSH, el primero consiste en identificar las direcciones IP privadas de la VPN.
Para esto podemos ejecutar el siguiente comando:
IFCONFIG: muestra las interfaces de red activas del sistema operativo y sus
correspondientes direcciones IP.
9. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
Una vez identificada la IP Privada del servidor que usaremos para el SSH, hay que
modificar el archivo de configuración del servidor SSH.
Para esto usamos el siguiente comando:
Una vez dentro del archivo buscamos dentro la línea de opciones la siguiente:
ListenAddress: este comando le dice al servidor SSH en qué dirección estará
escuchando activamente las conexiones.
10. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
Se modifica la línea colocando la dirección privada del servidor, en el ejemplo es la
dirección 172.27.236.1
Hay que recordar que al reiniciar el servicio SSH o al servidor este solamente estará
activo para las conexiones privadas, es por eso que es necesario probar primero que
puede conectarse mediante la VPN. Para verificar que tenemos acceso, hacemos
PING a la dirección privada después de conectarnos por medio de la VPN.
Si tenemos respuesta es que podemos conectarnos.
El siguiente paso es reiniciar el servidor, lo cual debe variar dependiendo de su
proveedor de servicio.
6. Prueba de la conexión mediante la VPN:
Después de creada la VPN, probada la conexión y realizados los ajustes podemos
probar que el SSH solamente funciona para conexiones internas. Para esto
colocamos en nuestro cliente SSH preferido los parámetros del servidor:
En nuestro ejemplo usaremos Putty
11. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
Como prueba colocamos el nombre
del host o la dirección IP pública y
el puerto SSH activo.
Si nuestra configuración es correcta no
podremos conectarnos al servidor, porque
solamente estará disponible para conexiones
por las direcciones IP privadas, que solamente
se pueden acceder por la VPN.
Colocamos la dirección IP en el navegador para
la conexión al servidor VPN, en nuestro caso
sería así:
https://158.69.223.218/?src=connect
Y nos debe mostrar el dialogo de conexión.
Después de conectados al VPN podemos
probar nuevamente la conexión con la dirección
IP de la red privada, en nuestro caso el
172.27.236.1 y el puerto 222 para el SSH.
Como podemos ver, el servidor SSH está
esperando el usuario y clave para ser utilizados.
En una próxima entrega veremos cómo agregar un doble factor de autenticación
utilizando una aplicación de celular desarrollada por Google. Se trata de una medida de
12. Autor: José Antonio Carrasco Moreno – joseacarras@josecarrasco.com
seguridad extra que requiere de un código que tiene una validez de unos segundos hasta
volver a generar otro adicionalmente a la contraseña.