3 mejores prácticas para asegurar servidores Ubuntu Linux en Internet
Imagínate esta situación: Estás ansioso/a por probar la nueva versión de tu framework web open-source favorito y te decides a crear un servidor virtual Linux en tu proveedor de nube para alojarlo. No pasa ni una hora, ya terminaste la instalación y estás por compartir el URL a tus amigos devs para presumir tu logro, cuando empiezas a notar algo extraño y piensas: “¿Por qué está tan lento el servidor? ¿Y estos procesos que están corriendo? ¡No tienen que ver con mi aplicación!”.
Estás a punto de darte cuenta de que tu servidor ha sido vulnerado y no sabes cómo sucedió.
Esta situación hipotética, pero no alejada de la realidad, nos muestra cómo las amenazas que existen en Internet ponen en riesgo desde un proyecto personal que no implica pérdida de información muy grande, hasta la supervivencia completa de un gigante tecnológico. Basta leer algunos encabezados de los feeds de noticias especializadas en seguridad informática para darnos una idea de la magnitud del problema.
Ahora, la seguridad informática es una disciplina muy amplia y requiere de un conjunto de conocimientos y años de experiencia para dominarla. Sin embargo, algunos conocimientos básicos pueden ayudar mucho a alojar nuestras aplicaciones de una forma más segura. En este artículo planteamos 3 mejores prácticas para asegurar servidores Ubuntu Linux en Internet. Si tu distribución favorita de Linux es otra, no te preocupes: las mejores prácticas siguen aplicándose, solo cambian las instrucciones de instalación de acuerdo al manejador de paquetes de tu sistema operativo.
1) Instala lo necesario de Ubuntu para que funcione tu aplicación
Al instalar un sistema operativo Ubuntu Server, el asistente de instalación nos pregunta en un punto si queremos la versión completa o una minimizada, que solo contiene una pequeña cantidad de utilerías y aplicaciones:
Quizás nos veamos tentados a elegir la opción por defecto, que instala un grupo seleccionado de software pensado en hacerte fácil la administración del servidor. Mi recomendación es elegir siempre la opción Ubuntu Server (minimized) para disminuir nuestra superficie de ataque, término muy usado en círculos de seguridad informática que, para nuestro caso, consiste en todos los paquetes de software instalados en nuestro servidor que pueden sufrir de alguna vulnerabilidad de seguridad.
En este caso, como en muchos otros de nuestra profesión, menos es más.
2) ¿Sin firewall? ¡Ni pensarlo!
Al terminar nuestra instalación de Ubuntu, y antes de instalar un servidor de aplicaciones, entorno de ejecución de contenedores o los componentes que requiera mi aplicación; podemos tener la falsa idea de que estamos seguros por el momento. ¡No es así! Un servidor expuesto a Internet es sujeto casi de inmediato a sondeos de reconocimiento provenientes de entidades con fines lícitos (como mantener actualizada una base de datos de direcciones IP, estadísticas para fines de investigación académica, etc. ), como por entidades de dudosa reputación que buscan su siguiente víctima. Estas últimas son las que nos preocupan y son el objeto de nuestras mejores prácticas.
Esta primer recomendación consiste en que, inmediatamente después de que nuestro servidor esté arriba, activemos el firewall o cortafuegos de Ubuntu y lo configuremos con una regla que bloquee toda la comunicación entrante hacia nuestro servidor y solo permita el acceso a los servicios que queramos exponer a Internet. Para este fin, hay diferentes utilerías que nos facilitan realizar estas configuraciones. En este caso utilizaremos UFW (Universal Firewall) por su simplicidad y disponibilidad en las versiones recientes de Ubuntu.
Los pasos para activar y configurar de forma segura UFW son:
1) Instalar el software usando apt:
2) Configurar UFW para negar todas las conexiones de entrada. Tranquilo/a, todavía no aplicará la configuración y no hay riesgo de quedarnos sin acceso al servidor.
3) Permitir las conexiones al servicio de acceso remoto SSH.
4) Encender el firewall.
En este punto, nuestro servidor solo tendrá disponible desde Internet el acceso por SSH, dejando inaccesible cualquier otro punto de acceso por medio de la red. Posteriormente, cuando instalemos los demás componentes de nuestra aplicación, podremos permitir con UFW los servicios requeridos.
3) Protégete ante ataques de fuerza bruta
Un ataque de fuerza bruta sucede cuando un atacante, valiéndose de utilerías disponibles públicamente que incluyen enormes listas de contraseñas comunes y sus variantes, intenta acceder a un servidor, insistiendo por largos periodos, esperando en algún momento acceder al servidor por medio de alguna cuenta de acceso con una contraseña débil.
Aunque pensemos que nuestra contraseña de acceso al servidor (formada por el nombre de nuestra mascota más el año de su nacimiento) es segura, es muy probable que el atacante pueda dar con ella después de varios intentos. Para disminuir el riesgo de estos ataques planteamos tres medidas básicas:
- Utiliza contraseñas robustas. Las contraseñas de acceso a los servidores deben contar con una longitud mínima de alrededor de 16 caracteres y, preferentemente, ser generadas de forma aleatoria con una herramienta para este fin. Además, el hecho de que contengan una mezcla de dígitos, letras, mayúsculas, minúsculas y signos de puntuación es altamente recomendable.
- Almacena de forma segura tus contraseñas. Las contraseñas no deben ser guardadas en blocs de notas o hojas de cálculo. Usa un administrador de contraseñas de buena reputación para almacenarlas. Como todo software, están sujetos también a vulnerabilidades, así que antes de decidirte por alguno, busca en Internet si ha sufrido recientemente de ataques o fugas de información.
- Utiliza mecanismos para mitigar ataques de fuerza bruta. En esta ocasión, mostraremos cómo instalar y configurar fail2ban, que permite detectar en tiempo real los intentos de acceso fallido a los distintos servicios alojados en nuestro servidor y, en caso de detectar una anomalía, bloquear en forma automática la dirección IP origen por un tiempo determinado.
Para instalar fail2ban en tu servidor sigue estos pasos:
1) Instalar el paquete de software usando apt:
2) Configurar Ubuntu para que el administrador de servicios systemctl ejecute fail2ban automáticamente al iniciar el servidor. En la primera ocasión lo iniciamos manualmente:
3) Verificar que fail2ban esté ejecutándose y la protección al servicio SSH esté activa:
La configuración por defecto de fail2ban bloqueará por 10 minutos los intentos de conexión desde la dirección IP que origine 5 intentos fallidos en un intervalo de 10 minutos. Esta configuración es suficiente para que las utilerías de fuerza bruta sean muy poco efectivas y puede personalizarse mediante archivos de configuración ubicados en la ruta /etc/fail2ban.
¡Listo! ¿Estoy seguro/a ahora?
¡No tan rápido! Asegurar nuestro servidor ante ataques es una tarea de todos los días para el administrador de sistemas. Continuamente surgen amenazas nuevas, así como herramientas que nos permiten estar mejor preparados para enfrentarlas.
Como desarrolladores, usualmente no nos preocupamos mucho por estos temas, pero contar con los conocimientos técnicos básicos y una idea sobre las mejores prácticas de la industria, nos permite estar mejor preparados y aportar a nuestros equipos de DevOps cuando desplegamos una aplicación.
Espero que esta guía te ayude a blindar tus servidores Ubuntu. ¡Todo el éxito!
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.