12 pasos para asegurar tu servidor Linux

Aprendemos a asegurar nuestro servidor GNU/Linux con unos sencillos y básicos pasos. Para ello nos serviremos de las potentes herramientas a las que podemos acceder desde la consola de comandos. Pero, antes de nada, ¿por qué debemos asegurar nuestro servidor?

Imagen de Werner Moser en Pixabay

Sin duda ya sabéis que actualmente los supercomputadores del top 500, la bolsa de New York o la mayoría de los servidores web del mundo funcionan con distribuciones del Ñu y el Pingüino. Esto hace que cada vez se reciban más ataques por parte de los ciberdelincuentes, que aprovechan nuevas vulnerabilidades o simplemente el descuido de un administrador despistado.

Para evitarlos nos debemos poner las pilas y con la manta en la cabeza seguir unos sencillos pasos, la mayoría de ellos bastante obvios.

Así que empecemos por los más sencillo y vayamos avanzando.

12 pasos para asegurar tu servidor Linux

«Fiarse de todo el mundo y no fiarse de nadie son dos vicios. Pero en el uno se encuentra más virtud, y en el otro, más seguridad.» Séneca

1. Ten siempre el sistema operativo actualizado

Debemos tener siempre el sistema actualizado, mediante los repositorios que tengamos configurados en el sistema y las aplicaciones que tengamos instaladas. Para ello, depende del tipo de distribución que utilicemos:

En Debian, Ubuntu o Linux Mint

  1. sudo apt update; sudo apt upgrade -y

En Fedora, Centos o RHEL

  1. sudo dnf update

Y en versiones antiguas:

  1. sudo yum update

2. Crear un nuevo usuario con privilegios

Una vez tengamos instalado nuestro sistema operativo por primera vez, es imprescindible crear un nuevo usuario con privilegios, esto es, que pueda realizar tareas habituales de «root» sin ser «root».

Esto ya os lo expliqué en estas entradas:

Añadir nuevo usuario en Ubuntu 18.04

Añadir nuevo usuario en Linux Mint

Usuario administrador con sudo en Linux

3. Utiliza una llave SSH

Debemos utilizar una clave SSH para iniciar sesión en nuestro nuevo servidor. Primero de todo debemos crear una nueva llave SSH si no la tenemos ya creada; además si vamos a acceder desde nuestro laptop o portátil, por ejemplo, debemos realizar el intercambio de llaves entre ambas máquinas.

4. Asegurar SSH

Existen varios métodos para asegurar el acceso vía SSH, por ejemplo, deshabilitar el acceso para el usuario root de forma remota, impedir el acceso con contraseña, únicamente por intercambio de llaves o incluso cambiar el puerto por defecto del servicio.

Para deshabilitar el acceso al usuario root e impedir acceder con contraseña, debemos editar el fichero de configuración /etc/ssh/sshd_config, buscar estas líneas:

  1. PasswordAuthentication yes
  2. PermitRootLogin yes

Y modificarlas para que queden así:

  1. PasswordAuthentication no
  2. PermitRootLogin no

Una vez modificados estos cambios debemos guardar el fichero y reiniciar el servicio SSH, véase:

  1. sudo systemctl restart sshd

O bien:

  1. sudo service sshd restart

5. Habilitar el cortafuegos

Lo cierto que es un poco engorroso gestionar el cortafuegos, pero sobre todo si es un servidor en producción, a no ser que tengamos un cortafuegos corporativo para toda nuestra red, debemos tener el cortafuegos habilitado y funcionando. Existen varios tipos de cortafuegos, de los más habituales ya hemos hablado en la web como UFW o bien Firewalld

6. Instala y habilita Fail2ban

Fail2ban es una aplicación que examina los registros del servidor en busca de ataques repetidos o automatizados. Si se encuentra alguno, alterará el cortafuegos para bloquear la dirección IP del atacante de forma permanente o por un período de tiempo específico. De fail2ban ya hemos hablado en la web, así que no tenéis excusa para no utilizarlo.

7. Habilita y configua SELinux

SELinux, un módulo de seguridad incorporado el kernel de Linux, es un poco el patito feo ya que se piensa que es difícil de configurar y causa más problemas que soluciones. Pero nada más lejos de la realidad.

Hace un tiempo, con la colaboración del ingeniero de Red Hat, Alex Callejas, creamos la entrada «Una guía SysAdmin para SELinux«, echarle un vistazo, sin miedo 😉

8. Elimina servicios de red no necesarios

Prácticamente todos los servidores GNU/Linux vienen con un puñado de servicios que utilizan la red, encendidos de forma predeterminada. Para ver los servicios de red que actualmente se están utilizando podemos utilizar herramientas como ss:

  1. sudo ss -atpu

Depende la versión de distribución que utilicemos la salida de una manera u otra.

A modo de ejemplo la información será similar a la siguiente:

  1. tcp    LISTEN  0       128              [::1]:postgresql            [::]:*       \
  2. users:(("postgres",pid=596,fd=3))
  3. tcp    LISTEN  0       20               [::1]:smtp                  [::]:*       \
  4. users:(("exim4",pid=1151,fd=4))
  5. tcp    LISTEN  0       128               [::]:http                  [::]:*       \
  6. users:(("nginx",pid=549,fd=7),("nginx",pid=548,fd=7))
  7. tcp    LISTEN  0       128               [::]:ssh                   [::]:*       \
  8. users:(("sshd",pid=533,fd=4)

Aquí debemos investigar la función de cada servicio y si nos interesa realmente que esté funcionando. Si no es así lo deberíamos desinstalar del sistema.

Para ello, simplemente:

  1. sudo apt purge "nombre del servicio"

O bien:

  1. sudo yum remove "nombre del servicio"

Otra buena alternativa es la herramienta lsof, de la que ya os hablé.

9. Revisa los registros del sistema

En todas las distribuciones existen ficheros de registros, que nos muestran información sobre la actividad del sistema y sus servicios. Todos ellos suelen estar ubicados en /var/log, por ejemplo: /var/log/auth, /var/log/secure o /var/log/messages, son algunos de lo que deberíamos revisar.

  1. Oct 12 18:28:17 servdebian10-1 sshd[1846]: \
  2. Failed password for invalid user pedro from 192.168.0.50 port 61732 ssh2
  3. Oct 12 18:28:21 servdebian10-1 sshd[1846]: \
  4. Connection closed by invalid user pedro 192.168.0.50 port 61732 [preauth]
  5. Oct 12 18:28:31 servdebian10-1 sshd[1857]: \
  6. Invalid user luisa from 192.168.0.30 port 61795
  7. Oct 12 18:28:34 servdebian10-1 sshd[1857]: \
  8. Failed password for invalid user luisa from 192.168.0.30 port 61795 ssh2

10. Asegura los servicios

Da igual que servicios estamos utilizando sobre el servidor, generalmente todos ellos suelen tener procedimientos para asegurarlos. Por ejemplo MariaDB y MySQL se pueden asegurar con «mysql_secure_installation«; otros como los servidores web Nginx y Apache también tienen sus procedimientos para asegurarlos.

11. Monitoriza

Da igual que utilices el término monitoreo o monitorizar, en ambas cosas hazlo. Utilizar los diferentes sistemas de monitoreo que tenemos a nuestro alcance siempre es recomendable, para así mejorar el tiempo de respuesta a los posibles problemas.

Existen muchos, si te interesa puedes consultar los principales leyendo esta entrada que escribí para Colaboratorio.net:

Colaboratorio.net – Las mejores herramientas de monitorización de software libre

12. Utiliza la cabeza

Da igual todas las medidas de seguridad que pongas, al final hay que utilizar la cabeza, que como decía mi madre «no solo está para llevar pelo» Así que no vayas compartiendo tu contraseña por ahí ni des detalles de la configuración de tu servidor, nunca se sabe quien está escuchando.

Conclusión

Como hemos visto con dedicarle un poco de tiempo podemos tener nuestro servidor bien asegurado. En cualquier caso, siempre es recomendable irse informando de vulnerabilidades que se vayan publicando por Internet. Un portal a consultar muy recomenable es Incibe-cert.es Existen muchos portales al respecto, solo es cuestión de investigar un poco. Además, no existe el sistema 100 % seguro, por lo que siempre es recomendable hacer un respaldo del sistema, si puede ser de forma diaria.

Espero que esta entrada os sea de utilidad en algún momento. Nos vamos leyendo

Fuentes consultadas

Opensource.com – 7 steps to securing your Linux server