La computación en la nube ha cambiado drásticamente el escenario de los servidores. Muchas plataformas ofrecen servidores en la nube Linux gratuitos y puede implementar sus servidores Linux en minutos a través de estas plataformas en la nube.
Cuando activa un nuevo servidor, especialmente si es visible en Internet, estará disponible de inmediato para los delincuentes que buscan configuraciones incorrectas y vulnerabilidades en los servidores expuestos a través de sus scripts de bot automatizados.
Hay algunas cosas que debe hacer después de instalar el servidor Linux para asegurarse de que su servidor no se vea comprometido.
Aquí hay una captura de pantalla de lo que Fail2ban ha visto recientemente en uno de mis servidores.
212 intentos de inicio de sesión incorrectos y 6 direcciones IP bloqueadas. Todo el tráfico de personas no autorizadas o secuencias de comandos que intentan iniciar sesión en mi servidor.
Unos primeros pasos cruciales lo ayudarán a proteger sus nuevas compilaciones de servidores contra riesgos.
Cosas recomendadas para hacer después de instalar un servidor Linux para reforzar la seguridad
He considerado dos de las distribuciones de servidores Linux más populares aquí:Ubuntu y CentOS/Red Hat. Compruebe qué Linux está ejecutando.
La mayoría de los consejos son genéricos aquí y deberían aplicarse a otros Linux a menos que se mencione específicamente.
Estas son las cosas que le recomiendo que verifique para garantizar la seguridad de su servidor Linux. He proporcionado pasos individuales, pero si desea hacerlo rápidamente, También he creado un script que puede ejecutar rápidamente en cualquier servidor nuevo que implemente .
1. Asegúrese de que se haya configurado un usuario que no sea root
La raíz es todopoderosa y no necesita los permisos de raíz todo el tiempo.
root también es un nombre de usuario válido en casi todos los sistemas Linux. Lo que significa que si está habilitado para la autenticación remota, la mitad del trabajo del atacante, obtener un nombre de usuario válido, ya está hecho.
Además, si un atacante puede acceder como raíz, no se requieren más permisos para hacer nada en el sistema.
Por estos motivos, es mejor iniciar sesión como usuario no raíz y deshabilitar el inicio de sesión raíz para el acceso remoto mediante SSH (se explica más adelante).
¿Cómo hacerlo?
Supongo que está conectado como root en su sistema.
Agregue un nuevo usuario con el comando useradd. Reemplace
useradd <username>
Configure una contraseña con el comando passwd para el usuario recién agregado:
passwd <username>
2. Asegúrese de que el usuario no root tenga permiso sudo
Dado que iniciará sesión en esta cuenta de forma remota mediante Secure Shell (SSH), querrá poder realizar actividades privilegiadas que requieran acceso raíz. Esto significa que la cuenta debe tener permisos de sudo.
¿Cómo hacerlo?
El proceso para crear un usuario sudo en Ubuntu y CentOS es similar, pero el grupo al que agregará el usuario es diferente.
Debe iniciar sesión como raíz para realizar este paso.
En CentOS y Red Hat , la wheel
group es el grupo estándar utilizado para otorgar a los usuarios permisos sudo. Agregue el usuario a este grupo con el comando usermod:
usermod -aG wheel <username>
Ubuntu usa el sudo
grupo para administrar usuarios sudo.
usermod -aG sudo <username>
3. Habilitación de la autenticación SSH basada en clave
Es importante tener habilitada la autenticación basada en clave para SSH para que funcione cuando deshabilitamos la autenticación basada en contraseña.
Las contraseñas descifradas, forzadas por fuerza bruta o comprometidas son una forma muy común para que los malos actores obtengan acceso a los sistemas. Spear phishing, correo electrónico no deseado extremadamente dirigido que persuade a un usuario desprevenido para que proporcione credenciales, es solo un método común para obtener credenciales.
Si alguien obtiene su nombre de usuario y contraseña en un sistema donde la autenticación basada en claves está habilitada y la autenticación basada en contraseña está deshabilitada para el acceso remoto a través de SSH, esa contraseña robada ya no les dará acceso a ese servidor.
Al habilitar la autenticación basada en clave y, en un paso posterior, deshabilitar la autenticación basada en contraseña, ha reducido en gran medida las posibilidades de que SSH se use en su contra. Esta es una de las formas elementales de proteger el servidor SSH.
¿Cómo hacerlo?
Supongo que ya tiene SSH habilitado en su servidor. Lo que debe hacer es generar claves SSH en su computadora personal (desde donde iniciará sesión en el servidor).
Una vez que tenga las claves SSH, debe agregar la clave pública a las claves_autorizadas en nuestro servidor para el usuario no root.
Atención ! No pierda las claves ssh de su computadora personal. Haz una copia de seguridad de estas claves. Si desactiva la autenticación basada en contraseña más tarde y pierde las claves SSH, no podrá acceder a su propio servidor.
4. Asegúrese de que SSH esté permitido a través del firewall ufw
Antes de habilitar el firewall en su sistema, debe asegurarse de que SSH esté permitido. De lo contrario, es posible que no pueda acceder a su sistema si accede de forma remota.
¿Cómo hacerlo?
Ubuntu usa Firewall sin complicaciones (ufw) y CentOS/Red Hat usa firewalld.
En CentOS/Red Hat , use el comando firewall-cmd:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
En Ubuntu, use el comando ufw así:
sudo ufw allow ssh
5. Habilitar firewall (solo después de permitir SSH)
Un firewall garantiza que solo el tráfico que usted permita específicamente pueda fluir hacia su servidor. Si un malhechor obtiene malware en su servidor e intenta que se comunique a través de un puerto que no está permitido, o si un servicio se habilita accidentalmente, no se puede usar para comprometer su servidor o comprometerlo aún más.
¿Cómo hacerlo?
En los sistemas CentOS/Red Hat, habilite el servicio firewalld systemd:
sudo systemctl start firewalld
sudo systemctl enable firewalld
En Ubuntu, usa este comando:
sudo ufw enable
6. Configure SSH para que no muestre el banner
Una de las formas en que un atacante puede comprometer su servidor es a través de errores en el software que ejecuta sus servicios. Un banner puede mostrar información sobre qué versión de OpenSSH o sistema operativo está ejecutando. No tiene sentido dar información a los malos. ¡Haz que trabajen para ello!
¿Cómo hacerlo?
Es el comportamiento predeterminado en CentOS/ Red Hat no para mostrar un banner para que no se necesite ninguna acción.
En Ubuntu, puede usar:
sudo echo "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
7. Deshabilitar todo el reenvío SSH
Si bien no es poco común que los administradores utilicen el reenvío SSH para cifrar el tráfico que, de otro modo, pasaría como texto sin cifrar, si no lo utiliza, debe desactivarlo. Un mal actor podría utilizar el reenvío para cifrar el tráfico, de modo que sea más difícil para usted verlo, o para obtener tráfico que, de otro modo, estaría bloqueado para pasar mediante un puerto y un servicio autorizados.
¿Cómo hacerlo?
En CentOS/Red Hat, un agregue lo siguiente a /etc/ssh/sshd_config
:
DisableForwarding yes
En Ubuntu, agregar DisableForwarding yes
al 10-my-sshd-settings.conf
archivo:
sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
8. Deshabilite el inicio de sesión raíz a través de SSH
Hay un usuario root en casi todos los sistemas Linux. Los riesgos de permitir que esa cuenta use SSH son dos.
- El nombre de usuario es conocido y los malos lo intentan con frecuencia.
- Si un atacante ingresa como root, tiene acceso completo al sistema.
Deshabilitar el uso de la cuenta raíz para las conexiones SSH anula ambos riesgos.
¿Cómo hacerlo?
En CentOS/Red Hat , busque la línea PermitRootLogin yes
en /etc/ssh/sshd_config
y cambiarlo a:
PermitRootLogin no
En Ubuntu, agregue PermitRootLogin no
al 10-my-sshd-settings.conf
archivo:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
9. Deshabilitar la autenticación SSH basada en contraseña
Antes de deshabilitar la autenticación de contraseña en SSH, asegúrese de tener configurada y probada la autenticación basada en claves como se menciona en el paso 3.
Deshabilitar la autenticación basada en contraseña bloquea a los actores maliciosos que intentan adivinar su contraseña o que lo han manipulado socialmente para que ingrese sus credenciales o las hayan robado por cualquier medio para que no ingresen a su servidor mediante SSH.
Un atacante debe tener sus claves públicas y privadas para acceder a su servidor.
¿Cómo hacerlo?
En CentOS/Red Hat , busque la línea PasswordAuthentication yes
en /etc/ssh/sshd_config
y cambiarlo a:
PasswordAuthentication no
En Ubuntu , agregue PasswordAuthentication no
al 10-my-sshd-settings.conf
archivo:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
10. Ignorar fantasmas
rhosts
está asociado con rsh, un protocolo heredado reemplazado por shell seguro. Si un usuario intenta crear un rhosts
malicioso archivo, esta configuración lo ignora explícitamente.
¿Cómo hacerlo?
En CentOS/Red Hat , busque la línea #IgnoreRhosts yes
en /etc/ssh/sshd_config
y cambiarlo a:
IgnoreRhosts yes
En Ubuntu , agregue IgnoreRhosts yes
al 10-my-sshd-settings.conf
archivo:
sudo echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
11. Instale fail2ban y configúrelo para proteger SSH
Fail2ban vigila los archivos de registro de los servicios configurados como SSH y bloquea las direcciones IP de los usuarios malintencionados para que no se conecten a su servidor después de un número determinado de intentos durante un período de tiempo determinado.
Si un atacante realiza más de 5 intentos fallidos en un período de tres horas, su dirección IP se bloqueará durante 12 horas, por ejemplo.
Fail2ban se puede configurar para proteger también otros servicios, como sitios web con el servidor web nginx o el servidor web Apache.
¿Cómo hacerlo?
Puede seguir nuestra guía detallada sobre el uso de Fail2Ban.
12. Configurar actualizaciones de seguridad automáticas (para Red Hat y CentOS)
Como se mencionó anteriormente, un servicio desactualizado con un exploit puede permitir que un atacante ingrese a su servidor sin siquiera tener que iniciar sesión si la vulnerabilidad es lo suficientemente grave. Es fundamental que las actualizaciones de seguridad se apliquen rápidamente para reducir este riesgo.
¿Cómo hacerlo?
Para una instalación de servidor Ubuntu predeterminada, las actualizaciones de seguridad automáticas están habilitadas, por lo que no es necesario realizar ninguna acción con respecto a las actualizaciones.
Para configurar las actualizaciones automáticas en CentOS/Red Hat, instalará una aplicación llamada dnf-automatic y habilitará un temporizador con los siguientes comandos:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
Puede verificar el temporizador ejecutando:
sudo systemctl status dnf-automatic.timer
Busque "cargado" en la línea Cargado:y "activo" en la línea Activo:.
Puede haber más o menos pasos según su gusto personal y lo que normalmente configura para que hagan sus servidores.
Script adicional:Primeros 10 segundos en un servidor Linux
Como prometí, aquí está el script que escribí que hace todos los pasos anteriores que mencioné después de que haya configurado y configurado un usuario no root para la autenticación basada en claves.
El script se puede ejecutar tanto en Ubuntu 20.04 como en CentOS/Red Hat 8.
Tenga en cuenta que no debe ejecutar scripts de shell aleatorios descargados de Internet a ciegas, sin importar cuánto confíe en la fuente del script. Debes leer el script y tratar de entender lo que hace.
El guión completo es de código abierto y está disponible para todos y se puede ver aquí. Puede descargar, leer y luego ejecutar el script bash.
Aquí hay una captura de pantalla después de una ejecución en el servidor Ubuntu 20.04.
¡Vea con qué facilidad puede completar algunos pasos básicos para proteger sus nuevas compilaciones de servidor en CentOS, Red Hat o Ubuntu ejecutando solo un script!
También puede enviar comentarios sobre el script o solicitar funciones.
Conclusión
Estas son solo algunas de las comprobaciones de seguridad más básicas, pero es algo que debe hacer después de instalar su servidor Linux.
Hacer estas cosas manualmente en una cantidad de servidores puede ser doloroso e innecesariamente lento. Aquí es donde puede aprovechar las secuencias de comandos y usar mi secuencia de comandos 'Primeros 10 segundos en un servidor Linux' o crear la suya propia.
Estas son algunas de mis recomendaciones. ¿Y usted? ¿Tienes algo que añadir a esta lista? Proporcione su sugerencia en la sección de comentarios.
El autor Ted LeRoy es un arquitecto de seguridad empresarial que brinda una variedad de información y orientación sobre seguridad física a las empresas.