16 – fortalecer el servidor 1/2

Bienvenidos al episodio 16 de deployandome, el podcast de tecnología para sysadmins y devops. Soy Rodolfo Pilas y estoy grabando el 21 de junio de 2017.

Muchas gracias a todos los que “dan para adelante” con el podcast: a los que dejan sus comentarios en deployando.me, a los que re-twitean los avisos de cada episodio o a los que simplemente me hacen llegar sus comentarios de forma personal.

Cuando instalamos un servidor, además de saber para qué lo vamos a utilizar e instalarle los servicios que le permiten cumplir su función, debemos tratar de asegurarlo para proteger los datos que él manejará, los posibles secretos, la privacidad, los derechos de terceros que estarán alojados o pasarán por él. Como administradores somos los primeros responsables por la seguridad de los servidores GNU/Linux.

En esta edición de deployandome voy a repasar las políticas o los pasos de fortalecimiento que sigo casi por defecto, cuando instalo o tomo bajo mi responsabilidad un servidor GNU/Linux.

Voy a hablar de una lista de sugerencias para hacer nuestros servidores más seguros y las organicé en diez puntos; pero tampoco quiero caer con los diez todos juntos, por lo que estos son los primeros cinco puntos que tomo en cuenta para fortalecer el servidor:

1. INSTALAR LO MINIMO

Dicho así parece fácil, pero es un conjunto de políticas relativas a la instalación. Primero revisar lo instalado y en caso que esté instalando de cero, si instalar lo mínimo posible.

Evitar o desinstalar o no tener en el servidor cosas del ambiente gráfico. Es muy frustrante atender actualizaciones de nuestros servidores por actualizaciones de Firefox o un visor de PDF que no estamos utilizando en nuestros servidores.

Así como les digo del ambiente gráfico XWindow, también les hablo del ambiente de desarrollo. Eviten, en lo posible instalar herramientas o desarrollar código dentro del servidor. Obviamente, no siempre es posible, pero si tenemos un acceso no autorizado al servidor, quién acceda va a tener las herramientas para compilar sus propias aplicaciones allí. Entonces el no tenerlas instaladas va a ser un punto más a la hora de fortalecer nuestro servidor.

Junto con la instalación también está el mantener el sistema actualizado siempre. Debemos recordar que hablamos de software libre que tiene todos sus códigos publicados y está continuamente siendo estudiado y testado, por “los buenos” y “los malos”. Por eso todos los días o cada muy poco tiempo están apareciendo problemas de seguridad y detrás de los problemas de seguridad vienen los exploits. Pero el software libre trae las actualizaciones apenas se detectan los problemas de seguridad y nuestras distribuciones van a traer los parches que debemos aplicar en forma continua.

A esto me refiero cuando les digo que la instalación es un conjunto de cosas: instalar lo mínimo, no instalar lo que no necesito y, lo que tengo instalado, mantenerlo actualizado.

2. MINIMIZAR LOS SERVICIOS QUE PRESTAMOS EN EL SERVIDOR

La idea es minimizar nuestra capa de exposición. Tratar de evitar los servidores que sirven todo, colocando un servicio por servidor. Cuando me inicié en el mundo de Linux era común instalar el servicio de disco, el de correo, el ftp, el de impresión todo junto en la misma máquina. La virtualización nos permite independizar instalaciones y el sistema de contenedores nos permite independizar los procesos.

Solo los servicios que son necesarios, revisar los puertos donde escuchan los servicios, revisar las IP donde están los servicios escuchando. Si son servicios que van a ser accedido localmente, pues ponerlos en la IP 127.0.0.1. Si son servicios que no utilizamos, lo ideal es desinstalarlos para no tener código que actualizar que nadie usa, pero como mínimo enmascararlos (mask) con systems para que nunca se prendan de ninguna forma.

3. SEPARAR PARTICIONES

Me preguntarán: si ya tengo instalado lo mínimo y tengo unos pocos servicios ¿para qué separar en particiones?

La idea no es solamente limitar el espacio o poder crecer mediante un mecanismo de volúmenes lógicos. Lo que va a permitir la separación en particiones es poder definir distintas políticas de montado entre una u otra particiones. Por ejemplo, en una partición que alojará la base de datos o datos de nuestras aplicaciones la podemos montar con políticas de no ejecución (noexec) o que no hayan dispositivos allí (nodev). Pero si vamos a colocar ejecutables, al menos que no se pueda ejecutar con seguid, con la opción `nosuid`.

El objetivo de separar es poder aplicar distintas políticas de seguridad en las particiones.

4. DESACTIVAR ACCESO ROOT REMOTO

Hoy día todos lo sistemas lo treen: desactivar el acceso root remoto y configurar `sudo` para escalar privilegios.

Desactivamos el acceso por password y los usuarios acceden 100% con certificados público privados, que nos permiten definir qué usuarios ingresan, con políticas adicionales sobre los certificados como origen de la conexión o limitar las opciones de SSH, hasta qué comandos les dejamos ejecutar.

5. USAR LA SEGURIDAD NATIVA

Los sistemas GNU/Linux son tan seguros o inseguros como nosotros mismos los instalamos.

Cuando tenemos algún problema no debemos tratar de solucionarlo con `chmod 777` porque ya lo soluciona. Pensemos soluciones que no debamos levantar todos los permisos para que aquello funcione.

Junto con la seguridad nativa también es importante mantener la coherencia de la distribución que estamos utilizando. Si nos mantenemos dentro de la distribución vamos a mantener la garantía del equipo que desarrolla la distribución de que va a ser segura. Debemos evitar por todos los medios descargar o compilar software que no está dentro de la distribución. Siempre trato de plantear esto como una ruptura o quiebre de la garantía.

En esto de la seguridad nativa, también sugiero dejar encendido SELinux, que es nuestro aliado. Después que entendemos su filosofía, como funciona y cómo darnos cuenta cuando nos estamos chocando contra una de sus políticas de seguridad para poderla adaptar a nuestras necesidades; cuando aprendemos todo esto, SELinux es nuestro amigo que va a hacer nuestros sistemas muy fuertes.

En la siguiente edición comentaré los otros cinco puntos que suelo tener en cuenta para la seguridad.

Soy Rodolfo Pilas, en twitter me siguen por @pilasguru y les dejo un saludo a todos, confiando en que este podcast les haya aportado para mejorar y, como siempre, espero sus inquietudes y sugerencias comentando en deployando.me

Hasta la próxima edición.