Después de importar manualmente un disco virtual a Compute Engine, debes optimizar esas imágenes para que puedan usar las funciones específicas del entorno de Compute Engine.
Contenido
Instalar el entorno de invitado de Compute Engine
Debes instalar el entorno de invitado para poder usar las funciones clave de Compute Engine. Para saber cuándo debes instalar manualmente el entorno de invitado, consulta Cuándo instalar o actualizar manualmente el entorno de invitado.
Instala el entorno de invitado en la instancia de VM en ejecución que has creado después de importar manualmente tu imagen. Para realizar la instalación, accede a la instancia de VM mediante SSH con una cuenta de usuario que hayas creado antes de importarla o interactuando con la consola en serie.
Configurar una imagen importada para Compute Engine
Puedes ejecutar la imagen de disco de arranque en Compute Engine sin hacer cambios adicionales, pero también puedes optimizarla para que funcione de forma óptima en Compute Engine y tenga acceso a todas las funciones de Compute Engine.
Edita el archivo
ntp.conf
para que solo incluya la entrada del servidor NTP de Googleserver metadata.google.internal iburst
.Define la zona horaria como UTC:
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Para asegurar una red de alto rendimiento, utiliza las siguientes configuraciones de red recomendadas:
- Usa el cliente DHCP de ISC.
- Define el MTU de DHCP como el MTU de la red. El servidor DHCP de Compute Engine sirve este parámetro como la opción
interface-mtu
, que respetan la mayoría de los clientes. Para obtener más información sobre las MTUs de red, consulta la descripción general de la unidad de transmisión máxima. - Si no tienes previsto configurar direcciones IPv6, inhabilita IPv6.
Elimina las reglas de red persistentes para evitar que la instancia recuerde las direcciones MAC. Por ejemplo:
rm -f /etc/udev/rules.d/70-persistent-net.rules
Inhabilita el cortafuegos del sistema operativo, a menos que tengas requisitos específicos que no admitan las reglas de cortafuegos de Compute Engine. Compute Engine proporciona un cortafuegos para el tráfico entrante y saliente. Para obtener más información sobre los cortafuegos, consulta el artículo Descripción general de las reglas de cortafuegos.
Para asegurar un alto rendimiento de la red y del disco, inhabilita o elimina el daemon
irqbalance
. Este daemon no equilibra correctamente las solicitudes de interrupción para los sistemas operativos invitados en las instancias de máquinas virtuales. En su lugar, usa las secuencias de comandos que forman parte del entorno de invitado para equilibrar correctamente la configuración de IRQ de las CPUs virtuales.Configura el acceso SSH a la imagen base:
- Inhabilita el inicio de sesión SSH de root.
- Inhabilita la autenticación con contraseña.
- Inhabilita la autenticación basada en host.
- Habilita la comprobación estricta de la clave de host.
- Usa
ServerAliveInterval
para mantener las conexiones abiertas. Elimina las claves SSH de tu imagen para que otros usuarios no puedan acceder a las claves públicas ni privadas de tu imagen. En su lugar, usa Compute Engine para gestionar el acceso a las instancias.
Edita el archivo
/etc/ssh/ssh_config
para usar la siguiente configuración:Host * Protocol 2 ForwardAgent no ForwardX11 no HostbasedAuthentication no StrictHostKeyChecking no Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc Tunnel no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ServerAliveInterval 420
Edita el archivo
/etc/ssh/sshd_config
para usar la siguiente configuración:# Disable PasswordAuthentication because ssh keys are more secure. PasswordAuthentication no # Disable root login. Using sudo provides better auditing. PermitRootLogin no PermitTunnel no AllowTcpForwarding yes X11Forwarding no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ClientAliveInterval 420
Después de configurar y optimizar el disco de arranque en Compute Engine, crea una imagen a partir de ese disco para poder crear instancias a partir de una versión totalmente optimizada de la imagen en lugar de tener que configurar cada instancia cada vez que la crees.
Configurar prácticas recomendadas de seguridad
Siempre debes proporcionar un entorno de sistema operativo seguro, pero puede ser difícil encontrar el equilibrio entre un entorno seguro y accesible. Las máquinas virtuales vulnerables a ataques pueden consumir recursos caros. Google recomienda encarecidamente que tus imágenes cumplan las siguientes prácticas recomendadas de seguridad:
- Minimiza la cantidad de software instalado de forma predeterminada (por ejemplo, realiza una instalación mínima del SO).
- Habilita las actualizaciones automáticas.
- Inhabilita de forma predeterminada todos los servicios de red, excepto SSH, DHCP y NTPD. Puedes permitir que se ejecute un servidor de correo, como Postfix, si solo acepta conexiones de localhost.
- No permitir puertos de escucha externos, excepto sshd.
- Instala el paquete denyhosts para evitar los intentos de inicio de sesión por fuerza bruta de SSH.
- Elimina todas las cuentas innecesarias que no sean de usuario de la instalación predeterminada.
- En
/etc/passwd
, define el shell de todas las cuentas que no sean de usuario como/sbin/nologin
o/usr/sbin/nologin
(según dónde se haya instalado nologin en tu SO). - Configura tu sistema operativo para que use SHA512 con salt para las contraseñas en
/etc/shadow
. - Configura pam_cracklib para usar contraseñas seguras.
- Configura pam_tally para bloquear las cuentas durante 5 minutos después de 3 intentos fallidos.
En
/etc/shadow
, configura la cuenta raíz para que esté bloqueada de forma predeterminada. Ejecuta el siguiente comando para bloquear la cuenta raíz:usermod -L root
Deniega el acceso de superusuario en
/etc/ssh/sshd_config
añadiendo la siguiente línea:PermitRootLogin no
Crea perfiles de AppArmor u SELinux para todos los servicios predeterminados orientados a la red que estén en ejecución.
Utiliza las funciones del sistema de archivos siempre que sea posible para eliminar la necesidad del bit S*ID y proporcionar un control más granular.
Habilita las mitigaciones de exploits del compilador y del tiempo de ejecución al compilar software orientado a la red. Por ejemplo, estas son algunas de las mitigaciones que ofrece GNU Compiler Collection (GCC) y cómo habilitarlas:
- Protección contra desbordamiento de pila: habilítala con
-fstack-protector
. De forma predeterminada, esta opción protege las funciones con un búfer asignado a la pila de más de ocho bytes. Para aumentar la protección cubriendo las funciones con búferes de al menos cuatro bytes, añade--param=ssp-buffer-size=4
. - Aleatorización del diseño del espacio de direcciones (ASLR):
para habilitar esta opción, crea un ejecutable independiente de la posición con
-fPIC -pie
. - Protecciones de Glibc: habilita estas protecciones con
-D_FORTIFY_SOURCE=2
. - Protección de la tabla de desfase global (GOT): habilita esta función del cargador en tiempo de ejecución con
-Wl,-z,relro,-z,now
. - Errores de tiempo de compilación por falta de cadenas de formato:
-Wformat -Wformat-security -Werror=format-security
- Protección contra desbordamiento de pila: habilítala con
Inhabilita
CAP_SYS_MODULE
, que permite cargar y descargar módulos del kernel. Para inhabilitar esta función, edita el archivo/etc/sysctl.conf
e incluye el siguiente ajuste:kernel.modules_disabled = 1
Elimina la tabla de símbolos del kernel:
sudo rm /boot/System.map
Siguientes pasos
- Cuando la imagen esté lista para producción, crea una versión final de esa imagen personalizada e inclúyela en una familia de imágenes para poder gestionar fácilmente las versiones actualizadas de la imagen personalizada.
- Consulta cómo iniciar una instancia a partir de una imagen.