Protección del servidor Linux. que hacer primero

Protección del servidor Linux. que hacer primero
Habib M'henni/Wikimedia Commons, CC BY-SA

Hoy en día montar un servidor en un hosting es cuestión de un par de minutos y unos cuantos clics del ratón. Pero inmediatamente después del lanzamiento se encuentra en un entorno hostil, porque está abierto a Internet como una chica inocente en una discoteca rockera. Los escáneres lo encontrarán rápidamente y descubrirán miles de bots con scripts automáticos que recorren la red en busca de vulnerabilidades y configuraciones incorrectas. Hay algunas cosas que debes hacer inmediatamente después del lanzamiento para garantizar una protección básica.

contenido

Usuario no root

Lo primero que debe hacer es crear un usuario no root. El punto es que el usuario root privilegios absolutos en el sistema, y ​​si le permites la administración remota, entonces harás la mitad del trabajo para el hacker, dejándole un nombre de usuario válido.

Por lo tanto, debe crear otro usuario y deshabilitar la administración remota a través de SSH para root.

Se crea un nuevo usuario con el comando useradd:

useradd [options] <username>

Luego se le agrega una contraseña con el comando passwd:

passwd <username>

Finalmente, este usuario debe agregarse a un grupo que tenga derecho a ejecutar comandos con privilegios elevados. sudo. Dependiendo de la distribución de Linux, estos pueden ser grupos diferentes. Por ejemplo, en CentOS y Red Hat se agrega un usuario a un grupo wheel:

usermod -aG wheel <username>

En Ubuntu se agrega al grupo. sudo:

usermod -aG sudo <username>

Claves en lugar de contraseñas SSH

La fuerza bruta o la filtración de contraseñas es un vector de ataque estándar, por lo que es mejor desactivar la autenticación de contraseña en SSH (Secure Shell) y utilizar la autenticación de claves en su lugar.

Existen diferentes programas para implementar el protocolo SSH, como por ejemplo lsh и Dropbear, pero el más popular es OpenSSH. Instalación del cliente OpenSSH en Ubuntu:

sudo apt install openssh-client

Instalación del servidor:

sudo apt install openssh-server

Iniciando el demonio SSH (sshd) en un servidor Ubuntu:

sudo systemctl start sshd

Inicia automáticamente el demonio en cada arranque:

sudo systemctl enable sshd

Cabe señalar que la parte del servidor OpenSSH incluye la parte del cliente. Es decir, a través de openssh-server Puedes conectarte a otros servidores. Además, desde su máquina cliente puede iniciar un túnel SSH desde un servidor remoto a un host de terceros, y luego el host de terceros considerará el servidor remoto como la fuente de las solicitudes. Una función muy conveniente para enmascarar su sistema. Para más detalles, consulte el artículo. "Consejos prácticos, ejemplos y túneles SSH".

Por lo general, no tiene sentido instalar un servidor completo en la máquina cliente para evitar la posibilidad de una conexión remota a la computadora (por razones de seguridad).

Entonces, para su nuevo usuario, primero debe generar claves SSH en la computadora desde la cual accederá al servidor:

ssh-keygen -t rsa

La clave pública se almacena en un archivo. .pub y parece una cadena de caracteres aleatorios que comienza con ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Luego, como root, cree un directorio SSH en el servidor en el directorio de inicio del usuario y agregue la clave pública SSH al archivo. authorized_keysusando un editor de texto como Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Finalmente, establezca los permisos correctos para el archivo:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

y cambiar la propiedad a este usuario:

chown -R username:username /home/username/.ssh

En el lado del cliente, debe especificar la ubicación de la clave secreta para la autenticación:

ssh-add DIR_PATH/keylocation

Ahora puede iniciar sesión en el servidor con el nombre de usuario usando esta clave:

ssh [username]@hostname

Después de la autorización, puede usar el comando scp para copiar archivos, la utilidad sshfs para montar de forma remota un sistema de archivos o directorios.

Es recomendable hacer varias copias de seguridad de la clave privada, porque si desactiva la autenticación de contraseña y la pierde, no tendrá forma de iniciar sesión en su propio servidor.

Como se mencionó anteriormente, en SSH es necesario deshabilitar la autenticación para root (por esta razón creamos un nuevo usuario).

En CentOS/Red Hat encontramos la línea PermitRootLogin yes en el archivo de configuración /etc/ssh/sshd_config y cambiarlo:

PermitRootLogin no

En Ubuntu agrega la línea PermitRootLogin no al archivo de configuración 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Después de verificar que el nuevo usuario esté autenticado utilizando su clave, puede desactivar la autenticación de contraseña para eliminar el riesgo de filtración de contraseña o fuerza bruta. Ahora, para acceder al servidor, el atacante necesitará obtener la clave privada.

En CentOS/Red Hat encontramos la línea PasswordAuthentication yes en el archivo de configuración /etc/ssh/sshd_config y cambiarlo de la siguiente manera:

PasswordAuthentication no

En Ubuntu agrega la línea PasswordAuthentication no archivar 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Para obtener instrucciones sobre cómo habilitar la autenticación de dos factores a través de SSH, consulte aquí.

Cortafuegos

El firewall garantiza que solo el tráfico en los puertos que usted permita directamente irá al servidor. Esto protege contra la explotación de puertos que otros servicios habilitan accidentalmente, lo que reduce en gran medida la superficie de ataque.

Antes de instalar un firewall, debe asegurarse de que SSH esté incluido en la lista de exclusión y no se bloquee. De lo contrario, tras iniciar el firewall, no podremos conectarnos al servidor.

La distribución de Ubuntu viene con un cortafuegos sin complicaciones (UFW), y con CentOS/Red Hat - firewalld.

Permitir SSH en el firewall de Ubuntu:

sudo ufw allow ssh

En CentOS/Red Hat usamos el comando firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Después de este procedimiento, puede iniciar el firewall.

En CentOS/Red Hat lanzamos el servicio systemd para firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

En Ubuntu usamos el siguiente comando:

sudo ufw enable

Fail2Ban

Servicio Fail2Ban analiza los registros del servidor y cuenta el número de intentos de acceso desde cada dirección IP. La configuración especifica las reglas sobre cuántos intentos de acceso se permiten en un intervalo determinado, después del cual esta dirección IP se bloquea durante un período de tiempo específico. Por ejemplo, permitimos 5 intentos fallidos de autenticación a través de SSH en un período de 2 horas, después de lo cual bloqueamos esta dirección IP durante 12 horas.

Instalación de Fail2Ban en CentOS y Red Hat:

sudo yum install fail2ban

Instalación en Ubuntu y Debian:

sudo apt install fail2ban

Lanzar:

systemctl start fail2ban
systemctl enable fail2ban

El programa tiene dos archivos de configuración: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Las restricciones de prohibición se especifican en el segundo archivo.

La cárcel para SSH está habilitada de forma predeterminada con la configuración predeterminada (5 intentos, intervalo de 10 minutos, prohibición por 10 minutos).

[POR ESTÁNDAR] ignorar comando = bantime = 10 m tiempo de búsqueda = 10 m maxretry = 5

Además de SSH, Fail2Ban puede proteger otros servicios en el servidor web nginx o Apache.

Actualizaciones de seguridad automáticas

Como usted sabe, constantemente se encuentran nuevas vulnerabilidades en todos los programas. Una vez publicada la información, se agregan exploits a paquetes de exploits populares, que son ampliamente utilizados por piratas informáticos y adolescentes al escanear todos los servidores seguidos. Por lo tanto, es muy importante instalar actualizaciones de seguridad tan pronto como estén disponibles.

Los servidores Ubuntu tienen actualizaciones de seguridad automáticas habilitadas de forma predeterminada, por lo que no se requieren pasos adicionales.

En CentOS/Red Hat necesitas instalar la aplicación. dnf-automático y enciende el cronómetro:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Verificación del temporizador:

sudo systemctl status dnf-automatic.timer

Cambiar puertos predeterminados

SSH fue desarrollado en 1995 para reemplazar telnet (puerto 23) y ftp (puerto 21), por lo que el autor del programa es Tatu Iltonen. eligió el puerto 22 por defectoy fue aprobado por la IANA.

Naturalmente, todos los atacantes saben en qué puerto se está ejecutando SSH y lo escanean junto con otros puertos estándar para averiguar la versión del software, verificar las contraseñas de root estándar, etc.

Cambiar los puertos estándar (ofuscación) reduce varias veces el volumen de tráfico basura, el tamaño de los registros y la carga en el servidor, y también reduce la superficie de ataque. A pesar de que algunos Criticar este método de “defensa a través de la oscuridad” (seguridad a través de la oscuridad). La razón es que esta técnica se opone a la fundamental protección arquitectónica. Por lo tanto, por ejemplo, el Instituto Nacional de Estándares y Tecnología de EE. UU. "Guía de seguridad del servidor" indica la necesidad de una arquitectura de servidor abierta: “La seguridad de un sistema no debe depender del secreto de la implementación de sus componentes”, dice el documento.

En teoría, cambiar los puertos predeterminados es contrario a las prácticas de arquitectura abierta. Pero en la práctica, el volumen de tráfico malicioso disminuye, por lo que se trata de una medida sencilla y eficaz.

El número de puerto se puede configurar cambiando la directiva. Port 22 en el archivo de configuración / etc / ssh / sshd_config. También está indicado por el parámetro -p <port> в sshd. Cliente y programas SSH Sftp también admite el parámetro -p <port>.

Parámetro -p <port> se puede utilizar para especificar el número de puerto al conectarse mediante el comando ssh en linux. EN Sftp и scp se utiliza el parámetro -P <port> (P mayúscula). Especificarlo desde la línea de comando anula cualquier valor en los archivos de configuración.

Si hay muchos servidores, casi todas estas acciones para proteger un servidor Linux se pueden automatizar en un script. Pero si solo hay un servidor, es mejor controlar el proceso manualmente.

Sobre los derechos de publicidad

¡Ordene y comience a trabajar de inmediato! Creación de VDS cualquier configuración y con cualquier sistema operativo en un minuto. La configuración máxima te permitirá divertirte: 128 núcleos de CPU, 512 GB de RAM, 4000 GB de NVMe. Bastante épico :)

Protección del servidor Linux. que hacer primero

Fuente: habr.com