Co­n­fi­gu­rar un servidor seguro es una de las tareas más im­po­r­ta­n­tes para los ad­mi­ni­s­tra­do­res. Esto se aplica no solo a los se­r­vi­do­res au­to­ge­s­tio­na­dos, sino también al hardware alquilado. Medidas como la pro­te­c­ción mediante co­n­tra­se­ñas, co­n­fi­gu­ra­cio­nes adecuadas de SSH y ac­tua­li­za­cio­nes regulares ga­ra­n­ti­zan un paquete de seguridad integral.

Co­n­fi­gu­rar un servidor seguro: ¿quién es re­s­po­n­sa­ble?

Alojar un servidor propio es la mejor solución para disfrutar de la máxima libertad durante su co­n­fi­gu­ra­ción. Los root servers o se­r­vi­do­res raíz dedicados son una al­te­r­na­ti­va co­n­ve­nie­n­te y que muchos pro­vee­do­res alquilan para dar acceso a la cuenta de usuario root. En ambos casos, gestiones fu­n­da­me­n­ta­les como la in­s­ta­la­ción, la es­tru­c­tu­ra­ción y el ma­n­te­ni­mie­n­to del servidor son re­s­po­n­sa­bi­li­dad exclusiva de la persona que alquila el servicio.

In­de­pe­n­die­n­te­me­n­te de la solución escogida, la seguridad desempeña un papel esencial porque un error en el entorno root puede tener co­n­se­cue­n­cias graves. No obstante, si se siguen las prácticas correctas, se puede es­ta­ble­cer la base perfecta para conseguir un servidor estable, potente y seguro.

Se­r­vi­do­res dedicados
Re­n­di­mie­n­to e in­no­va­ción
  • Pro­ce­sa­do­res de última ge­ne­ra­ción
  • Hardware dedicado de alto re­n­di­mie­n­to
  • Seguridad de primer nivel

Cómo proteger tu servidor: guía paso a paso

In­de­pe­n­die­n­te­me­n­te de si deseas proteger un servidor con Windows, Ubuntu o Debian, existen medidas generales que te ayudarán a es­ta­ble­cer una base sólida de seguridad. Hemos resumido los pasos más im­po­r­ta­n­tes para que puedas im­ple­me­n­tar­los y disfrutar de un servidor seguro.

Paso 1: realizar una in­s­ta­la­ción mínima

Antes de tomar las pre­cau­cio­nes pe­r­ti­ne­n­tes para co­n­fi­gu­rar un servidor seguro ya puedes influir en el potencial de seguridad posterior de tu proyecto web. Sin importar si te decantas por un sistema Windows o Linux, en la in­s­ta­la­ción se aplica el principio de que un servidor solo debe contener el software necesario para realizar sus tareas.

Esto se debe a que cada apli­ca­ción que se instala conlleva un riesgo potencial de seguridad y puede re­pe­r­cu­tir de manera negativa en el re­n­di­mie­n­to. Para disminuir el número de ataques se deben instalar o activar los co­m­po­ne­n­tes ne­ce­sa­rios del sistema o solo recurrir a software de terceros de­bi­da­me­n­te ve­ri­fi­ca­do.

Paso 2: es­ta­ble­cer una co­n­tra­se­ña segura

Después de in­s­ta­lar­los, lo primero que debes hacer es es­ta­ble­cer una co­n­tra­se­ña segura para el usuario ad­mi­ni­s­tra­dor (Windows) o root (Linux). Por defecto no se define ningún valor y la cuenta de ad­mi­ni­s­tra­dor permanece bloqueada hasta que se es­ta­ble­z­ca una co­n­tra­se­ña. No­r­ma­l­me­n­te, tras la in­s­ta­la­ción, el sistema operativo solicita au­to­má­ti­ca­me­n­te la creación de una cuenta de usuario con una co­n­tra­se­ña que haga de acceso de ad­mi­ni­s­tra­dor o root.

Si has alquilado un servidor Linux a un proveedor y ya tienes un inicio de sesión root pre­de­fi­ni­do, es im­po­r­ta­n­te que cambies la co­n­tra­se­ña de inmediato. Para hacerlo, conéctate a tu servidor mediante SSH y ejecuta el siguiente comando en el terminal co­rre­s­po­n­die­n­te:

passwd
bash

A co­n­ti­nua­ción, puedes definir tu co­n­tra­se­ña segura, que deberás verificar después. Asegúrate de que la co­n­tra­se­ña sea lo más larga posible y utiliza una co­m­bi­na­ción de letras, ca­ra­c­te­res es­pe­cia­les y números. También se re­co­mie­n­da almacenar la co­n­tra­se­ña en un gestor de co­n­tra­se­ñas, para tenerla siempre di­s­po­ni­ble si la necesitas.

Consejo

Si tu sistema Linux ya tiene una co­n­tra­se­ña root co­n­fi­gu­ra­da que de­s­co­no­ces, puedes cambiarla en el modo de re­cu­pe­ra­ción. Para acceder a este modo, mantén pulsada la tecla Shift o Mayús durante el proceso de inicio. Desde la opción de menú “root”, podrás iniciar la consola como ad­mi­ni­s­tra­dor y realizar el cambio de co­n­tra­se­ña deseado.

Paso 3: modificar el puerto SSH

Para acceder al servidor vía SSH se utiliza por defecto el puerto TCP/UDP 22, que es el que figura ya au­to­má­ti­ca­me­n­te cuando se instala el sistema. Los ci­be­r­de­li­n­cue­n­tes que van en busca de sistemas con brechas de seguridad llevan a cabo sus ataques, no­r­ma­l­me­n­te intentos de registro au­to­má­ti­cos, a través de este puerto, por lo que, de­fi­nie­n­do otro puerto diferente para las co­ne­xio­nes remotas cifradas, se puede minimizar el riesgo de accesos in­de­sea­dos.

Para ello se debe abrir el archivo de co­n­fi­gu­ra­ción SSH sshd_config con un editor de textos. El comando que aparece en el siguiente ejemplo de código invoca al archivo con el editor estándar de Linux, es decir, nano:

nano /etc/ssh/sshd_config

Busca la línea co­rre­s­po­n­die­n­te y sustituye el número de puerto 22 por un número de tu elección. En este sentido, no hay que olvidar, sin embargo, que existen otros puertos es­tá­n­da­res para otros servicios (por ejemplo, el puerto 80 para HTTP.

Nota

Antes de que se activen los cambios en el archivo sshd_config, es necesario reiniciar el servicio SSH. En Debian esto se lleva a cabo con el comando /etc/init.d/ssh restart, mientras que los usuarios de Ubuntu pueden iniciar el servicio con ayuda de service ssh restart.

Paso 4: des­ac­ti­var el registro SSH para el ad­mi­ni­s­tra­dor

Para conseguir un servidor seguro, se re­co­mie­n­da des­ha­bi­li­tar el acceso SSH para la cuenta root o de ad­mi­ni­s­tra­dor. Si esta cuenta permanece ha­bi­li­ta­da, un atacante que obtenga la co­n­tra­se­ña podría acceder al servidor mediante acceso remoto.

Antes de im­ple­me­n­tar esta medida, asegúrate de crear al menos otra cuenta que pueda co­ne­c­tar­se al servidor. De lo contrario, podrías quedarte co­m­ple­ta­me­n­te bloqueado fuera del sistema. En sistemas Linux, puedes crear una nueva cuenta con el siguiente comando:

useradd -g users -d /home/usuario1 -m -s /bin/bash usuario1

De esta manera se genera la cuenta de usuario “usuario1”. A co­n­ti­nua­ción, se define una co­n­tra­se­ña segura para esta nueva cuenta de inicio de sesión:

passwd usuario1

Verifica si funciona el registro con dicha cuenta de usuario y continúa con el paso para bloquear el acceso SSH para la cuenta root. Para ello será necesario recurrir al archivo de co­n­fi­gu­ra­ción SSH sshd_config, que puedes abrir con el editor que hayas escogido. Busca la entrada PermitRootLogin yes y su­s­ti­tú­ye­la por PermitRootLogin no. Después de reiniciar el servicio SSH, el acceso remoto para la cuenta root estará des­ha­bi­li­ta­do.

En el archivo de co­n­fi­gu­ra­ción también puedes es­pe­ci­fi­car qué usuarios pueden acceder al servidor mediante SSH uti­li­za­n­do la directiva AllowGroups. Para ello, crea un grupo (addgroup) y añade los usuarios deseados al grupo (adduser). Luego, incluye el nombre del grupo en el archivo sshd_config (por ejemplo, AllowGroups usuarios_ssh).

Nota

Una al­te­r­na­ti­va práctica al bloqueo del acceso SSH mediante co­n­tra­se­ña es des­ha­bi­li­tar co­m­ple­ta­me­n­te las au­te­n­ti­ca­cio­nes con co­n­tra­se­ña y utilizar la au­te­n­ti­ca­ción mediante claves públicas (Public-Key Au­the­n­ti­ca­tion) con claves SSH.

Paso 5: no­ti­fi­ca­cio­nes por correo para los mensajes de inicio de sesión con SSH

In­de­pe­n­die­n­te­me­n­te de cómo se proceda a la hora de asegurar el acceso SSH, se deben tener en cuenta todas las ac­ti­vi­da­des remotas. De esta manera se puede de­te­r­mi­nar si se ha asegurado co­rre­c­ta­me­n­te el servicio SSH del servidor co­rre­s­po­n­die­n­te. Al mismo tiempo, una buena mo­ni­to­ri­za­ción de las co­ne­xio­nes es­ta­ble­ci­das te alertará en caso de accesos no au­to­ri­za­dos para poder adoptar las medidas co­rre­s­po­n­die­n­tes. En ello, basta con un script de shell que envíe un correo de aviso au­to­má­ti­ca­me­n­te a tu dirección si el registro remoto se lleva a cabo con éxito en el servidor.

Un script de ejemplo para Linux /opt/shell-login.sh, que puedes crear fá­ci­l­me­n­te, solo ha de contener el siguiente código:

#!/bin/bash
echo "Login en $(nombre del host) el $(date +%Y-%m-%d) a las $(date +%H:%M)"
echo "Usuario: $USER"
echo
finger

Para completar la co­n­fi­gu­ra­ción, edita el archivo /etc/profile y añade la siguiente línea:

/opt/shell-login.sh | mailx -s "Login SSH en TU-NOMBRE DEL HOST" direcciondecorreo@example.com
txt

Con la siguiente entrada te aseguras de que el script se ejecuta y de que, en caso de que el login se realice con éxito, envíe un correo de aviso a la dirección deseada. La única condición es que al script se le asigne el permiso 755, que permiten la lectura y ejecución para todos los usuarios, y escritura úni­ca­me­n­te para el pro­pie­ta­rio. Esto se consigue con el siguiente comando:

chmod 755 /opt/shell-login.sh
bash
Nota

Cuando un usuario establece una conexión SSH con ayuda de un programa como WinSCP, que no ejecuta ningún inicio de sesión completo, el script de shell descrito an­te­rio­r­me­n­te no envía ningún correo ele­c­tró­ni­co.

Paso 6: bloquear los puertos no uti­li­za­dos

En general, los puertos abiertos no suelen re­pre­se­n­tar ningún riesgo para la seguridad. Debido a que son ne­ce­sa­rios para la co­mu­ni­ca­ción con cada uno de los servicios y apli­ca­cio­nes, es incluso esencial que ciertos puertos se liberen, como es el caso de los puertos 80 y 443 para co­ne­xio­nes HTTP o HTTPS o del puerto SSH se­le­c­cio­na­do. Si llevas a cabo una in­s­ta­la­ción mi­ni­ma­li­s­ta de sistemas y recurres a un número reducido de apli­ca­cio­nes de terceros, el número de puertos que necesitas no es ex­ce­si­va­me­n­te larga. Estas in­te­r­fa­ces abiertas solo son un riesgo cuando los programas que tienen que responder presentan brechas de seguridad y los cri­mi­na­les se apro­ve­chan de ellas, peligro que aumenta si se in­cre­me­n­ta el número de apli­ca­cio­nes.

Consejo

Consulta nuestro artículo dedicado para aprender cómo testear tus puertos y obtener una visión general de todos los puertos abiertos en tu servidor.

Si has realizado una in­s­ta­la­ción mínima del sistema y has instalado solo un número limitado de apli­ca­cio­nes de terceros es probable que la cantidad de puertos ne­ce­sa­rios sea reducida.

Ante posibles ataques, es fu­n­da­me­n­tal contar con un servidor seguro para bloquear los puertos abiertos que no sean ne­ce­sa­rios mediante la co­n­fi­gu­ra­ción de tu firewall. Por lo general, con el software iptables de filtrado de paquetes todos los sistemas ope­ra­ti­vos ya cuentan con la he­rra­mie­n­ta adecuada para ello. Con su ayuda se pueden crear normas fijas para regular el tráfico de datos, donde también es posible, entre otros factores, definir los puertos deseados y los no deseados.

Paso 7: ac­tua­li­za­ción periódica del software

Por lo general las vu­l­ne­ra­bi­li­da­des de seguridad conocidas pueden so­lu­cio­nar­se rá­pi­da­me­n­te mediante la pu­bli­ca­ción de ac­tua­li­za­cio­nes. Si te informas re­gu­la­r­me­n­te sobre las ac­tua­li­za­cio­nes di­s­po­ni­bles para los sistemas ope­ra­ti­vos y los programas in­s­ta­la­dos y llevas a cabo nuevas ac­tua­li­za­cio­nes, podrás proteger tu servidor de un modo óptimo. Casi todos los sistemas de se­r­vi­do­res permiten, asimismo, descargar e instalar ac­tua­li­za­cio­nes de seguridad también en un segundo plano.

Si quieres proteger un servidor con Windows, el apartado “Windows Update” te da la po­si­bi­li­dad de delimitar di­re­c­tri­ces concretas para el proceso de ac­tua­li­za­ción. Así puedes de­te­r­mi­nar cuándo y con qué asiduidad se deben buscar ac­tua­li­za­cio­nes, si se tienen que instalar las ac­tua­li­za­cio­nes en­co­n­tra­das de manera au­to­má­ti­ca o el momento en el que el sistema tiene que re­ini­ciar­se. En el caso de los sistemas Linux existen scripts es­pe­cí­fi­cos como apt-li­s­t­cha­n­ges o apticron que informan a diario sobre la exi­s­te­n­cia de un nuevo paquete de software y también lo descargan. Otros scripts como una­t­te­n­ded-upgrades llevan a cabo por sí mismos la in­s­ta­la­ción au­to­má­ti­ca.

Nota

Asegúrate de que durante un proceso de ac­tua­li­za­ción au­to­ma­ti­za­do mantienes una visión general sobre las ac­tua­li­za­cio­nes rea­li­za­das, pues así se pueden descubrir los errores que surjan durante el proceso de ac­tua­li­za­ción y reac­cio­nar ante ellos.

Paso 8: proteger se­r­vi­do­res Windows y Linux contra ataques de fuerza bruta

Uno de los ataques más sencillos y más re­cu­rre­n­tes es el llamado método de fuerza bruta. Con él, el atacante se vale de una he­rra­mie­n­ta con la que realiza varios inicios de sesión para acceder a las co­n­tra­se­ñas. Cuanto más cuidadoso seas con tus co­n­tra­se­ñas, menos pro­ba­bi­li­da­des habrá de que este método se lleve a cabo con éxito.

Es­pe­cia­l­me­n­te si ofreces un servicio con mecanismo de registro, debes tener en cuenta que todos los usuarios no son tan cui­da­do­sos y prudentes como deberían. Para estar protegido frente a este tipo de ataques, pueden ser de utilidad algunas he­rra­mie­n­tas de análisis como Fail2ban (para sistemas Linux y POSIX) o RdpGuard (para Windows). Estas so­lu­cio­nes revisan los archivos de registro del servidor, ide­n­ti­fi­can co­m­po­r­ta­mie­n­tos inusuales y bloquean la dirección IP de los usuarios so­s­pe­cho­sos. Asimismo, también se puede ajustar el número de intentos fallidos que son ne­ce­sa­rios para que se produzca el bloqueo o el período de validez que este debe tener.

Consejo

Puedes aumentar la seguridad ha­bi­li­ta­n­do la ve­ri­fi­ca­ción en dos pasos. Este método requiere, además de la co­n­tra­se­ña, un segundo factor que esté en posesión del usuario, como un sma­r­t­pho­ne, una tarjeta in­te­li­ge­n­te o una lista de códigos TAN.

Paso 9: utilizar he­rra­mie­n­tas de mo­ni­to­ri­za­ción

Si quieres tener un servidor seguro, también es im­po­r­ta­n­te preo­cu­par­se por que la co­m­bi­na­ción entre hardware y software funcione de la manera deseada, y no solo tras el inicio del entorno del servidor, sino a largo plazo. Dado que su­pe­r­vi­sar los numerosos procesos del sistema puede ser complejo, es re­co­me­n­da­ble usar he­rra­mie­n­tas de mo­ni­to­ri­za­ción desde el principio. Estas he­rra­mie­n­tas su­pe­r­vi­san las ac­ti­vi­da­des del servidor y emiten alertas ante cualquier anomalía.

Un modesto programa y de rápida co­n­fi­gu­ra­ción es, por ejemplo, Monit, que se puede instalar fá­ci­l­me­n­te en muchas di­s­tri­bu­cio­nes de Linux por medio del sistema de gestión de paquetes. Tras el arranque, la apli­ca­ción de código abierto (licencia AGPL de GNU) observa de manera fa­cu­l­ta­ti­va procesos, archivos, clouds, hosts, programas o scripts, donde también entran en juego recursos del sistema como CPU, memoria o consumo del sistema. Si se necesita más in­fo­r­ma­ción se re­co­mie­n­da recurrir al software de mo­ni­to­ri­za­ción Nagios, otra solución de código abierto di­s­po­ni­ble para Linux y Windows, y que se puede ampliar mediante plugins para Nagios es­pe­cí­fi­cos.

VPS gratis
Prueba un servidor virtual de forma gratuita durante 30 días

¡Prueba tu servidor virtual durante 30 días! Si lo solicitas, te re­em­bo­l­sa­re­mos todos los gastos in­cu­rri­dos.

Paso 10: co­n­fi­gu­rar copias de seguridad

Aunque las co­n­fi­gu­ra­cio­nes re­co­me­n­da­das aumentan si­g­ni­fi­ca­ti­va­me­n­te la seguridad del servidor, ningún sistema puede ga­ra­n­ti­zar una pro­te­c­ción absoluta. Por ello, una es­tra­te­gia de copias de seguridad integral debe ser un pilar clave de tu sistema de seguridad. Esta es­tra­te­gia te permitirá restaurar archivos en caso de pérdida o fallo del sistema.

Hoy en día existen he­rra­mie­n­tas de alto re­n­di­mie­n­to que no solo te ayudan a crear las copias, sino también a re­s­tau­rar­las. Una apli­ca­ción gratuita de utilidad en este sentido es el programa de si­n­cro­ni­za­ción rsync, cuyo nombre se deriva del protocolo homónimo y que está di­s­po­ni­ble en di­fe­re­n­tes versiones para casi todas las pla­ta­fo­r­mas (macOS, Windows y Linux). Esta he­rra­mie­n­ta mantiene la copia de los datos del servidor ac­tua­li­za­da y, para ello, realiza cambios en el archivo original en tiempo real.

Junto al backup general del servidor, otra de las tareas más im­po­r­ta­n­tes es la pro­te­c­ción de las bases de datos.

Nota

A la hora de proteger las copias de seguridad de manera segura, se re­co­mie­n­da que el di­re­c­to­rio del backup se guarde en un soporte de al­ma­ce­na­mie­n­to externo como, por ejemplo, un disco duro portátil u otro servidor y no en el propio servidor que se quiere asegurar.

Ir al menú principal