Asegurar el inicio de sesión de su servidor

Lo que vas a crear

Gracias a la creciente abundancia de aplicaciones auto hospedadas útiles como WordPress y al crecimiento asequible de los proveedores de alojamiento en la nube, ejecutar su propio servidor se está volviendo cada vez más atractivo para una audiencia más amplia. Pero asegurar estos servidores correctamente requiere un conocimiento bastante amplio de la administración del sistema Linux; Esta tarea no siempre es adecuada para novatos.. 

Cuando se registre en la cuenta típica de alojamiento en la nube, recibirá un correo electrónico con una cuenta de root, contraseña y dirección IP, e instrucciones para iniciar sesión a través de SSH en el puerto 22. Pero es importante tomar varios pasos adicionales más allá de lo básico. Configuraciones de acceso. La primera contraseña de root a continuación es solo el punto de partida para la seguridad. Hay mucho mas que hacer.

Este tutorial proporcionará una visión general de los enfoques incrementales comunes para proteger su servidor Linux típico.

Aproximaciones a la seguridad del servidor

Para los fines de este tutorial, estoy usando una nueva gota de Ubuntu 14.04 de Digital Ocean con la configuración LAMP; Si desea seguir la misma configuración, aquí se explican los pasos de configuración de ejemplo.. 

Una vez que asigne su nombre de dominio elegido, estará listo para comenzar. Estoy usando http://secure.lookahead.io para mi ejemplo.

Puede iniciar sesión en su servidor con SSH: ssh [email protected]. El servidor debe exigirle que cambie su contraseña durante el primer intento de inicio de sesión:

Ahora, el resto depende de ti. Aquí hay algunos enfoques comunes para mejorar la seguridad de inicio de sesión de su servidor:

1. Actualice los componentes de su sistema

En primer lugar, es importante actualizar regularmente los componentes de su sistema Linux. Por lo general, cuando inicie sesión, Ubuntu le dirá cuántos paquetes tiene que actualizar. Los comandos para actualizar tus paquetes son:

sudo apt-get update sudo apt-get dist-upgrade

La reciente vulnerabilidad de seguridad Shellshock revelada en Bash es un ejemplo perfecto de la necesidad de actualizar periódicamente los archivos de su sistema..

Cada vez que inicie sesión, Ubuntu le dirá si hay paquetes y actualizaciones de seguridad que se pueden actualizar..

Si lo desea, puede activar las actualizaciones desatendidas:

sudo apt-get install desattended-updates sudo dpkg-reconfigure unattended-updates 

2. Cambie su puerto SSH del predeterminado

Dejar el acceso SSH en el puerto 22 hace que sea más rápido y más fácil para los hackers apuntar a sus servidores. Cambiemos el puerto SSH predeterminado a algo más oscuro..

Edite el archivo de configuración SSH:

sudo nano / etc / ssh / sshd_config

Cambie a un número de puerto diferente, por ejemplo:

# Qué puertos, IPs y protocolos escuchamos para el Puerto 33322

Reinicie SSH:

sudo service ssh restart

Luego, cierre la sesión e intente iniciar sesión de nuevo. Debería ver este mensaje de error:

ssh [email protected] ssh: conéctese al host secure.lookahead.io puerto 22: conexión rechazada

Esta vez, use el siguiente comando SSH, cambiando el puerto a 33322: ssh -p 33322 [email protected]. Debes poder iniciar sesión correctamente.

3. Activar un Firewall

El uso de un firewall puede ayudar a bloquear el acceso a los puertos que se dejan innecesariamente abiertos y cierran vectores de ataque; También puede ayudar con el registro de intentos de intrusiones..

Si está utilizando los servicios en la nube de Amazon AWS, hay una buena interfaz de usuario web para su firewall llamada grupos de seguridad. La consola para grupos de seguridad de AWS facilita la desactivación del acceso a todos los puertos, excepto el nuevo puerto SSH y el puerto 80 elegidos para la navegación web; Puedes ver un ejemplo visual de esto aquí:

Si desea implementar firewalls basados ​​en Linux, puede estudiar ufw e iptables. Si bien está fuera del alcance de este tutorial, daré un breve ejemplo de uso de ufw, el "firewall sin complicaciones". 

Primero, habilitaremos ufw y luego permitir el acceso a nuestro puerto SSH 33322, así como a todo el tráfico http, en el puerto 80. Luego, denegaremos el acceso en el puerto estándar SSH 22.

sudo ufw habilitar sudo ufw permitir 33322 sudo ufw permitir http sudo ufw denegar 22 sudo ufw status

Ten cuidado configurando ufw, como puedes bloquearte de una sesión de consola existente y de todo tu servidor.

Si desea ir más profundo, la detonación de puertos proporciona una manera de ocultar más completamente su puerto de acceso SSH. Hay un tutorial detallado para usuarios avanzados por Justin Ellingwood: Cómo usar Port Knocking para ocultar a tu SSH Daemon de los atacantes.

4. Cambie el nombre de inicio de sesión de su raíz

Ahora, eliminemos el usuario de inicio de sesión raíz (o ubuntu en algunos sistemas) y personalicemos el inicio de sesión del administrador.

Agregaremos un usuario llamado "hal". Reemplace "hal" con su nombre de usuario preferido en los ejemplos a continuación:

sudo adduser hal

Agregue su nuevo usuario al grupo sudo para administradores:

sudo adduser hal sudo

Agrega tu nuevo usuario al grupo sudoers. Editar el archivo sudoers:

sudo nano / etc / sudoers

Agregue esta línea al archivo sudoers, en la sección de privilegios de usuario:

hal ALL = (ALL) NOPASSWD: ALL

Edite el archivo de configuración SSH de nuevo:

sudo nano / etc / ssh / sshd_config

Eliminar la cuenta de root o ubuntu de la Permitir a los usuarios campo. Es posible que también deba agregar esta línea si no está en su archivo de configuración:

Permitir a los usuarios hal

Asegurarse PermitRootLogin esta apagado:

PermitRootLogin no

Reinicie el servicio:

sudo service ssh restart

Cierre la sesión e intente iniciar sesión de nuevo como root. No deberías poder hacerlo. Luego, intenta iniciar sesión como Hal: ssh -p 33322 [email protected]. Eso debería funcionar bien.

Tenga en cuenta que es posible que algunos usuarios deseen reiniciar SSH, cerrar sesión y verificar que puede iniciar sesión como Hal antes de desactivar el inicio de sesión de root.

5. Activar la autenticación de dos factores de Google

Ahora, vamos a agregar la autenticación de dos factores a su inicio de sesión del servidor; en otras palabras, cuando intentemos iniciar sesión en el servidor, se nos solicitará que proporcionemos un código de tiempo limitado desde una aplicación en nuestro teléfono.. 

Para este ejemplo, utilizaremos Google Authenticator. Asegúrese de descargar Google Authenticator desde la tienda de aplicaciones iTunes o Play Store.

Luego, desde la consola de su servidor, instale el paquete Google Authenticator:

sudo apt-get install libpam-google-authenticator

Luego, editaremos el Módulo de autenticación conectable (PAM) para que SSH requiera la autenticación de dos factores de Google:

nano /etc/pam.d/sshd

Agregue la siguiente línea en la parte superior:

se requiere autenticación pam_google_authenticator.so

Luego, vuelva a editar el archivo de configuración SSH nuevamente:

sudo nano / etc / ssh / sshd_config

Cambiar el ChallengeResponseAuthentication a si:

# Cambie a sí para habilitar las contraseñas de desafío-respuesta (tenga cuidado con # algunos módulos y subprocesos PAM) ChallengeResponseAuthentication yes

Guarde el cambio y active el autenticador:

autenticador de google

Además de ver un gran código QR (como se muestra en la parte superior de este tutorial), también verá un conjunto de claves de inicio de sesión secretas y se le harán algunas preguntas para personalizar su configuración:

Con la aplicación Google Authenticator en su teléfono, elija el ícono del lápiz de edición en la parte superior derecha y agregue una nueva entrada usando el botón en la parte inferior. Puede escanear el código QR con su cámara o ingresar la clave secreta. Una vez completado, Google Authenticator estará listo para proporcionarle códigos para su próximo inicio de sesión.

Imprima una copia de estos códigos reutilizables de emergencia y guárdelos en un lugar seguro, en caso de que necesite recuperar su inicio de sesión sin autenticación de dos factores..

Reinicie el servicio SSH nuevamente y cierre la sesión:

sudo service ssh restart logout

Vuelva a iniciar sesión, y esta vez se le pedirá un código de verificación antes de su contraseña. Escriba el código de verificación de seis dígitos de Google Authenticator en su teléfono:

La adición de la autenticación de dos factores agrega una capa sólida de seguridad secundaria a su servidor. Aún así, hay más que podemos hacer..

6. Cambie a utilizar claves SSH para iniciar sesión

Es aconsejable desactivar el inicio de sesión basado en contraseña de su servidor en favor de las claves de seguridad; Las llaves son mucho más resistentes al ataque. Las contraseñas son cortas y están sujetas a ataques de diccionario; las claves son más largas y en su mayor parte solo pueden ser comprometidas por supercomputadoras de agencias gubernamentales.

Para crear su clave SSH, siga estas instrucciones. Cambie al directorio de inicio para su nuevo usuario:

cd / home / hal

Hacer un directorio SSH y establecer permisos:

mkdir .ssh chmod 700 .ssh

Generar un nuevo par de claves. Cuando se le solicite, depende de usted si desea agregar una contraseña a la clave:

cd .ssh ssh-keygen -b 1024 -f id_hal -t dsa

Agregue la clave pública a la authorized_keys expediente:

cat ~ / .ssh / id_hal.pub> ~ / .ssh / authorized_keys

Establezca los permisos para el archivo de clave:

chmod 600 ~ / .ssh / *

Mueva la clave privada a una carpeta temporal para descargarla en su computadora local:

cp ~ / .ssh / * / tmp chmod 644 / tmp / *

Descargue la nueva clave privada a su computadora usando su cuenta de Ubuntu. En su computadora, use Terminal:

scp -P 33322 -i ~ / .ssh / id_hal [email protected]: / tmp / * ~ / .ssh

Establecer permisos y prueba:

cd ~ / .ssh chmod 400 id_hal ssh -p 33322 -i ~ / .ssh / id_hal [email protected]

Si se encuentra con algún error, puede intentar ver el registro en el servidor de AWS mientras intenta iniciar sesión:

cola -f /var/log/auth.log

Elimine los archivos de claves temporales del directorio tmp del servidor:

rm -rf / tmp / *

Edite el archivo de configuración SSH de nuevo:

sudo nano / etc / ssh / sshd_config

Desactivar la autenticación de contraseña:

PasswordAuthentication no

Reinicie el servicio SSH de nuevo:

sudo service ssh restart

Ahora, nadie podrá iniciar sesión en su servidor sin su clave privada. Para iniciar sesión en su servidor, use el siguiente comando:

ssh -p 33322 -i ~ / .ssh / id_hal [email protected]

Asegúrate de asegurar la computadora que estás usando con la clave privada; También es aconsejable almacenar una copia de su clave privada en una unidad flash en algún lugar físicamente seguro.

Tenga en cuenta que la autenticación de dos factores de Google Authenticator se omite cuando se utiliza la seguridad de clave SSH.

Además, si alguna vez se bloquea su servidor durante estas configuraciones, DigitalOcean proporciona una consola web que actúa como si un teclado estuviera conectado a su servidor. Para otros anfitriones, es posible que necesite ayuda de su equipo de soporte.

7. Administre la seguridad de su aplicación

Si bien el portal de inicio de sesión de su servidor es una vulnerabilidad grave, honestamente, las aplicaciones que elija instalar pueden presentar riesgos aún mayores. Por ejemplo, recientemente leí que el uso incorrecto de expresiones regulares en su aplicación PHP puede abrir su servidor a ataques de denegación.

Pero un ejemplo más común es la reciente vulnerabilidad del complemento de WordPress con Slider Revolution. Un tema que había instalado realmente incluía este complemento, así que tuve que actualizar el tema para corregir el error..

Las vulnerabilidades de las aplicaciones pueden ser difíciles de mantener. Puede hacer que volver a un alojamiento gestionado parezca atractivo de nuevo; no te rindas Tenga cuidado con las aplicaciones que instale, permanezca en las listas de correo de sus proveedores de código y mantenga todo actualizado regularmente.

Sea proactivo y haga lo que pueda para proteger sus aplicaciones. Por ejemplo, vea cómo describo cómo agregar la seguridad del usuario de Apache a la instalación de la popular aplicación web, PHPMyAdmin, que se usa para simplificar la administración y el acceso a la base de datos MySQL. Debido a que solo los administradores necesitan acceso a PHPMyAdmin y las consecuencias de ser hackeado son altas, agregar una capa adicional de seguridad de contraseña es bastante apropiado para esta aplicación en particular.

La seguridad es una gran preocupación y una gran área con la cual lidiar. Espero que hayas encontrado este tutorial útil. Por favor, siéntase libre de publicar sus propias ideas, correcciones, preguntas y comentarios a continuación. Me interesaría especialmente los enfoques alternativos y extendidos. También puedes contactarme en Twitter @reifman o enviarme un correo electrónico directamente.