Servidores seguros: ¿cómo configurarlos correctamente?
Alojar un servidor propio es la mejor solución para disfrutar de la máxima libertad durante su configuración. Los dedicated root servers o servidores raíz dedicados son una alternativa conveniente y que muchos proveedores alquilan para dar acceso a la cuenta de usuario raíz. Debido a este permiso, gestiones fundamentales como la instalación, la estructuración y el mantenimiento del servidor son responsabilidad de la persona que alquila el servicio, al igual que en el caso de las variantes alojadas por cuenta propia. En el caso de este tipo de paquetes de servidores, el proveedor se encarga eventualmente, por normal general, de la instalación inicial del sistema operativo.
Independientemente de la solución de hosting escogida, al diseñar y utilizar la cuenta de usuario raíz o superusuario hay que proceder con cautela y responsabilidad, y es que la seguridad desempeña un papel esencial porque, por un lado, proceder de forma incorrecta repercute de manera negativa en el ámbito del root y, por otro, hacerlo correctamente constitiuye la base perfecta para conseguir un servidor estable, potente y seguro. Para obtener, por ejemplo, un servidor dedicado seguro y protegerlo frente a ataques externos, el cambio obligatorio de la contraseña es tan solo una de las muchas medidas necesarias con las que se puede incrementar la seguridad de los servidores.
Independientemente de la solución de hosting escogida, al diseñar y utilizar la cuenta de usuario raíz o superusuario hay que proceder con cautela y responsabilidad, y es que la seguridad desempeña un papel esencial porque, por un lado, proceder de forma incorrecta repercute de manera negativa en el ámbito del root y, por otro, hacerlo correctamente constitiuye la base perfecta para conseguir un servidor estable, potente y seguro. Para obtener, por ejemplo, un servidor dedicado seguro y protegerlo frente a ataques externos, el cambio obligatorio de la contraseña es tan solo una de las muchas medidas necesarias con las que se puede incrementar la seguridad de los servidores.
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 reembolsaremos todos los gastos incurridos.
Instalación mínima y contraseña segura
Antes de tomar las precauciones pertinentes para configurar 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 instalació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 aplicación que se instala conlleva un riesgo de seguridad potencial y puede repercutir de manera negativa en el rendimiento. Para disminuir el número de ataques se deben instalar o activar los componentes necesarios del sistema o solo recurrir a software de terceros debidamente verificado. Después de instalarlos, se debe establecer una contraseña de usuario raíz (sistemas Linux). Por defecto no se define ningún valor y la cuenta de administrador permanece bloqueada hasta introducirla. Normalmente, tras la instalación, el sistema operativo solicita automáticamente la creación de una cuenta de usuario con una contraseña que haga de acceso root. Si el proveedor con quien alquilas el servidor te proporciona los datos del login root, debes cambiar la contraseña. Para ello, puedes iniciar sesión en tu servidor por medio de SSH (con un sistema Linux) o de PuTTY (con un sistema Windows) e introducir el siguiente comando en el terminal correspondiente:
passwd
A continuación ya puedes definir tu contraseña, la cual se tendrá que verificar posteriormente. Esta debe estar formada tanto por consonantes como por caracteres especiales y cifras y tener una longitud considerable. También se recomienda guardar la contraseña con ayuda de un gestor de contraseñas para tenerla siempre a mano en caso de duda. Intenta crear una conexión con los nuevos datos del login root y, si todo funciona correctamente, puedes volver a interrumpir la conexión SSH utilizada al principio.
En caso de que se haya configurado una contraseña de superusuario para tu sistema, puedes modificarla en modo “recovery”, al que se puede recurrir manteniendo presionada la tecla “Mayús” (Shift) durante el proceso de arranque. En la entrada de menú “root” se puede iniciar la línea de comandos “Root” donde se opera automáticamente como administrador y donde se puede modificar la contraseña deseada.
Modificación del puerto SSH
Para acceder al servidor vía SSH se utiliza el puerto 22, de modo que es el que figura ya automáticamente cuando se instala el sistema. Los delincuentes que van en busca de sistemas con brechas de seguridad llevan a cabo sus ataques, normalmente intentos de registro automáticos, a través de este puerto, por lo que, definiendo otro puerto diferente para las conexiones remotas cifradas, se puede minimizar el riesgo de accesos indeseados. Para ello se debe abrir el archivo de configuració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 correspondiente 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 estándares para otros servicios (por ejemplo, el puerto 80 para HTTP) que, a ser posible, no deben utilizarse. Échale un vistazo a la lista de puertos estandarizados por la IANA (Internet Assigned Numbers Authority) y que se puede encontrar en su página web oficial. Como alternativa, también se puede ver la lista en el archivo /etc/services.
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”
Desactivar el registro SSH para los usuarios raíz
Para conseguir un servidor asegurado se recomienda bloquear el inicio de sesión directo a través de SSH para la cuenta raíz, pues de no ser así un atacante que esté en posesión de la contraseña puede valerse de la cuenta raíz para acceder al servidor remotamente. Antes de poner en práctica esta medida necesitas, además del superusuario, al menos otra cuenta de usuario que puedas vincular con el servidor para no estar bloqueado completamente por el sistema. Si todavía no has creado un perfil de usuario adecuado, ayúdate del siguiente comando para hacerlo:
useradd -g users -d /home/usuario1 -m -s /bin/bash usuario1
De esta manera se genera la cuenta de usuario usuario1, que se añade al grupo users (-g). Asimismo, a este perfil de usuario se le asigna el directorio home /home/usuario1 (-d). El comando -s /bin/bash establece como shell estándar la Bash y, por último, se define una contraseñ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 el proceso, es decir, el bloqueo de la cuenta raíz, solo en caso de haber obtenido un resultado positivo. Para ello será necesario recurrir al archivo de configuración SSH sshd_config, que puedes abrir con el editor que hayas escogido. Busca la entrada “PermitRootLogin yes” y sustitúyela por “PermitRootLogin no”. Tras reiniciar el servicio SSH a través de esta línea de comandos:
/etc/init.d/ssh restart (alternativ: service ssh restart)
Ya no es posible establecer el acceso remoto para la cuenta raíz. Inicia sesión con el perfil o los perfiles de usuario creados y modifícalos en cualquier momento (tras el registro) con el comando
su
En la cuenta raíz en caso de volver a necesitarlo. Con las líneas AllowGroups también puedes indicar en el archivo de configuración cuáles son los usuarios que pueden conectarse vía SSH con el servidor. Para tal fin crea un grupo (addgroup) y añade a los usuarios deseados (adduser). A continuación, introduce el nombre de grupo escogido en el archivo sshd_config (p.ej., AllowGroups ssh_nutzer).
Una alternativa cómoda para el bloqueo del login como superusuario consiste en prohibir el inicio de sesión del usuario con una contraseña y, en su lugar, recurrir a la autenticación con clave pública con claves SSH.
Notificaciones por correo para los mensajes de inicio de sesión con SSH
Independientemente de cómo se proceda a la hora de asegurar el acceso SSH a tu servidor, se deben tener en cuenta todas las actividades remotas. De esta manera se puede determinar si se ha asegurado correctamente el servicio SSH del servidor correspondiente. Al mismo tiempo, una buena monitorización de las conexiones establecidas te alertará en caso de accesos no autorizados para poder adoptar las medidas correspondientes. En ello, basta con un script de shell que envíe un correo de aviso automáticamente a tu dirección si el registro remoto se lleva a cabo con éxito en el servidor.
Un script así (aquí /opt/shell-login.sh) muy fácil de crear solo ha de contener el siguiente código:
Un script así (aquí /opt/shell-login.sh) muy fácil de crear 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
A continuación se debe incluir la siguiente línea en el archivo /etc/profile:
/opt/shell-login.sh | mailx -s "Login SSH en TU-NOMBRE DEL HOST" direcciondecorreo@example.com
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, lo que se consigue con el siguiente comando:
chmod 755 /opt/shell-login.sh
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 anteriormente no envía ningún correo electrónico.
Bloqueo de los puertos no utilizados
En general, los puertos abiertos no suelen representar ningún riesgo para la seguridad. Debido a que son necesarios para la comunicación con cada uno de los servicios y aplicaciones, es incluso esencial que ciertos puertos se liberen, como es el caso de los puertos 80 y 443 para conexiones HTTP o HTTPS o del puerto SSH seleccionado. Si llevas a cabo una instalación minimalista de sistemas y recurres a un número reducido de aplicaciones de terceros, el número de puertos que necesitas no es excesivamente larga. Estas interfaces abiertas solo son un riesgo cuando los programas que tienen que responder presentan brechas de seguridad y los criminales se aprovechan de ellas, peligro que aumenta si se incrementa el número de aplicaciones.
Por ello, ante este tipo de ataques es significativo contar con un servidor seguro para bloquear los puertos abiertos que no sean necesarios. Por lo general, con el software iptables de filtrado de paquetes todos los sistemas operativos ya cuentan con la herramienta 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. En nuestro tutorial sobre iptables puedes encontrar una pequeña introducción sobre este programa de filtrado así como instrucciones para crear un cortafuegos rudimentario para tu sistema.
Por ello, ante este tipo de ataques es significativo contar con un servidor seguro para bloquear los puertos abiertos que no sean necesarios. Por lo general, con el software iptables de filtrado de paquetes todos los sistemas operativos ya cuentan con la herramienta 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. En nuestro tutorial sobre iptables puedes encontrar una pequeña introducción sobre este programa de filtrado así como instrucciones para crear un cortafuegos rudimentario para tu sistema.
Actualización periódica del software
Ningún software está libre de las brechas de seguridad mencionadas anteriormente. Así, los errores de programación más vulnerables deben permanecer ocultos a los criminales antes de que se perpetren los ataques. Por lo general, no obstante, las debilidades conocidas pueden cerrarse en poco tiempo con ayuda de la publicación de actualizaciones. Si te informas regularmente sobre las actualizaciones disponibles para los sistemas operativos y los programas instalados y llevas a cabo nuevas actualizaciones, podrás proteger tu servidor de un modo óptimo. Casi todos los sistemas de servidores permiten, asimismo, descargar e instalar actualizaciones de seguridad también en un segundo plano.
Si, por ejemplo, quieres tener un servidor seguro haciendo uso de las actualizaciones automáticas, el apartado “Windows Update” te da la posibilidad de delimitar directrices concretas para el proceso de actualización. Así puedes determinar cuándo y con qué asiduidad se deben buscar actualizaciones, si se tienen que instalar las actualizaciones encontradas de manera automática o el momento en el que el sistema tiene que reiniciarse. En el caso de los sistemas Linux existen scripts específicos como apt-listchanges o apticron que informan a diario sobre la existencia de un nuevo paquete de software y también lo descargan. Otros scripts como unattended-upgrades llevan a cabo por sí mismos la instalación automática.
Si, por ejemplo, quieres tener un servidor seguro haciendo uso de las actualizaciones automáticas, el apartado “Windows Update” te da la posibilidad de delimitar directrices concretas para el proceso de actualización. Así puedes determinar cuándo y con qué asiduidad se deben buscar actualizaciones, si se tienen que instalar las actualizaciones encontradas de manera automática o el momento en el que el sistema tiene que reiniciarse. En el caso de los sistemas Linux existen scripts específicos como apt-listchanges o apticron que informan a diario sobre la existencia de un nuevo paquete de software y también lo descargan. Otros scripts como unattended-upgrades llevan a cabo por sí mismos la instalación automática.
Asegúrate de que durante un proceso de actualización automatizado mantienes una visión general sobre las actualizaciones realizadas, pues así se pueden descubrir los errores que surjan durante el proceso de actualización y reaccionar ante ellos.
Servidores Windows y Linux asegurados contra ataques de fuerza bruta
Los hackers tienen diversas opciones para acceder a tu servidor o a las aplicaciones en funcionamiento. Uno de los ataques más sencillos y más recurrentes es el llamado método de fuerza bruta. Con él, el atacante se vale de una herramienta con la que realiza varios inicios de sesión para acceder a las contraseñas. Cuanto más cuidadoso seas con tus contraseñas, menos probabilidades habrá de que este método se lleve a cabo con éxito. Especialmente si ofreces un servicio con mecanismo de registro, debes tener en cuenta que todos los usuarios no son tan cuidadosos y prudentes como deberían. Para estar protegido frente a este tipo de ataques no se necesita un software complejo o caro. Puesto que el servidor registra y responde a cada intento de inicio de sesión y lo guarda en un archivo de registro, pueden ser de utilidad algunas herramientas de análisis sencillas. Fail2ban (sistemas Linux y POSIX) o RdpGuard (Windows), por su parte, analizan los archivos log files relevantes, identifican comportamientos inusuales y bloquean la dirección IP de los usuarios sospechosos. Asimismo, también se puede ajustar el número de intentos fallidos que son necesarios para que se produzca el bloqueo o el período de validez que este debe tener.
Se puede ir un poco más lejos y crear una autenticación de dos factores para el establecimiento de la conexión con el servidor y para asegurar el inicio de sesión. En este proceso se necesita la contraseña y otro componente para el inicio de sesión, el cual es propiedad personal del usuario (p.ej. smartphone, smartcard, lista de códigos TAN).
Configuración de servidores seguros con herramientas de monitorización
Si quieres tener un servidor seguro, las medidas anteriormente detalladas contra las adversidades externas desempeñan, sin duda, un papel muy importante. Asimismo, también es importante preocuparse por que la combinación entre hardware y software funcione de la manera deseada, y no solo tras el inicio del entorno del servidor, sino a largo plazo. Teniendo en cuenta el elevado número de procesos de sistema diferentes, esto resulta más fácil de decir que de hacer, por lo que es recomendable recurrir desde el principio a herramientas de ayuda que analicen procesos completos en tu servidor y alerten en caso de incidentes. Un modesto programa y de rápida configuración es, por ejemplo, Monit, que se puede instalar fácilmente en muchas distribuciones de Linux por medio del sistema de gestión de paquetes. Tras el arranque, la aplicación open source (licencia AGPL de GNU) observa de manera facultativa procesos, archivos, clouds, hosts, programas o scripts, donde también entran en juego recursos del sistema como CPU, memoria o consumo del sistema. En el archivo de configuración de Monit se pueden definir valores o eventos que dan lugar a una notificación por correo electrónico, pero si se necesita más información se recomienda recurrir al software de monitorización Nagios. Este es algo más complejo, pero la versión principal es open source y puede implementarse con diversos plugins. Con ayuda de una máquina virtual también es posible utilizarlo en una plataforma Windows.
La confianza es buena, pero los backups son mejores
Con las sugerencias de configuración que te presentamos en este artículo puedes aumentar la seguridad de tu servidor considerablemente. Además de las continuas actualizaciones, las herramientas de monitorización y el software de seguridad obligatorio, los diferentes ajustes para llevar a cabo el registro, así como las limitaciones de la cuenta raíz otorgan al servidor un nivel de seguridad elevado. No obstante, también hay casos en los que puede que la mejor configuración y un mantenimiento adecuado no proporcionen una protección absoluta. Los errores de programa, los fallos del hardware o los descuidos propios pueden hacer que, en el peor de los casos, se pierdan algunos datos. A este respecto, la estrategia de creación de backups adecuada se convierte en otro de los pilares del sistema de seguridad, la cual permite recuperar los archivos correspondientes. Hoy en día hay un amplio abanico de herramientas de alto rendimiento a las que se puede recurrir no solo para crear, sino también para utilizar las copias de seguridad. Una aplicación gratuita de utilidad en este sentido es el programa de sincronización rsync, cuyo nombre se deriva del protocolo homónimo y que está disponible en diferentes versiones para casi todas las plataformas (macOS, Windows, Linux). Esta herramienta mantiene la copia de los datos del servidor actualizada y, para ello, realiza cambios en el archivo original en tiempo real. Junto al backup general del servidor, otra de las tareas más importantes es la protección de la(s) base(s) de datos.
A la hora de proteger las copias de seguridad de manera segura, se recomienda que el directorio del backup se guarde en un soporte de almacenamiento externo como, por ejemplo, un disco duro portátil u otro servidor y no en el propio servidor que se quiere asegurar.