Asegura tu servidor VPS Linux

Introducción

Tomar el control de tu propio servidor Linux es una oportunidad para probar cosas nuevas y aprovechar el poder y la flexibilidad de una gran plataforma. Sin embargo, los administradores de servidores Linux deben tomar la misma precaución que sea apropiada con cualquier máquina conectada a la red para mantenerla segura y protegida.

Hay muchos temas de seguridad diferentes que caen dentro de la categoría general de “seguridad de Linux” y muchas opiniones sobre cómo se ve un nivel de seguridad adecuado para un servidor Linux.

Lo principal a tener en cuenta es que tendrás que decidir por ti mismo qué protecciones de seguridad serán necesarias. Antes de hacer esto, debes conocer los riesgos y las concesiones, y decidir el equilibrio entre la facilidad de uso y la seguridad que tenga sentido para ti.

Este artículo está destinado a ayudarte, a orientarte con algunas de las medidas de seguridad más comunes que debes tomar en un entorno de servidor Linux. Esta no es una lista exhaustiva y no cubre las configuraciones recomendadas, pero proporcionará enlaces a recursos más completos y explicará por qué cada componente es una parte importante de muchos sistemas.

Bloqueo de acceso con firewalls

Uno de los pasos más fáciles para recomendar a todos los usuarios es habilitar y configurar un firewall. Los firewalls actúan como una barrera entre el tráfico general de Internet y tu máquina. Vigilan el tráfico que entra y sale de tu servidor y deciden si deben permitir que la información se entregue.

Para ello, verifican el tráfico en cuestión contra un conjunto de reglas configuradas por el usuario. Por lo general, un servidor solo utilizará algunos puertos de red específicos para servicios legítimos. El resto de los puertos no están en uso, y deben estar protegidos de forma segura detrás de un firewall, lo que denegará todo el tráfico destinado a estas ubicaciones.

Esto te permite eliminar datos que no espera e incluso condicionalizar el uso de tus servicios reales en algunos casos. Las reglas de firewall proporcionan una buena base para la seguridad de la red.

Hay bastantes soluciones de firewalls disponibles. Discutiremos brevemente algunas de las opciones más populares a continuación.

UFW

UFW significa uncomplicated firewall. Su objetivo es proporcionar una buena protección sin la complicada sintaxis de otras soluciones.

UFW, al igual que la mayoría de los firewalls de Linux, es en realidad una interfaz para controlar el firewall de filtro de red incluido con el kernel de Linux. Por lo general, este es un firewall simple para personas que no están familiarizadas con las soluciones de firewalls de Linux y generalmente es una buena opción.

IPTables

Quizás la solución de firewall de Linux más conocida sea iptables. IPTables es otro componente utilizado para administrar el firewall netfilter incluido en el kernel de Linux. Ha existido durante mucho tiempo y se ha sometido a auditorías de seguridad intensas para garantizar tu seguridad. Hay una versión de iptables llamada ip6tables para crear restricciones de IPv6.

Es probable que encuentres configuraciones de iptables durante tu tiempo de administración de máquinas Linux. La sintaxis puede ser complicada de comprender al principio, pero es una herramienta increíblemente poderosa que se puede configurar con conjuntos de reglas muy flexibles.

Puedes obtener más información sobre como usar iptables en distribuciones basadas en CentOS/Fedora/RHEL aquí.

IP6Tables

Como se mencionó anteriormente, iptables se utiliza para manipular las tablas que contienen reglas de IPv4. Si tienes IPv6 habilitado en tu servidor, tendrás que pagar también la atención sobre el equivalente de IPv6: ip6tables.

El firewall de netfilter que se incluye en el kernel de Linux mantiene el tráfico de IPv4 e IPv6 completamente separado. Estos se almacenan en diferentes tablas. Las reglas que dictan el destino final de un paquete están determinadas por la versión del protocolo que se está utilizando.

Lo que esto significa para la administración del servidor es que se debe mantener un conjunto de reglas separado cuando la versión 6 está habilitada. El comando ip6tables comparte la misma sintaxis que el comando iptables, por lo que la implementación del mismo conjunto de restricciones en la tabla de la versión 6 es generalmente sencilla. Sin embargo, debes asegurarte de que coincida el tráfico dirigido a tus direcciones IPv6 para que esto funcione correctamente.

NFTables

Aunque iptables ha sido durante mucho tiempo el estándar para los firewalls en un entorno Linux, recientemente se ha agregado un nuevo firewall llamado nftables en el kernel de Linux. Este es un proyecto del mismo equipo que hace iptables, y está destinado a eventualmente reemplazar a iptables.

El firewall de nftables intenta implementar una sintaxis más legible que la que encontró su predecesor de iptables, e implementa el soporte de IPv4 e IPv6 en la misma herramienta. Si bien la mayoría de las versiones de Linux en este momento no vienen con un kernel lo suficientemente nuevo como para implementar nftables, pronto será muy común, y debes tratar de familiarizarte con su uso.

Uso de SSH para iniciar sesión de forma remota de manera segura

Cuando administres un servidor donde no tienes acceso local, deberás iniciar sesión de forma remota. La forma estándar y segura de lograr esto en un sistema Linux es a través de un protocolo conocido como SSH, que significa shell seguro.

SSH ofrece cifrado de extremo a extremo, la capacidad de canalizar el tráfico inseguro a través de una conexión segura, X-forwarding (interfaz gráfica de usuario a través de una conexión de red) y mucho más. Básicamente, si no tienes acceso a una conexión local o a una administración fuera de banda, SSH debe ser tu principal forma de interactuar con tu máquina.

Si bien el protocolo en sí es muy seguro y ha sido objeto de una extensa investigación y revisión del código, sus opciones de configuración pueden ayudar o dificultar la seguridad del servicio. Vamos a discutir algunas opciones a continuación.

Contraseñas vs inicios de sesión con claves SSH

SSH tiene un modelo de autenticación flexible que te permite iniciar sesión utilizando varios métodos diferentes. Las dos opciones más populares son la contraseña y la autenticación de clave SSH.

Si bien la autenticación de contraseña es probablemente el modelo más natural para la mayoría de los usuarios, también es la menos segura de estas dos opciones. Los inicios de sesión de contraseña permiten que un intruso potencial adivine contraseñas continuamente hasta encontrar una combinación exitosa. Esto se conoce como fuerza bruta y puede ser fácilmente automatizado por los posibles atacantes con herramientas modernas.

Las claves SSH, por otro lado, operan generando un par de claves seguras. Una clave pública se crea como un tipo de prueba para identificar a un usuario. Puede compartirse públicamente sin problemas y no puede utilizarse para otra cosa que no sea identificar a un usuario y permitirle iniciar sesión con la clave privada correspondiente. La clave privada debe mantenerse secreta y se utiliza para pasar la prueba de su clave pública asociada.

Básicamente, puedes agregar tu clave SSH pública en un servidor, y te permitirá iniciar sesión utilizando la clave privada correspondiente. Estas claves son tan complejas que no es práctico usar la fuerza bruta. Además, si lo deseas, puedes agregar largas frases de contraseña a tu clave, lo que agrega aún más seguridad.

Para obtener más información sobre cómo asegurar SSH, has clic aquí y consulta este enlace para obtener información sobre cómo configurar las claves SSH en su servidor .

Implementar fail2ban para prohibir direcciones IP maliciosas

Un paso que ayudará con la seguridad general de tu configuración de SSH es implementar una solución como fail2ban. Fail2ban es un servicio que supervisa los archivos de registro para determinar si un sistema remoto no es un usuario legítimo y luego prohíbe temporalmente el tráfico futuro desde la dirección IP asociada.

La configuración de una política fail2ban sensata puede permitirte marcar los equipos que intentan iniciar sesión sin éxito y agregar reglas de firewall para eliminar el tráfico de ellos durante un período de tiempo determinado. Esta es una manera fácil de obstaculizar los métodos de fuerza bruta que se usan con frecuencia, ya que tendrán que tomarse un descanso durante un tiempo cuando estén prohibidos. Esto suele ser suficiente para desalentar nuevos intentos de fuerza bruta.

Implementar un sistema de detección de intrusos para detectar entradas no autorizadas

Una consideración importante a tener en cuenta es desarrollar una estrategia para detectar el uso no autorizado. Es posible que tengas implementadas medidas preventivas, pero también necesitas saber si han fallado o no.

Un sistema de detección de intrusos, también conocido como IDS, cataloga la configuración y los detalles del archivo cuando se encuentra en un estado de buena reputación. A continuación, ejecuta comparaciones con estos estados registrados para averiguar si se han cambiado los archivos o se han modificado las configuraciones.

Hay bastantes sistemas de detección de intrusos. Vamos a repasar algunos a continuación.

Tripwire

Una de las implementaciones IDS más conocidas es Tripwire. Tripwire compila una base de datos de archivos del sistema y protege tus archivos de configuración y binarios con un conjunto de claves. Después de elegir los detalles de la configuración y definir las excepciones, las ejecuciones posteriores notifican cualquier alteración en los archivos que supervisa.

El modelo de política es muy flexible, lo que te permite adaptar sus propiedades a tu entorno. Luego, puedes configurar Tripwire a través de un cron job e incluso implementar notificaciones por correo electrónico en caso de una actividad inusual.

Aide

Otra opción para un IDS es Aide. De manera similar a tripwire, Aide opera mediante la creación de una base de datos y la comparación del estado actual del sistema con los valores que se han almacenado. Cuando surge una discrepancia, puede notificar al administrador del problema.

Aide y tripwire ofrecen soluciones similares para el mismo problema. Consulta la documentación y prueba las dos soluciones para descubrir cuál te gusta más.

Psad

La herramienta psad se ocupa de una parte diferente del sistema que las herramientas enumeradas anteriormente. En lugar de monitorear los archivos del sistema, psad vigila los registros del firewall para intentar detectar actividad maliciosa.

Si un usuario intenta detectar vulnerabilidades con un escaneo de puertos, por ejemplo, psad puede detectar esta actividad y alterar dinámicamente las reglas del firewall para bloquear al usuario infractor. Esta herramienta puede registrar diferentes niveles de amenaza y basar su respuesta en la gravedad del problema. También puede opcionalmente enviar un correo electrónico al administrador.

Bro

Otra opción para un IDS basado en red es Bro. Bro es en realidad un framework de monitoreo de red que se puede usar como IDS de red o para otros fines, como recopilar estadísticas de uso, investigar problemas o detectar patrones.

El sistema Bro se divide en dos capas. La primera capa monitorea la actividad y genera lo que considera eventos. La segunda capa ejecuta los eventos generados a través de un framework de políticas que dicta qué se debe hacer, en todo caso, con el tráfico. Puede generar alertas, ejecutar comandos del sistema, simplemente registrar la ocurrencia o tomar otras rutas.

RKHunter

Aunque técnicamente no es un sistema de detección de intrusiones, rkhunter opera en muchos de los mismos principios que los sistemas de detección de intrusos basados ​​en host para detectar rootkits y malware conocido.

Si bien los virus son raros en el mundo de Linux, existen malware y rootkits que pueden comprometer tu sistema o permitir el acceso continuo a un explotador exitoso. RKHunter descarga una lista de vulnerabilidades conocidas y luego compara tu sistema con la base de datos. También te alerta si detecta configuraciones no seguras en algunas aplicaciones comunes.

Consejos generales de seguridad

Si bien las herramientas y configuraciones anteriores pueden ayudarte a proteger partes de tu sistema, una buena seguridad no se logra simplemente implementando una herramienta y olvidándose de ella. La buena seguridad se manifiesta en una cierta mentalidad y se logra mediante la diligencia, el escrutinio y la participación en la seguridad como un proceso.

Existen algunas reglas generales que pueden ayudar a orientarte en la dirección correcta con respecto al uso seguro de tu sistema.

Prestar atención a las actualizaciones y actualizar regularmente

Las vulnerabilidades del software se encuentran todo el tiempo en casi todos los tipos de software que puedas tener en tu sistema. Los encargados de la distribución generalmente hacen un buen trabajo al mantenerse al día con los últimos parches de seguridad e insertan esas actualizaciones en sus repositorios.

Sin embargo, tener actualizaciones de seguridad disponibles en el repositorio no es bueno para tu servidor si no has descargado e instalado las actualizaciones. Si bien muchos servidores se benefician de la confianza en versiones estables y bien probadas del software del sistema, los parches de seguridad no deben postergarse y deben considerarse actualizaciones críticas.

La mayoría de las distribuciones proporcionan listas de correo de seguridad y repositorios de seguridad separados para descargar e instalar únicamente parches de seguridad.

Tener cuidado al descargar software fuera de los sitios oficiales

La mayoría de los usuarios se apegarán al software disponible de los repositorios oficiales para su distribución, y la mayoría de las distribuciones ofrecen paquetes firmados. Los usuarios generalmente pueden confiar en los mantenedores de la distribución y centrar su preocupación en la seguridad del software adquirido fuera de los canales oficiales.

Puedes optar por confiar en los paquetes de tu distribución o software que están disponibles en el sitio web oficial de un proyecto, pero ten en cuenta que a menos que estés auditando cada pieza de software, existe un riesgo. La mayoría de los usuarios sienten que este es un nivel de riesgo aceptable.

Por otro lado, el software adquirido de repositorios aleatorios y PPA mantenidos por personas u organizaciones que no reconoces puede ser un gran riesgo para la seguridad. No hay reglas establecidas, y la mayoría de las fuentes de software no oficiales probablemente serán completamente seguras, pero ten en cuenta que estás asumiendo un riesgo cada vez que confías en otra parte.

Asegúrate de que puede explicarse por qué confías en la fuente. Si no puedes hacer esto, considera sopesar tu riesgo de seguridad como una preocupación mayor que la conveniencia que obtendrás.

Conocer tus servicios y limítalos

Si bien es probable que todo el punto de ejecución de un servidor proporcione servicios a los que puedes acceder, debes limitar los servicios que se ejecutan en tu máquina a aquellos que utilizas y necesitas. Considera que cada servicio habilitado es un posible vector de amenaza e intenta eliminar tantos vectores de amenaza como puedas sin afectar tu funcionalidad principal.

Esto significa que si estás ejecutando un servidor sin headless (sin monitor adjunto) y no ejecuta sningún programa gráfico (no web), debes deshabilitar y probablemente desinstalar tu servidor de pantalla X. Medidas similares se pueden tomar en otras áreas. ¿No hay impresora? Deshabilita el servicio “lp”. ¿No hay recursos compartidos de red de Windows? Desactiva el servicio de “samba”.

Puedes descubrir qué servicios estás ejecutando en tu computadora a través de una variedad de medios.

No utilices FTP; Usa SFTP en su lugar

Esto puede ser difícil para muchas personas, pero FTP es un protocolo que es intrínsecamente inseguro. Toda la autenticación se envía en texto sin formato, lo que significa que cualquier persona que supervise la conexión entre tu servidor y tu máquina local puede ver tus datos de inicio de sesión.

Hay muy pocas instancias en las que es probable que FTP se pueda implementar. Si estás ejecutando una descarga anónima, pública y de solo lectura, FTP es una opción decente. Otro caso en el que FTP es una buena opción es cuando simplemente estás transfiriendo archivos entre dos computadoras que están detrás de un firewall habilitado para NAT, y confías en que tu red sea segura.

En casi todos los demás casos, debes usar una alternativa más segura. La suite SSH viene completa con un protocolo alternativo llamado SFTP que opera en la superficie de manera similar, pero basado en la misma seguridad del protocolo SSH.

Esto te permite transferir información desde y hacia tu servidor de la misma manera que usarías tradicionalmente FTP, pero sin el riesgo. La mayoría de los clientes FTP modernos también pueden comunicarse con los servidores SFTP.

Implementar políticas de seguridad para usuarios sensibles

Hay una serie de pasos que puedes seguir para proteger mejor tu sistema al administrar usuarios.

Una sugerencia es deshabilitar los inicios de sesión de root. Dado que el usuario root está presente en cualquier sistema similar a POSIX y es una cuenta todopoderosa, es un objetivo atractivo para muchos atacantes. Desactivar los inicios de sesión de root suele ser una buena idea después de haber configurado el acceso de sudo, o si te sientes cómodo utilizando el comando su. Muchas personas no están de acuerdo con esta sugerencia, pero analiza si es adecuada para ti.

¿Cómo deshabilitarlo?

Es posible deshabilitar los inicios de sesión root remotos dentro del demonio SSH o deshabilitar los inicios de sesión locales, puedes hacer restricciones en el archivo /etc/securetty. También puedes configurar el shell del usuario root en un no shell para deshabilitar el acceso al shell root y configurar las reglas de PAM para restringir los inicios de sesión también.

Otra buena política para implementar con cuentas de usuario es crear cuentas únicas para cada usuario y servicio, y darles solo los permisos mínimos para realizar su trabajo. Bloquea todo aquello a lo que no necesitan acceso y quítale todos los privilegios a menos que los paralices.

Esta es una política importante porque si un usuario o servicio se ve comprometido, no lleva a un efecto dominó que le permita al atacante obtener acceso a más parte del sistema. Este sistema de compartimentación te ayuda a aislar problemas, de manera similar a un sistema de mamparos que puede ayudar a evitar que un barco se hunda cuando hay una brecha en el casco.

De manera similar a las políticas de servicios que analizamos anteriormente, también debes tener cuidado de deshabilitar cualquier cuenta de usuario que ya no sea necesaria. Esto puede suceder cuando desinstalas el software o si un usuario ya no debería tener acceso al sistema.

Prestar atención a la configuración de permisos

Los permisos de archivos son una gran fuente de frustración para muchos usuarios. Encontrar un equilibrio para los permisos que te permitan hacer lo que necesitas hacer sin estar expuesto a daños puede ser difícil y exige una cuidadosa atención y reflexión en cada escenario.

La configuración de una política de umask (la propiedad que define los permisos predeterminados para nuevos archivos y directorios) sana puede hacer mucho para crear buenos valores predeterminados.

En general, debes pensarlo dos veces antes de configurar cualquier cosa para que se pueda escribir en todo el mundo, especialmente si se puede acceder de alguna manera a Internet. Esto puede tener consecuencias extremas. Además, no debes establecer el bit SGID o SUID en los permisos a menos que sepas absolutamente lo que estás haciendo. Además, verifica que tus archivos tengan un propietario y un grupo.

La configuración de los permisos de archivo variará en gran medida en función de su uso específico, pero siempre debes intentar ver si hay una manera de sobrevivir con menos permisos. Esta es una de las cosas más fáciles de equivocarse y un área donde hay muchos malos consejos en Internet.

Comprobar regularmente si hay malware en tus servidores

Si bien Linux está generalmente menos dirigido a Malware que Windows, de ninguna manera es inmune al software malicioso. Junto con la implementación de un IDS para detectar intentos de intrusión, el análisis de malware puede ayudar a identificar rastros de actividad que indiquen que el software ilegítimo está instalado en tu máquina.

Hay una serie de escáneres de malware disponibles para sistemas Linux que se pueden usar para validar regularmente la integridad de tus servidores. Linux Malware Detect, también conocido como maldet o LMD, es una opción popular que se puede instalar y configurar fácilmente para buscar firmas de malware conocidas. Se puede ejecutar de forma manual para realizar escaneos únicos y también se puede usar para ejecutar escaneos programados regularmente. Los informes de estas exploraciones se pueden enviar por correo electrónico a los administradores del servidor.

Cómo proteger el software específico que estás utilizando

Aunque esta guía no es lo suficientemente grande como para analizar los aspectos específicos de la protección de cada tipo de servicio o aplicación, hay muchos tutoriales y directrices disponibles en línea. Debes leer las recomendaciones de seguridad de cada proyecto que pretendes implementar en tu sistema.

Además, el software de servidor popular como los servidores web o los sistemas de administración de bases de datos tienen sitios web completos y bases de datos dedicados a la seguridad. En general, debes leer y asegurar cada servicio antes de ponerlo en línea.

Puedes consultar nuestra sección de seguridad para obtener consejos más específicos para el software que estás utilizando.

Conclusión

Ahora debería tener una comprensión decente de las prácticas de seguridad generales que puedes implementar en tu servidor Linux. Si bien hemos intentado mencionar muchas áreas de gran importancia, al final del día, tendrás que tomar muchas decisiones por tu cuenta. Cuando administras un servidor, debes asumir la responsabilidad de la seguridad de tu servidor.

Esto no es algo que puedas configurar de una sola vez al principio, es un proceso y un ejercicio continuo para auditar tu sistema, implementar soluciones, evaluar registros y alertas, reevaluar tus necesidades, entre otros. Debes estar atento a la protección tu sistema y siempre estar evaluando y monitoreando los resultados de las soluciones.