El primer paso después de crear un servidor en la nube Linux® es establecer la seguridad en él. Debe realizar este paso crucial en cada servidor para evitar que los malos actores obtengan acceso no deseado. Esta acción da como resultado un entorno más seguro que ayuda a evitar que usted y su empresa se vean comprometidos. Realizar estos pasos básicos y fortalecer la seguridad en su servidor desalienta a los malos actores y los hace pasar a un nuevo objetivo.
Administración de usuarios
De forma predeterminada, el usuario raíz se crea como el primer usuario en cada sistema Linux. Debe desactivarlo a través de Secure Shell (SSH). Deshabilitar este usuario raíz a través de SSH hace que sea más difícil para un mal actor obtener acceso al sistema. Debido a que el usuario raíz se crea de forma predeterminada en todos los servidores Linux, los delincuentes ya tienen la mitad de la información que necesitan para iniciar sesión en su servidor si el usuario raíz está habilitado a través de SSH. Esta situación permite ataques SSH de fuerza bruta hasta que se rompe el hash de la contraseña.
Para evitar esta situación, debe crear un usuario secundario para cuando necesite iniciar sesión y administrar el sistema. Cada usuario final del sistema debe tener sus propias credenciales de inicio de sesión para fines de registro. Según las acciones que el usuario final deba realizar, es posible que necesite sudo
permiso para completar acciones administrativas. Esta sección proporciona ejemplos sobre cómo agregar un usuario con permiso sudo en sistemas basados en Debian® y Red Hat® Enterprise Linux.
Directrices de seguridad de la contraseña
Antes de crear cualquier usuario, asegúrese de usar contraseñas seguras que requieran una longitud mínima de caracteres (y tal vez incluso incluyan fechas de vencimiento). Estas son las pautas comunes defendidas por los defensores de la seguridad del sistema de software:
- Use una longitud mínima de contraseña de 12 a 14 caracteres, si está permitido.
- Incluya letras minúsculas y mayúsculas, números y símbolos, si está permitido.
- Generar contraseñas al azar, cuando sea factible.
- Evite usar la misma contraseña para varios usuarios, cuentas o sistemas de software.
- Evite la repetición de caracteres, patrones de teclado, palabras de diccionario, secuencias de letras o números, nombres de usuario, nombres de parientes o mascotas, vínculos románticos (actuales o pasados) o información personal (por ejemplo, números de identificación, nombres de antepasados o fechas).
- Evite usar información que esté o pueda asociarse públicamente con el usuario o la cuenta.
- Evite utilizar información que los colegas o conocidos del usuario puedan saber que está asociada con el usuario.
- No utilice contraseñas que tengan componentes débiles.
Agregar un usuario (sistema operativo Debian y Ubuntu)
Para los sistemas operativos Debian y Ubuntu®, agregue un usuario siguiendo estos pasos:
-
Cree un nuevo usuario y establezca su contraseña:
useradd {nombre de usuario}contraseña {nombre de usuario}
-
Dale al nuevo usuario
sudo
permisos para operaciones privilegiadas en el sistema. Este usuario es el usuario principal para iniciar sesión de forma remota y realizar cambios en el servidor.Use uno de los siguientes métodos para implementar
sudo
permisos para el usuario.una. Ejecute el siguiente comando para agregar el usuario a
admin
grupo de usuarios.usermod -aG admin {username}
Alternativamente, puede modificar los sudoers archivo para dar al usuario
sudo
permisos.una. Ejecute el siguiente comando como raíz para editar la lista de permisos de usuario:
visudo
Nota: En algunas distribuciones, los sistemas usan elvi
editor de texto paravisudo
. Porquevi
no es un editor fácil de usar, es posible que deba consultar un tutorial de vi para obtener ayuda.b. Agregue la siguiente línea directamente después de la línea que contiene
root ALL=(ALL:ALL) ALL
:{username} ALL=(ALL:ALL) ALL
C. Guardar y salir.
-
Cambie al nuevo usuario y pruebe sus permisos usando
sudo
para ejecutar un comando que requiera acceso de raíz, como el siguiente comando:su {username} sudo systemctl status sshd
Un aviso le pide que ingrese la contraseña del nuevo usuario para verificarla antes de ejecutar el comando.
-
También puede verificar que su usuario pueda elevarse a la
root
cuenta ejecutando el siguiente comando:sudo -i
Si realiza estos pasos correctamente, su usuario ahora tiene sudo
acceder y puede elevar los permisos. Si no se ejecuta correctamente, recibe un mensaje que indica que el usuario no está en los sudoers archivo cuando intente autenticarse.
Añadir un usuario (Red Hat y CentOS)
Para los sistemas operativos Red Hat y CentOS®, agregue un usuario siguiendo estos pasos:
-
Crea un nuevo usuario con
adduser
y establezca la contraseña del usuario conpasswd
:useradd {username} passwd {username}
-
Dale al nuevo usuario
sudo
permisos para operaciones privilegiadas en el sistema. Este usuario es el usuario principal para iniciar sesión de forma remota y realizar cambios en el servidor.Use uno de los siguientes métodos para implementar
sudo
permisos para el usuario.una. Ejecute el siguiente comando para agregar al usuario a la
wheel
grupousermod -aG wheel {username}
Alternativamente, puede modificar los sudoers archivo para dar al usuario
sudo
permisos.una. Ejecute el siguiente comando:
visudo
Nota: En algunas distribuciones, el editor de texto que usa el sistema paravisudo
esvi
. Porquevi
no es un editor fácil de usar, es posible que deba consultar un tutorial de vi para obtener ayuda.b. Agregue la siguiente línea directamente después de la línea que contiene
root ALL=(ALL:ALL) ALL
:{username} ALL=(ALL) ALL
C. Guardar y salir.
-
Cambie al nuevo usuario y pruebe sus permisos usando
sudo
para ejecutar un comando que requiere acceso de root:su {username} sudo systemctl status sshd
Un aviso le pide que ingrese la contraseña del nuevo usuario para verificarla antes de ejecutar el comando.
-
También puede verificar que su usuario pueda elevarse a la
root
cuenta ejecutando el siguiente comando:sudo -i
Si realizó estos pasos correctamente, su usuario ahora tiene sudo
acceder y puede elevar los permisos. Si no se ejecuta correctamente, recibe un mensaje que indica que el usuario no está en los sudoers archivo cuando intente autenticarse.
Generar un par de claves SSH
Para un método de inicio de sesión que sea más seguro que usar una contraseña, cree un par de claves SSH para usar con el usuario que creó anteriormente. Estas instrucciones funcionan con cualquier distribución de Linux.
-
Ejecute el siguiente comando para generar un par de claves en su local Computadora Linux o Mac®:
ssh-keygen -b 4096 -t rsa
Cuando se le pregunte dónde guardar la clave, use la ubicación predeterminada. Agregar una contraseña es opcional y es más seguro, pero puede ser inconveniente.
Esta operación crea dos archivos. Los nombres predeterminados son
id_rsa
para su clave privada yid_rsa.pub
para su clave pública. -
Una vez que haya creado el par de claves en su computadora local, cargue la clave pública en su servidor remoto para el usuario que creó anteriormente.
Advertencia: Asegúrese de cargar el público clave, y no la clave privada.
ssh-copy-id -i ~/.ssh/id_rsa.pub {username}@{remotePublicIPAddress}
-
Conéctese al servidor remoto usando
ssh {username}@{remotePublicIPAddress}
y ejecute el siguiente comando para verificar que no se agregaron claves adicionales que no esperaba:cat .ssh/authorized_keys
En este punto, ha agregado ssh-key
y autenticación de contraseña para el usuario. La siguiente sección repasa los pasos opcionales sobre cómo deshabilitar la autenticación de contraseña.
Configuración del demonio SSH de Linux
Ahora que tienes un nuevo usuario con sudo
permisos y un par de claves SSH, puede trabajar con la configuración del demonio (servidor) SSH para mejorar la seguridad.
rack
y utiliza la autenticación de contraseña en el puerto 22. Además, la reconstrucción de servidores existentes o la creación de un nuevo servidor a partir de una instantánea requiere que habilite los inicios de sesión raíz configurando PermitRootLogin
opción a yes
. Si necesita cambiar estos valores, hable con un miembro de su equipo de soporte de Rackspace para que el cambio se realice de una manera que no afecte nuestra capacidad de brindarle Fanatical Experience™.
Los comandos de ejemplo para el resto del artículo asumen que ha iniciado sesión como su nuevo usuario, usando sudo
para realizar operaciones privilegiadas.
Opciones de configuración de SSH
Esta sección cubre opciones comunes en el archivo de configuración de SSH que ayudan a mejorar la seguridad. Esta información se utiliza para configurar su cortafuegos más adelante.
Esta sección describe solo algunas opciones para cambiar y describe lo que hacen. Para obtener detalles sobre otras opciones de configuración, consulte la documentación de OpenSSH.
Esta sección se centra en las siguientes opciones:
Port XX
:esta opción es el puerto en el que escucha el demonio SSH (puerto 22 por defecto).PermitRootLogin
:Este indicador habilita (sí) o deshabilita (no) el inicio de sesión raíz a través de SSH. De forma predeterminada, esta línea está comentada y permite el inicio de sesión de root.PubkeyAuthentication
:esta bandera habilita (sí) o deshabilita (no) las claves SSH para la autenticación. Por defecto, esta línea está comentada y permitessh-key
acceso.PasswordAuthentication
:Este indicador habilita (sí) o deshabilita (no) la autenticación de contraseña. De forma predeterminada, esta opción está habilitada.
SSH usa el puerto 22 por defecto para la comunicación. Los malos actores prueban el puerto 22 con el nombre de usuario root
en cada servidor que atacan. Por esta razón, deshabilitar el usuario raíz a través de SSH y cambiar SSH para escuchar en un puerto no estándar ayuda a prevenir una infracción.
Cambiar el puerto no detendrá a un intruso determinado, pero hace que la mayoría de los escaneos superficiales en busca de oportunidades de conexión SSH pasen por alto su servidor. De manera similar, eliminar el acceso SSH para el usuario raíz interfiere con los ataques casuales de fuerza bruta a través de SSH.
También debe considerar qué método de autenticación usar al iniciar sesión. De manera predeterminada, todos los sistemas Linux usan autenticación con contraseña. Existen varias formas de realizar la autenticación en el servidor, pero las dos principales son mediante una contraseña y claves SSH.
Las claves SSH se generan en pares, una pública y otra privada, y solo puede usarlas en combinación entre sí. Debe almacenar la clave privada en un lugar seguro en la computadora desde la que se conecta, y nunca debe darla. Puede dar la clave pública, y es la clave que coloca en el servidor al que se está conectando. La clave privada en su computadora local se ejecuta a través de un algoritmo cuando realiza una conexión, otorgando acceso si el hash del par de claves coincide con la clave pública.
Modificar sshd_config
En este punto, ha agregado un nuevo usuario con sudo
permisos, creó un par de claves SSH y cargó su clave SSH pública. Ahora puede cambiar su archivo de configuración SSH para mejorar su seguridad. Para hacer esto, puede cambiar SSH para escuchar en un puerto personalizado, restringir el inicio de sesión raíz a través de SSH, habilitar la autenticación de clave pública y deshabilitar la autenticación de contraseña mediante los siguientes pasos:
-
Abra el archivo de configuración del demonio SSH para editarlo:
sudo vim /etc/ssh/sshd_config
-
Cambie las siguientes líneas:
Nota :Por defecto, el
Port
yPermitRootLogin
las líneas se comentan como indica el#
símbolo. Cuando se comentan, estas líneas se leen como opciones predeterminadas, incluso si se realizan cambios en la línea. Para implementar estos cambios, debe descomentar las líneas asociadas eliminando el#
símbolo al comienzo de la línea asociada. Además, antes de deshabilitarPasswordAuthentication
asegúrese de haber configurado una clave SSH o no podrá conectarse al servidor.Cambiar:
#Port 22 #PermitRootLogin yes PasswordAuthentication yes
Para:
Port 2222 PermitRootLogin no PasswordAuthentication no
Reemplazar 2222 con el puerto que desea utilizar. Asegúrese de que otro programa no esté utilizando el nuevo puerto mediante netstat.
Importante: Como se mencionó anteriormente, no debe realizar este cambio en
sshd_config
si su servidor tiene un nivel de servicio de operaciones administradas. Estos cambios podrían negar el acceso de Rackspace a su servidor. -
Pruebe la configuración alterada de SSH en busca de errores ejecutando el siguiente comando:
sshd -t
Si no recibe errores, SSH ahora está configurado para ejecutarse en un puerto personalizado y aceptar solo usuarios que no sean root que pasen una clave SSH válida. Para que esta configuración se aplique y persista, debe reiniciar el servicio SSH. Sin embargo, no reinicie el servicio todavía. Reiniciar SSH ahora podría bloquearle el acceso al servidor, lo que le obligaría a utilizar el modo de rescate o la consola web para restaurar la configuración. Debe configurar el cortafuegos antes de reiniciar el servidor. Hablamos del cortafuegos en la siguiente sección.
Modifique el firewall del software y reinicie SSH
iptables
en el servidor No debe cambiar el puerto SSH si usa RackConnect. Para obtener más información acerca de los cortafuegos y RackConnect, consulte Administrar las políticas de red de RackConnect v2.0.
Cada distribución de Linux utiliza una solución de firewall de software diferente. En Red Hat Enterprise Linux (RHEL) y CentOS 7, el firewall predeterminado es firewalld
. En las distribuciones basadas en Debian y Ubuntu, la solución de cortafuegos predeterminada es Cortafuegos sin complicaciones (UFW). Para RHEL y CentOS 6, la solución predeterminada es iptables
. Consulte la siguiente sección para el sistema operativo de su servidor.
RHEL, CentOS 7 y firewalld
-
Abra el nuevo puerto SSH ejecutando los siguientes comandos:
sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
Reemplazar
2222
con el puerto que usó para el demonio SSH. -
Reinicie el
sshd
servicio ejecutando el siguiente comando:sudo systemctl restart sshd
-
Verifique que su puerto SSH personalizado se abrió en el servidor:
netstat -plnt | grep ssh
Si siguió estos pasos, debería ver algo similar al siguiente resultado:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd
tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
Ubuntu, Debian y UFW
-
Abra el nuevo puerto SSH ejecutando los siguientes comandos:
sudo ufw allow 2222
Reemplazar
2222
con el puerto que usó para el demonio SSH. -
Reinicie el
sshd
servicio ejecutando el siguiente comando:sudo systemctl restart sshd
-
Verifique que su puerto SSH personalizado se abrió en el servidor ejecutando el siguiente comando:
netstat -plnt | grep ssh
Si siguió estos pasos, debería ver algo similar al siguiente resultado:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd
tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
CentOS 6 e iptables
Nota :RHEL y CentOS 6 se marcarán como Fin de vida útil en noviembre de 2020. Para obtener las mejores prácticas de seguridad, le recomendamos encarecidamente que considere una versión más nueva del sistema operativo para alojar su aplicación o sitio web.
-
Abra el nuevo puerto SSH ejecutando el siguiente comando:
sudo iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT sudo service iptables-save
Reemplazar
2222
con el puerto que usó para el demonio SSH. -
Ejecute el siguiente comando para reiniciar el demonio SSH para que el demonio aplique la nueva configuración que configuró:
sudo service sshd restart
-
Verifique que su puerto SSH personalizado se abrió en el servidor ejecutando el siguiente comando:
netstat -plnt | grep ssh
Si siguió estos pasos, debería ver algo similar al siguiente resultado:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd
tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
Después de realizar los cambios para su sistema operativo, abra otra ventana de terminal en su máquina local e inicie sesión en el servidor como el usuario que creó anteriormente. Recuerde especificar el puerto recién cambiado. Mantenga su conexión original activa en caso de que necesite solucionar problemas de configuración.
Para conectarse a SSH con la nueva configuración, es posible que deba especificar el número de puerto y la clave para usar. Por ejemplo:
ssh -p 2222 -i ~/.ssh/id_rsa {username}@{remotePublicIPAddress}
El -p
La opción especifica el puerto y el -i
La opción especifica la clave privada que se usará para la conexión.
Si se conecta desde un escritorio de Windows, cuando crea la conexión en PuTTY, puede especificar el número de puerto y una clave privada.
Prevención de intrusión simple
La mayoría de los posibles intrusos ejecutan múltiples ataques contra el mismo puerto para tratar de encontrar algo que puedan explotar en el software que se ejecuta en ese puerto. Afortunadamente, puede configurar una herramienta de prevención de intrusiones como fail2ban en su servidor para bloquear ataques repetidos en un puerto.
fail2Ban
instalado y configurado de forma predeterminada para vigilar los intentos de inicio de sesión SSH. Póngase en contacto con su equipo de soporte si tiene alguna pregunta o inquietud.
fail2ban
supervisa los registros y bloquea automáticamente las conexiones si ve demasiadas del mismo host en un período corto de tiempo. Para instalar y configurar fail2ban
en su servidor, siga los siguientes pasos:
-
Para instalar
fail2ban
en su servidor, ejecute uno de los siguientes comandos.RHEL y CentOS:
sudo yum install fail2ban
Debian y Ubuntu:
sudo apt-get install fail2ban
-
Use el siguiente comando para copiar su
fail2ban
predeterminado configuración El archivo recién creado anula la configuración predeterminada y le permite modificar el archivo de forma segura.sudo cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
-
Modifique su archivo para personalizar su nivel de seguridad en
fail2ban
.vim /etc/fail2ban/jail.local
En este archivo, puede configurar las siguientes opciones:
ignoreip
:este parámetro le permite especificar cualquier dirección IP que no deba prohibirse.bantime
:este parámetro le permite especificar la cantidad de segundos para prohibir una dirección IP.findtime
:este parámetro busca indicaciones demaxretry
se activa en el tiempo especificado.maxretry
:este parámetro establece el número de reintentos permitidos antes de que se prohíba la dirección IP.
-
Cree un archivo jail para los intentos de inicio de sesión SSH.
vim /etc/fail2ban/jail.d/sshd.local
-
En el archivo creado, copia y pega el siguiente texto:
[sshd] enabled = true port = ssh #action = firewallcmd-ipset logpath = %(sshd_log)s maxretry = 3 bantime = 86400
Estas opciones prohíben una dirección IP después de tres intentos fallidos de conexión a través de SSH durante 24 horas. Si conoce su dirección IP local, le recomendamos que agregue esta dirección IP en la sección anterior como
ignoreip
parámetro. -
Inicie y habilite
fail2ban
en su servidor usando los siguientes comandos:RHEL y CentOS 7 o Debian y Ubuntu:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
RHEL y CentOS 6:
sudo service fail2ban start sudo chkconfig fail2ban on
Detección de intrusiones
Un sistema de detección de intrusos (IDS) puede ayudar a un administrador a monitorear los sistemas en busca de actividad sospechosa y posibles vulnerabilidades. Un IDS es más robusto que una herramienta de prevención como fail2ban
pero puede ser más complicado de configurar y mantener.
Un IDS de código abierto popular es OSSEC. OSSEC mantiene agentes en múltiples sistemas que informan al servidor principal, lo que permite la investigación de registros y alertas de un servidor potencialmente comprometido incluso si ese servidor está apagado.
Si sospecha que un sistema ya está comprometido, puede investigar con procedimientos como la verificación de puertas traseras e intrusos y la investigación del modo de rescate.
Mantenga su sistema operativo actualizado (parches)
Mantener su núcleo, paquetes y dependencias actualizados es muy importante, especialmente para módulos y paquetes relacionados con la seguridad. Algunas actualizaciones, como las actualizaciones del kernel, requieren que reinicie su servidor. Debe programar los mantenimientos para que se lleven a cabo en momentos que sean menos perjudiciales para los usuarios porque estos mantenimientos provocan un breve período de inactividad.
Importante :Si bien mantener su sistema actualizado es de vital importancia, asegúrese de que las actualizaciones que está aplicando no afecten negativamente su entorno de producción.
Para buscar e instalar actualizaciones en los sistemas operativos Ubuntu y Debian, ejecute los siguientes comandos:
sudo apt-get update
sudo apt-get upgrade
Para buscar e instalar actualizaciones en los sistemas CentOS, Red Hat y Fedora, ejecute el siguiente comando:
sudo yum update
Sistema operativo final de vida
Averigüe cuándo la versión de distribución de Linux que está ejecutando en sus servidores llega al final de su vida útil (EOL). Cuando un lanzamiento alcanza su EOL, los mantenedores de la distribución ya no lo admiten ni proporcionan actualizaciones de paquetes a través de sus repositorios oficiales. Debe planificar su migración a una versión más nueva mucho antes de que su versión actual alcance su EOL.
Use los siguientes enlaces para averiguar cuándo su versión de distribución de Linux está configurada para alcanzar su EOL:
- Sistemas operativos Ubuntu:https://wiki.ubuntu.com/Releases
- Red Hat Enterprise Linux (RHEL):https://access.redhat.com/support/policy/updates/errata/
- CentOS:Igual que Red Hat
- Fedora:https://fedoraproject.org/wiki/End_of_life
- Debian:https://wiki.debian.org/DebianReleases
Seguridad a nivel de cuenta
Aunque asegurar sus servidores es una parte esencial de las operaciones en Internet, también es necesario asegurar su cuenta. Su nombre de cuenta, contraseña y claves API son partes esenciales de cómo interactúa con las ofertas de Rackspace Cloud. Al igual que cualquier otra contraseña o credencial de acceso, desea mantenerlos seguros. Sin embargo, también debe permitir que su equipo tome medidas y realice las tareas necesarias.
Mediante el control de acceso basado en roles (RBAC), puede crear usuarios y otorgar permisos a personas o aplicaciones que son responsables de usar varios servicios de Rackspace. Al aprovechar RBAC, puede otorgar a su equipo y contratistas acceso solo a las utilidades que necesitan y revocar el acceso si es necesario.
Los siguientes son algunos escenarios de uso:
- Otorgue a los contratistas acceso para configurar el entorno que usted les ha contratado para crear, pero limite su capacidad para ver o cambiar cualquier información de la tarjeta de crédito o eliminar su cuenta.
- Permita que su contador vea la factura pero no elimine sus servidores.
- Contrate a un administrador de base de datos (DBA) y otorgue acceso al DBA a sus instancias de DBaaS.
- Permita que un cliente cargue archivos directamente en su cuenta de Cloud Files.
- Configure sus servidores para registrar y usar usuarios específicos para sus agentes de respaldo y monitoreo que están separados de su cuenta de administrador.
Para obtener más información sobre RBAC, consulte las Preguntas frecuentes sobre el control de acceso basado en funciones (RBAC).