
, CC BY-SA
Hoy en día, poner en marcha un servidor en el hosting es cuestión de minutos y unos pocos clics. Pero justo después de su lanzamiento, entra en un entorno hostil, ya que está abierto a toda la internet como una chica inocente en una discoteca de rock. Pronto será detectado por escáneres y encontrado por miles de bots programados automáticamente que recorren la red en busca de vulnerabilidades y configuraciones incorrectas. Hay varias cosas que se deben hacer inmediatamente después del lanzamiento para garantizar una protección básica.
Contenido
Usuario sin privilegios de root
Lo primero que hay que hacer es crear un usuario sin privilegios de root. La cuestión es que el usuario root tiene privilegios absolutos en el sistema, y si se le permite la administración remota, estarás haciendo la mitad del trabajo para un hacker, dejándole un nombre de usuario válido.
Por lo tanto, se debe crear otro usuario y desactivar la administración remota por SSH para el root.
El nuevo usuario se crea con el comando useradd:
useradd [options] Luego se le asigna una contraseña con el comando passwd:
passwd Finalmente, este usuario debe ser agregado a un grupo que tenga derecho a ejecutar comandos con privilegios elevados. sudoDependiendo de la distribución de Linux, estos pueden ser diferentes grupos. Por ejemplo, en CentOS y Red Hat, se agrega al usuario al grupo wheel:
usermod -aG wheel En Ubuntu, se agrega al grupo sudo:
usermod -aG sudo
Claves en vez de contraseñas SSH
El ataque por fuerza bruta o la filtración de contraseñas son vectores de ataque estándar, por lo que es mejor desactivar la autenticación por contraseñas en SSH (Secure Shell) y en su lugar utilizar la autenticación por claves.
Hay varios programas para implementar el protocolo SSH, tales como y , pero el más popular es OpenSSH. Instalación del cliente OpenSSH en Ubuntu:
sudo apt install openssh-clientInstalación en el servidor:
sudo apt install openssh-serverIniciar el demonio SSH (sshd) en el servidor bajo Ubuntu:
sudo systemctl start sshdIniciar automáticamente el demonio en cada arranque:
sudo systemctl enable sshd Cabe señalar que la parte del servidor de OpenSSH incluye al cliente. Es decir, a través de openssh-server se puede conectar a otros servidores. Además, desde su máquina cliente puede iniciar un túnel SSH desde el servidor remoto a un host externo, y entonces el host externo considerará al servidor remoto como la fuente de las solicitudes. Una función muy conveniente para ocultar su sistema. Para más detalles, consulte el artículo .
En la máquina cliente generalmente no tiene sentido instalar un servidor completo para evitar la posibilidad de conexiones remotas a la computadora (por razones de seguridad).
Así que, para su nuevo usuario, primero necesita generar claves SSH en el ordenador desde el cual accederá al servidor:
ssh-keygen -t rsa La clave pública se almacena en un archivo .pub y se ve como 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 directorio home del usuario en el servidor y agregue la clave pública SSH al archivo authorized_keys, usando un editor de texto como Vim:
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keysvim /home/user_name/.ssh/authorized_keysFinalmente, establezca los permisos correctos para el archivo:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keysy cambie la propiedad a este usuario:
chown -R username:username /home/username/.sshEn el lado del cliente, debe especificar la ubicación de la clave privada para la autenticación:
ssh-add DIR_PATH/keylocationAhora puede iniciar sesión en el servidor como el usuario usando esta clave:
ssh [username]@hostnameDespués de la autorización, puede usar el comando scp para copiar archivos, la utilidad para montar remotamente sistemas de archivos o directorios.
Es recomendable hacer varias copias de seguridad de la clave privada, porque si desactiva la autenticación por contraseña y la pierde, no tendrá ninguna manera de acceder a su propio servidor.
Como se mencionó anteriormente, en SSH es necesario desactivar 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 la cambiamos a:
PermitRootLogin no En Ubuntu, agregamos la línea PermitRootLogin no en el archivo de configuración 10-my-sshd-settings.conf:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.confDespués de verificar que el nuevo usuario se autentica con su clave, se puede desactivar la autenticación por contraseña para evitar el riesgo de filtración o fuerza bruta. Ahora, para acceder al servidor, un atacante necesitaría 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 la cambiamos de la siguiente manera:
PasswordAuthentication no En Ubuntu, agregamos la línea PasswordAuthentication no en el archivo 10-my-sshd-settings.conf:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.confConsulta las instrucciones para habilitar la autenticación de dos factores por SSH en. .
Cortafuegos
El firewall garantiza que solo el tráfico permitido por los puertos que has autorizado directamente llegue al servidor. Esto protege contra la explotación de puertos que se han habilitado por accidente con otros servicios, es decir, reduce significativamente la superficie de ataque.
Antes de instalar el firewall, es necesario asegurarse de que SSH esté en la lista de excepciones y no sea bloqueado. De lo contrario, después de iniciar el firewall, no podremos conectarnos al servidor.
La distribución de Ubuntu viene con Uncomplicated Firewall (), mientras que CentOS/Red Hat incluye .
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 --permanentDespués de este procedimiento, se puede iniciar el firewall.
En CentOS/Red Hat, iniciamos el servicio systemd para firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalldEn Ubuntu usamos el siguiente comando:
sudo ufw enable
Fail2Ban
El servicio analiza los registros en el servidor y cuenta el número de intentos de acceso desde cada dirección IP. En la configuración se especifican las reglas sobre cuántos intentos de acceso se permiten en un intervalo determinado, después de lo cual dicha dirección IP es bloqueada por un tiempo establecido. Por ejemplo, permitimos 5 intentos fallidos de autenticación por SSH en un intervalo de 2 horas, después de lo cual bloqueamos esa dirección IP durante 12 horas.
Instalación de Fail2Ban en CentOS y Red Hat:
sudo yum install fail2banInstalación en Ubuntu y Debian:
sudo apt install fail2banInicio:
systemctl start fail2ban
systemctl enable fail2ban El programa tiene dos archivos de configuración: /etc/fail2ban/fail2ban.conf y /etc/fail2ban/jail.conf. Las restricciones para el bloqueo se especifican en el segundo archivo.
El jail para SSH está habilitado por defecto con la configuración inicial (5 intentos, intervalo de 10 minutos, bloqueo por 10 minutos).
[DEFAULT] ignorecommand = bantime = 10m findtime = 10m maxretry = 5
Además de SSH, Fail2Ban puede proteger otros servicios en el servidor web nginx o Apache.
Actualizaciones de seguridad automáticas
Como es conocido, todas las aplicaciones constantemente encuentran nuevas vulnerabilidades. Después de la publicación de esta información, los exploits se añaden a paquetes de exploits populares, los cuales son utilizados masivamente por hackers y adolescentes al escanear todos los servidores de forma continua. Por eso, es muy importante instalar las actualizaciones de seguridad tan pronto como aparezcan.
En un servidor Ubuntu, en la configuración por defecto, se activan las actualizaciones automáticas de seguridad, por lo que no se requieren acciones adicionales.
En CentOS/Red Hat, es necesario instalar la aplicación y activar el temporizador:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerVerificando el temporizador:
sudo systemctl status dnf-automatic.timer
Cambio de puertos por defecto
SSH fue desarrollado en 1995 para reemplazar telnet (puerto 23) y ftp (puerto 21), por lo que el autor del programa, Tatu Ylönen , y fue aprobado por la IANA.
Naturalmente, todos los delincuentes son conscientes de en qué puerto opera SSH, y lo escanean junto con otros puertos estándar para conocer la versión del software, para comprobar contraseñas estándar de root, y así sucesivamente.
Cambiar puertos estándar — ofuscación — reduce considerablemente el volumen de tráfico basura, el tamaño de los registros y la carga del servidor, así como también disminuye la superficie de ataque. Aunque algunos (security through obscurity). La razón es que esta técnica se opone a la fundamental . Por lo tanto, por ejemplo, el Instituto Nacional de Estándares y Tecnología de EE. UU. en indica la necesidad de una arquitectura de servidor abierta: "La seguridad del sistema no debe depender de la oscuridad de la implementación de sus componentes", se menciona en el documento.
Teóricamente, cambiar puertos por defecto contradice la práctica de una arquitectura abierta. Pero en la práctica, el volumen de tráfico malicioso realmente se reduce, por lo que es una medida simple y efectiva.
El número de puerto puede configurarse modificando la directiva Port 22 en el archivo de configuración . También se especifica con el parámetro -p en . El cliente SSH y los programas también admiten el parámetro -p.
Parámetro -p se puede utilizar para indicar el número de puerto al conectarse a través del comando ssh en Linux. En y scp se utiliza el parámetro -P (título P). La instrucción desde la línea de comandos anula cualquier valor en los archivos de configuración.
Si hay muchos servidores, casi todas estas acciones para proteger el servidor Linux se pueden automatizar en un script. Pero si solo hay un servidor, es mejor controlar el proceso manualmente.
Publicidad
¡Pide y comienza a trabajar de inmediato! de cualquier configuración y con cualquier sistema operativo en un minuto. La configuración máxima permitirá rendir al máximo: 128 núcleos de CPU, 512 GB de RAM, 4000 GB de NVMe. Epic 😄
Fuente: habr.com
