Introducción
Al configurar la infraestructura, tu principal preocupación será a menudo poner tus aplicaciones en funcionamiento. Sin embargo, hacer que tus aplicaciones funcionen correctamente sin atender las necesidades de seguridad de la infraestructura podría tener consecuencias devastadoras en el futuro.
En esta guía, hablaremos sobre algunas prácticas básicas de seguridad que son mejores para configurar antes o cuando configures tus aplicaciones.
Claves SSH
Las claves SSH son un par de claves criptográficas que se pueden usar para autenticarse en un servidor SSH como una alternativa a los inicios de sesión basados en contraseña. Se crean un par de claves privadas y públicas antes de la autenticación. La clave privada se mantiene secreta y segura por el usuario, mientras que la clave pública se puede compartir con cualquier persona.
Para configurar la autenticación de clave SSH, debes colocar la clave pública del usuario en el servidor en un directorio especial. Cuando el usuario se conecta al servidor, el servidor solicitará una prueba de que el cliente tiene la clave privada asociada. El cliente de SSH utilizará la clave privada para responder de una manera que demuestre la propiedad de la clave privada. El servidor permitirá que el cliente se conecte sin una contraseña.
¿Cómo mejoran la seguridad?
Con SSH, cualquier tipo de autenticación, incluida la autenticación de contraseña, está completamente cifrada. Sin embargo, cuando se permiten inicios de sesión basados en contraseña, los usuarios malintencionados pueden intentar acceder al servidor repetidamente. Con la potencia de computación moderna, es posible obtener acceso a un servidor al automatizar estos intentos e intentar una combinación después de la combinación hasta que se encuentre la contraseña correcta.
La configuración de la autenticación de clave SSH te permite desactivar la autenticación basada en contraseña. Las claves SSH generalmente tienen muchos más bits de datos que una contraseña, lo que significa que hay muchas más combinaciones posibles que un atacante tendría que ejecutar. Muchos de los algoritmos de clave SSH se consideran imposibles de encontrar por el hardware de computación moderno simplemente porque requerirían demasiado tiempo para ejecutar las posibles coincidencias.
¿Qué tan difícil es implementarlas?
Las claves SSH son muy fáciles de configurar y son la forma recomendada de iniciar sesión en cualquier entorno de servidor Linux o Unix de forma remota. Se pueden generar un par de claves SSH en tu máquina y puedes transferir la clave pública a tus servidores en unos pocos minutos.
Para aprender acerca de cómo configurar las claves, sigue esta guía. Si aún sientes que necesitas autenticación con contraseña, considera implementar una solución como fail2ban en tus servidores para limitar las posibilidades que adivinen la contraseña.
Firewalls
Un firewall es un software (o hardware) que controla qué servicios están expuestos a la red. Esto significa bloquear o restringir el acceso a todos los puertos, excepto aquellos que deberían estar disponibles públicamente.
En un servidor típico, un número de servicios puede estar ejecutándose por defecto. Estos se pueden categorizar en los siguientes grupos:
- Servicios públicos a los que puede acceder cualquier persona en Internet, a menudo de forma anónima. Un buen ejemplo de esto es un servidor web que podría permitir el acceso a su sitio.
- Servicios privados a los que solo debe acceder un grupo selecto de cuentas autorizadas o desde ciertas ubicaciones. Un ejemplo de esto puede ser un panel de control de base de datos.
- Servicios internos que deberían ser accesibles solo desde el propio servidor, sin exponer el servicio al mundo exterior. Por ejemplo, esto puede ser una base de datos que solo acepta conexiones locales.
Los firewalls pueden garantizar que el acceso a tu software esté restringido según las categorías anteriores. Los servicios públicos pueden dejarse abiertos y disponibles para todos, y los servicios privados pueden restringirse según diferentes criterios. Los servicios internos pueden ser completamente inaccesibles para el mundo exterior. Para los puertos que no se utilizan, el acceso se bloquea completamente en la mayoría de las configuraciones.
¿Cómo mejoran la seguridad?
Los firewalls son una parte esencial de cualquier configuración de servidor. Incluso si tus propios servicios implementan funciones de seguridad o están restringidos a las interfaces en las que deseas que se ejecuten, un firewall sirve como una capa adicional de protección.
Un firewall configurado correctamente restringirá el acceso a todo, excepto a los servicios específicos que necesitan permanecer abiertos. Exponer solo unas pocas partes de software reduce el rango de ataque de tu servidor, limitando los componentes que son vulnerables a la explotación.
¿Qué tan difícil es implementarlos?
Hay muchos firewallas disponibles para los sistemas Linux, algunos de los cuales tienen una curva de aprendizaje más pronunciada que otros. Sin embargo, en general, la configuración del firewall solo debería tomar unos minutos y solo tendrá que ocurrir durante la configuración inicial de tu servidor o cuando realices cambios en los servicios que se ofrecen en tu computadora.
Una opción simple es el firewall UFW. Otras opciones que podrías usar iptables o el firewall CSF.
VPN’s y redes privadas
Las redes privadas son redes que solo están disponibles para ciertos servidores o usuarios.
Una VPN, o red privada virtual, es una forma de crear conexiones seguras entre computadoras remotas y presentar la conexión como si fuera una red privada local. Esto proporciona una manera de configurar los servicios como si estuvieran en una red privada y conectar servidores remotos a través de conexiones seguras.
¿Cómo mejoran la seguridad?
Utilizar redes privadas en lugar de redes públicas para la comunicación interna es casi siempre preferible, dada la opción entre las dos. Sin embargo, dado que otros usuarios dentro del centro de datos pueden acceder a la misma red, aún debes implementar medidas adicionales para asegurar la comunicación entre tus servidores.
Usar una VPN es, efectivamente, una forma de mapear una red privada que solo tus servidores pueden ver. La comunicación será totalmente privada y segura. Se pueden configurar otras aplicaciones para pasar su tráfico a través de la interfaz virtual que expone el software VPN. De esta manera, solo los servicios destinados a ser consumibles por los clientes en la Internet pública deben estar expuestos en la red pública.
¿Qué tan difícil son de implementarlas?
Utilizar redes privadas en un centro de datos que tenga esta capacidad es tan simple como habilitar la interfaz durante la creación de tu servidor y configurar tus aplicaciones y firewall para usar la red privada. Ten en cuenta que las redes privadas de todo el centro de datos comparten espacio con otros servidores que usan la misma red.
En cuanto a VPN, la configuración inicial es un poco más complicada, pero la mayor seguridad vale la pena para la mayoría de los casos de uso. Cada servidor en una VPN debe tener la seguridad compartida y los datos de configuración necesarios para establecer la conexión segura instalada y configurada. Una vez que la VPN está en funcionamiento, las aplicaciones deben configurarse para usar el túnel VPN.
Infraestructura de clave pública y cifrado SSL/TLS
La infraestructura de clave pública, o PKI, se refiere a un sistema que está diseñado para crear, administrar y validar certificados para identificar personas y cifrar la comunicación. Los certificados SSL o TLS se pueden utilizar para autenticar diferentes entidades entre sí. Después de la autenticación, también se pueden utilizar para establecer una comunicación cifrada.
¿Cómo mejoran la seguridad?
El establecer una autoridad de certificación y la administración de certificados para tus servidores le permite a cada entidad dentro de su infraestructura validar la identidad de los otros miembros y cifrar su tráfico. Esto puede evitar ataques de man-in-the-middle (hombre en el medio) en los que un atacante imita a un servidor en tu infraestructura para interceptar el tráfico.
Cada servidor puede configurarse para confiar en una autoridad de certificación centralizada. Posteriormente, cualquier certificado que firme la autoridad puede ser de confianza implícita. Si las aplicaciones y los protocolos que estás utilizando para comunicarte son compatibles con el cifrado TLS/SSL, esta es una forma de cifrar tu sistema sin la sobrecarga de un túnel VPN (que a menudo también utiliza SSL internamente).
¿Qué tan difícil es de implementarlos?
La configuración de una autoridad de certificación y la configuración del resto de la infraestructura de clave pública pueden implicar un esfuerzo inicial considerable. Además, la gestión de certificados puede crear una carga de administración adicional cuando es necesario crear, firmar o revocar nuevos certificados.
Para muchos usuarios, la implementación de una infraestructura de clave pública completa tendrá más sentido a medida que crezcan sus necesidades de infraestructura. Asegurar las comunicaciones entre los componentes mediante VPN puede ser una buena medida de interrupción hasta que llegue a un punto en el que la PKI valga los costos de administración adicionales.
Auditoria de servicios
Hasta ahora, hemos analizado algunas tecnologías que puedes implementar para mejorar tu seguridad. Sin embargo, una gran parte de la seguridad consiste en analizar tus sistemas, comprender las áreas de ataque disponibles y bloquear los componentes lo mejor que puedas.
La auditoría de servicios es un proceso de descubrir qué servicios se ejecutan en los servidores de tu infraestructura. A menudo, el sistema operativo predeterminado está configurado para ejecutar ciertos servicios en el arranque. La instalación de software adicional a veces puede incluir dependencias que también se inician automáticamente.
La auditoría de servicios es una forma de saber qué servicios se están ejecutando en tu sistema, qué puertos están utilizando para la comunicación y qué protocolos se aceptan. Esta información puede ayudarte a configurar las opciones de tu firewall.
¿Cómo mejora la seguridad?
Los servidores inician muchos procesos para propósitos internos y para administrar clientes externos. Cada uno de estos representa una superficie de ataque expandida para usuarios malintencionados. Cuantos más servicios tengas en ejecución, mayor será la posibilidad de que exista una vulnerabilidad en tu software accesible.
Una vez que tengas una buena idea de qué servicios de red se están ejecutando en tu máquina, puedes comenzar a analizar estos servicios. Algunas preguntas que debas realizarte para cada uno son:
- ¿Debería este servicio estar funcionando?
- ¿Se está ejecutando el servicio en interfaces que no necesita? ¿Debería estar vinculado a una sola IP?
- ¿Están sus reglas de firewall estructuradas para permitir el paso de tráfico legítimo a este servicio?
- ¿Sus reglas de firewall bloquean el tráfico que no es legítimo?
- ¿Tienes un método para recibir alertas de seguridad sobre vulnerabilidades para cada uno de estos servicios?
Este tipo de auditoría de servicio debe ser una práctica estándar al configurar cualquier servidor nuevo en tu infraestructura.
¿Qué tan difícil es de implementarlo?
Hacer una auditoría de servicios básicos es increíblemente simple. Puedes averiguar qué servicios están escuchando puertos en cada interfaz usando el comando netstat. Un ejemplo simple que muestra el nombre del programa, el PID y las direcciones que se utilizan para escuchar el tráfico TCP y UDP es:
sudo netstat -plunt
Verás una salida que se ve así:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 887/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 919/nginx
tcp6 0 0 :::22 :::* LISTEN 887/sshd
tcp6 0 0 :::80 :::* LISTEN 919/nginx
Las columnas principales a las que debes atención son Proto, Local Address y PID/Program name. Si la dirección es 0.0.0.0, entonces el servicio está aceptando conexiones en todas las interfaces.
Auditoría de archivos y sistemas de detección de intrusos
La auditoría de archivos es el proceso de comparar el sistema actual con un registro de los archivos y las características de los archivos de tu sistema cuando se trata de un estado bien conocido. Esto se utiliza para detectar cambios en el sistema que pueden haber sido autorizados.
Un sistema de detección de intrusos, o IDS, es un software que monitorea un sistema o red para detectar actividad no autorizada. Muchas implementaciones de IDS basadas en host utilizan la auditoría de archivos como un método para verificar si el sistema ha cambiado.
¿Cómo mejoran la seguridad?
Al igual que en la auditoría de nivel de servicio anterior, si se toma en serio la garantía de un sistema seguro, es muy útil poder realizar auditorías de nivel de archivo de tu sistema. Esto se puede hacer periódicamente por el administrador o como parte de un proceso automatizado en un IDS.
Estas estrategias son algunas de las únicas formas de estar absolutamente seguros de que tu sistema de archivos no ha sido alterado por algún usuario o proceso. Por muchas razones, los intrusos a menudo desean permanecer ocultos para poder seguir explotando el servidor durante un período prolongado de tiempo. Podrían reemplazar los binarios con versiones comprometidas. Realizar una auditoría del sistema de archivos te indicará si alguno de los archivos ha sido alterado, lo que te permite confiar en la integridad del entorno de tu servidor.
¿Qué tan difícil es de implementarlos?
Implementar un IDS o realizar auditorías de archivos puede ser un proceso bastante intensivo. La configuración inicial implica informar al sistema de auditoría sobre cualquier cambio no estándar que haya realizado en el servidor y definir rutas que deberían excluirse para crear una lectura de referencia.
También hace que las operaciones diarias estén más involucradas. Complica los procedimientos de actualización, ya que tendrás que volver a revisar el sistema antes de ejecutar las actualizaciones y luego volver a crear la línea de base después de ejecutar la actualización para detectar los cambios en las versiones de software. También deberás descargar los informes a otra ubicación para que un intruso no pueda alterar la auditoría para cubrir sus huellas.
Si bien esto puede aumentar tu carga de administración, poder verificar tu sistema contra una copia que se sabe que es buena es una de las únicas formas de asegurarse de que los archivos no se hayan alterado sin tu conocimiento. Algunos sistemas populares de auditoría de archivos/detección de intrusiones son Tripwire y Aide.
Entornos de ejecución aislados
El aislamiento de los entornos de ejecución se refiere a cualquier método en el que los componentes individuales se ejecutan dentro de su propio espacio dedicado.
Esto puede significar separar los componentes de tu aplicación discreta a tus propios servidores o puede referirse a la configuración de tus servicios para operar en entornos chroot o contenedores. El nivel de aislamiento depende en gran medida de los requisitos de tu aplicación y de las realidades de tu infraestructura.
¿Cómo mejoran la seguridad?
El aislamiento de tus procesos en entornos de ejecución individuales aumenta tu capacidad para aislar cualquier problema de seguridad que pueda surgir. De manera similar a cómo los mamparos y los compartimientos pueden ayudar a contener las infracciones en los barcos, la separación de tus componentes individuales puede limitar el acceso que tiene un intruso a otras partes de tu infraestructura.
¿Qué tan difícil es de implementarlos?
Dependiendo del tipo de contención que elijas, aislar tus aplicaciones puede ser relativamente simple. Al empaquetar tus componentes individuales en contenedores, puedes lograr rápidamente cierto grado de aislamiento, pero ten en cuenta que Docker no considera su contenedorización como una característica de seguridad.
Configurar un entorno chroot para cada parte también puede proporcionar cierto nivel de aislamiento, pero este tampoco es un método de aislamiento a toda prueba, ya que a menudo hay formas de salir de un entorno chroot. Mover componentes a máquinas dedicadas es el mejor nivel de aislamiento, y en muchos casos puede ser el más fácil, pero puede costar más por las máquinas adicionales.
Conclusión
Las estrategias descritas anteriormente son solo algunas de las mejoras que puedes realizar para mejorar la seguridad de tus sistemas. Es importante reconocer que, aunque es mejor tarde que nunca, las medidas de seguridad disminuyen su efectividad cuanto más se espera para implementarlas. La seguridad no puede ser una idea de último momento y debe implementarse desde el principio junto con los servicios y aplicaciones que estás proporcionando.