Conceptos básicos de seguridad en Linux

Actualizado el 27 de Julio, 2016. Por BlueHosting.

Uno de los puntos más álgidos de la administración de sus propios servidores en una red pública es lidiar con la seguridad. Aunque las amenazas de seguridad en un mundo interconectado son reales y siempre es importante tener conciencia de los problemas de seguridad, protegerse contra los posibles ataques es a menudo una cuestión de sentido común y adherirse a las buenas prácticas en este aspecto.

Esta guía tiene enfoque muy claro dentro de las dudas más comunes de seguridad y proporciona un número de posibles soluciones a problemas generales de seguridad. Se le anima a considerar el despliegue de estas medidas para "endurecer" su servidor contra posibles ataques.

Es importante recordar que todas las soluciones aquí presentadas están orientadas a tipos específicos de ataques, los cuales por sí mismos pueden ser relevantes solo en ciertas configuraciones. Las soluciones de seguridad deben estar adaptadas al tipo de servicios que usted está proporcionando y el software que está ejecutando; además, la decisión sobre el despliegue de soluciones específicas de seguridad es frecuentemente un tema que dejamos a discreción personal y análisis de costo-beneficio.

Lo más importante, es entender que la seguridad es un proceso, no un producto (cita de Bruce Schneier). No hay una "fórmula mágica" que se pueda seguir para garantizar la seguridad de un sistema. Las amenazas evolucionan constantemente, así que la vigilancia y monitorización es requerida por parte de los administradores de red para prevenir el acceso no autorizado a los sistemas.

Mantener los sistemas y el software actualizado

Una de las fuentes más significativas de vulnerabilidades de seguridad son los sistemas que están corriendo un software antiguo con brechas de seguridad conocidas. Siempre tenga presente el uso de las herramientas de manejo de paquetes del sistema para mantener su software al día; esto le ayudará en gran medida a evitar intrusiones de seguridad -que si mantiene su sistema actualizado- pueden prevenirse fácilmente.

Ejecutar actualizaciones del sistema con la herramienta de manejo de paquetes es muy sencillo y directo, para sistemas en Debian y Ubuntu puede utilizar los siguientes comandos:

apt-get update
apt-get upgrade

Para sistemas CentOS y Fedora:

yum update

Esta buena práctica asegura que su distro Linux mantenga actualizaciones activas de seguridad, así su sistema estará resguardado contra brechas de seguridad conocidas en paquetes de software usados comúnmente.

Sin embargo, las herramientas de actualización del sistema no mantendrán actualizado el software que se ha instalado fuera del gestor de paquetes de su sistema. Esto incluye software que ha compilado e instalado "a mano" (por ejemplo usando /configure && make && make install) y aplicaciones basadas en web que ha instalado de un sitio para desarrolladores de software, y es frecuentemente el caso de aplicaciones como Wordpress y Drupal. También estarán excluidas de esta protección las librerías y paquetes que ha instalado con herramientas suplementarios para la gestión de paquetes como: Ruby's Gems, Perl's CPAN tool, Python easy_install y Haskell Cabal. Usted tendrá que gestionar el proceso de actualización de estos archivos por su cuenta.

El método que utilice para asegurarse de que todo su sistema esté al día es una cuestión de preferencia personal y depende de la naturaleza de su flujo de trabajo. Es sumamente recomendable intentar usar las versiones de software provistas por su sistema operativo u otras herramientas de gestión de paquetes de programación para plataformas específicas. Si usted ha de instalar desde una "fuente", recomendamos que guarde los paquetes y archivos fuente de dicho software en /src o ~/src/ de manera que pueda hacer seguimiento de qué programas ha instalado bajo este método. A menudo, puede eliminar una aplicación compilada manualmente ejecutando make uninstall en el repositorio -directorio- de la fuente. Adicionalmente, puede ser útil mantener una lista de los softwares instalados manualmente, incluyendo sus números de versión y ubicación de las descargas. Si lo desea, puede investigar cómo disponer sus programas en paquetes de forma que pueda instalarlos usando apt, yum o pacman.

Debido a la complejidad del mantenimiento de software externo en las herramientas de gestión de paquetes de su sistema, recomendamos ampliamente evitar la instalación de software manualmente, a menos que sea estrictamente necesario. Su selección sobre la distribución de Linux debe estar muy influida por la disponibilidad de software en los repositorios de dicha distro, dependiendo de los sistemas que necesite ejecutar en su servidor.

Desactivar los servicios que no está utilizando

Una forma muy común de ataque se basa en aprovecharse de las aplicaciones inutilizadas. En general, recomendamos deshabilitar demonios (servicios) que no esté desarrollando, probando o usando de manera activa. Para hacerlo, puede usar /etc/init.d/[nombre_del_servicio] stop o /etc/rc.d/[nombre_del_servicio] stop, dependiendo de su distribución. Esto puede prevenir que los atacantes se aprovechen de estos servicios. Tenga en cuenta que los servicios que están configurados para arrancar cuando se inicializa el sistema volverán a ejecutarse en caso de que reinicie su servidor, así que puede ser más seguro deshabilitarlos del inicio automático usando el método correspondiente a su distribución de Linux.

Los servicios que no está utilizando dejarán entonces de consumir recursos del sistema, y además -si hay alguna vulnerabilidad de seguridad en estos servicios- los atacantes no podrán explotar esa brecha. ¡Cualquier servicio que no esté usando debe ser deshabilitado!

Para ver qué procesos están ejecutándose actualmente en su servidor, recomendamos usar la herramienta htop. Puede instalarla usando: apt-get install htop ; yum install o -Sy htop.

Control de SSH

SSH, o Secure SHell, es la avenida principal de interacción con servidores remotos. Aunque SSH provee una encriptación y seguridad excepcionales para los usuarios, también proporciona un acceso muy amplio a su servidor y por lo tanto representa un objetivo bastante atractivo para los atacantes. Para contrarrestar la posibilidad de comprometer sus servidores con ataques SSH, recomendamos que siga los siguientes pasos.

Primero: deshabilite los ingresos root a través de SSH. Debido a que el nombre de usuario root es bastante predecible y provee un acceso completo y sin restricciones a su sistema, es imprudente dejar ingresar este nombre de usuario vía SSH. Edite el archivo /etc/ssh/sshd_config file para poder modificar la opción PermitRootLogin de la siguiente manera:

PermitRootLogin no

Si la línea está comentada, quite el signo de comentario. Para obtener acceso root a su sistema puede (y debería) usar herramientas como su y sudo para hacerlo sin necesidad de iniciar sesión como root. Asegúrese de conocer otros nombres de usuario y contraseñas respectivas antes de eliminar el acceso vía root.

Nota:
El siguiente paso incluye la deshabilitación de acceso remoto a través de autenticación por contraseña y habilita el acceso a través de claves públicas y privadas. Exhortamos a los usuarios a seguir los pasos con cuidado, y hacer las pruebas pertinentes antes de aplicar los cambios finales, ya que existe la posibilidad de bloquear su propio acceso remoto al servidor. Antes de ejecutar el siguiente comando debe haber generado las claves SSH correspondientes. Recomendamos probar el acceso vía SSH keys antes de deshabilitar el acceso a través de autenticación por contraseña.

Segundo: deshabilite la autenticación por contraseña. Genere y utilice claves SSH para acceder a su sistema. Eliminando las contraseñas, los atacantes deberán adivinar (o robar) su clave privada SSH con el fin de obtener acceso a su servidor -es muy improbable que esto ocurra si usted es cauteloso. En el archivo /etc/ssh/sshd_config modifique el parámetro PasswordAuthentication como sigue:

PasswordAuthentication no

NOTA: Si usted no ha generado las claves SSH, debe hacerlo en su propia máquina antes de deshabilitar la autenticación por contraseña.

Para generar las claves SSH en su host, ingrese el siguiente comando en su sistema local si usted está utilizando un Sistema Operativo Mac OS X o Linux:

ssh-keygen

Conteste las solicitudes del programa; generalmente las opciones por defecto son aceptables. Al terminar, se generarán las claves SSH usando el algoritmo RSA. Si usted desea usar el algoritmo DSA, agregue t dsa al comando.

Su clave SSH será generada con su clave privada en el directorio ~/.ssh/id_rsa y su clave pública en ~/.ssh/id_rsa.pub. Usted deberá tener una copia de la clave pública en el archivo ~/.ssh/authorized_keys de la máquina remota. Para lograrlo, utilice los siguientes comandos (remplace con su propio usuario SSH y hostname):

scp ~/.ssh/id_rsa.pub usuario@hostname.com:/home/user/.ssh/uploaded_key.pub
ssh usuario@hostname.com "cat ~/.ssh/uploaded_key.pub >> ~/.ssh/authorized_keys"

Si usted está utilizando PuTTY en Windows, tenga en cuenta que tiene la capacidad de generar claves que puede subir al servidor usando puttygen. Puede descargar puttygen desde la página oficial de descargas de PuTTY

Si tiene algún problema ingresando necesitará acceso físico para acceder a su servidor y restaurar la funcionalidad SSH.

Limitar el acceso root y de usuarios del sistema

En general, los usuarios y aplicaciones que no tienen acceso a un sistema en su servidor, ya sea en virtud de las reglas de acceso limitado o por capacidades limitados de ingreso en su sistema, no pueden hacer daño al sistema. Adicionalmente, una forma común de comprometer un sistema es engañarlo para que piense que un usuario tiene derechos de acceso mayores de los que realmente tiene. Aunque estos "ataques de escalamiento" son poco frecuentes y pueden ser remediados bastante rápido, solo son una amenaza cuando las cuentas pueden ser explotadas.

Para hacer frente a estas posibles amenazas, sugerimos las siguientes buenas prácticas con respecto a la gestión de sus cuentas de usuario:

  • No otorgue cuentas de usuario a las personas que realmente no las necesitan. A menudo hay formas de proporcionar acceso a servidores específicos sin otorgar cuentas de usuario -incluso las que tienen acceso limitado al sistema. Otorgar una cuenta de usuario shell en su sistema debe ser visto como un último recurso en la mayoría de los casos.
  • Si usted necesita tener varios administradores en un sistema, en lugar de compartir una sola contraseña root entre todas estas personas, utilice sudo para dar "acceso root", pero obligue a los usuarios a autenticarse con sus propias contraseñas. El comando sudo también proporciona un registro más detallado, por lo que usted puede saber cuáles comandos root fueron ejecutados por qué usuario.
  • Administre adecuadamente los grupos de usuarios y permisos para proporcionar un acceso granular cuando no tenga otra opción sino otorgar una cuenta de usuario en su sistema.
  • Deshabilite las cuentas de usuario no utilizadas, ya sea eliminando la cuenta completamente con el comando userdel o bloqueando la cuenta de usuario con usermod --lock NOMBRE-USUARIO hasta que el usuario necesite acceder de nuevo (en este caso se utiliza usermod --unlock).

Limitar el acceso a sus servidores y adherirse a las buenas prácticas con respecto al acceso administrativo y a la gestión de cuentas de usuario no evitará completamente los ataques de escalamiento o todas las posibles intrusiones. Sin embargo, al limitar el tamaño de su "sombra", disminuye la probabilidad de ser víctima de la mayoría de los ataques de este tipo.

Utilizar un firewall para bloquear el tráfico no deseado

El término "Firewall" o cortafuegos es un término tan conocido incluso fuera del ámbito técnico, que se ha perdido un poco el concepto del papel que juega una solución de Firewall. Los firewalls son simples filtros de tráfico que pueden utilizarse para limitar y restringir el tráfico entrante en su servidor OpenCloud. El objetivo es prevenir que llegue tráfico (o restringirlo adecuadamente) desde ciertas direcciones IP o sobre ciertos puertos donde usted ya sabe que existe tráfico malicioso o no deseado.

Existen una gran cantidad de soluciones para sistemas Linux que permiten una configuración muy efectiva de los firewall, pero los firewalls reales son creados y administrados usando iptables. iptables está instalado en la mayoría de las distribuciones de Linux y constituye en pocas palabras, una herramienta para filtrar y bloquear tráfico de Internet.

Los ajustes y configuraciones de un firewall se escapan del alcance de este manual. Se recomienda visitar los enlaces de Opencloud referentes a este tema que podrá encontrar en la siguiente sección.

Recursos adicionales

Los consejos que hemos dado en este tutorial, son solo el primer paso para asegurar que su sistema se mantenga protegido contra intrusiones y usuarios o bots maliciosos. Sin embargo, constituyen una base bastante sólida para que su sistema se mantenga seguro contra las amenazas más comunes.

Puede consultar los siguientes recursos en busca de información adicional con respecto a este tema. Aunque este material es provisto esperando que sea útil, tome en cuenta que no podemos dar fe de la actualidad o precisión de los contenidos externos.

¿QUÉ DESEAS SABER?

Intentaremos leer tu mente...