Configura manualmente los discos importados


Después de importar de forma manual un disco virtual a Compute Engine, debes optimizar esas imágenes para que puedan usar funciones específicas del entorno de Compute Engine.

Contenido

Instala el entorno invitado de Compute Engine

Debes instalar el entorno invitado para poder usar las funciones clave de Compute Engine. Para saber en qué situaciones debes instalar o actualizar manualmente el entorno invitado, consulta este artículo.

Instala el entorno invitado en la instancia de VM en ejecución que creaste luego de importar de forma manual la imagen existente. Para realizar la instalación, accede a la instancia de VM mediante SSH con una cuenta creada antes de importar la instancia o a través de la interacción con la consola en serie.

Configura tu imagen importada para Compute Engine

Puedes ejecutar la imagen de disco de arranque en Compute Engine sin realizar cambios adicionales, pero también puedes optimizarla más para que se ejecute de manera óptima en Compute Engine y tenga acceso a todas las funciones del servicio.

  • Edita el archivo ntp.conf para que incluya solo la entrada del servidor Google NTP server metadata.google.internal iburst.

  • Establece la zona horaria según como UTC:

    sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
  • Para garantizar la capacidad de red de alto rendimiento, usa la siguiente configuración de red recomendada:

    • Usa el cliente ISC DHCP.
    • Establece el DHCP MTU en la MTU de red. El servidor DHCP de Compute Engine entrega este parámetro como la opción interface-mtu, que la mayoría de los clientes respeta. Para obtener más información sobre las MTU de red, consulta la descripción general de la unidad de transmisión máxima.
    • Si no planeas configurar direcciones IPv6, inhabilita IPv6.
    • Quita las reglas de red persistentes para evitar que la instancia recuerde direcciones MAC. Por ejemplo:

      rm -f /etc/udev/rules.d/70-persistent-net.rules
    • Inhabilita el firewall del sistema operativo, a menos que tengas requisitos específicos que no sean compatibles con las reglas de firewall de Compute Engine. Compute Engine proporciona un firewall para el tráfico de entrada y de salida. Para obtener más información sobre los firewalls, consulta Descripción general de las reglas de firewall.

  • Para garantizar una red de alto rendimiento y capacidad de disco, inhabilita o quita el daemon irqbalance. Este daemon no equilibra de forma correcta las solicitudes de IRQ para los sistemas operativos invitados en instancias de máquina virtual (VM). En su lugar, usa las secuencias de comandos que forman parte del entorno invitado para equilibrar de forma correcta la configuración de IRQ en las CPU virtuales.

  • Configura el acceso mediante SSH a la imagen base:

    • Inhabilita el acceso mediante SSH con permisos de administrador.
    • Inhabilita la autenticación de contraseña.
    • Inhabilita la autenticación basada en host.
    • Habilita la verificación estricta de la clave de host.
    • Usa ServerAliveInterval para mantener las conexiones abiertas.
    • Quita las Llaves SSH de tu imagen para que otros usuarios no puedan acceder a las claves públicas o privadas de tu imagen. En su lugar, usa Compute Engine para administrar 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 él para poder crear instancias basadas en una versión optimizada por completo de la imagen en lugar de tener que configurar cada instancia que creas.

Configura las recomendaciones de seguridad

Siempre debes proporcionar un entorno de sistema operativo seguro, pero puede ser difícil lograr un equilibrio entre un entorno seguro y accesible. Las máquinas virtuales que son vulnerables a los ataques pueden consumir recursos caros. Google recomienda que las imágenes cumplan con las siguientes prácticas 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.
  • De forma predeterminada, inhabilita todos los servicios de red, excepto SSH, DHCP y NTPD. Puedes permitir que se ejecute un servidor de correo electrónico, como Postfix, si solo acepta conexiones del localhost.
  • No permitas puertos de escucha externos, excepto sshd.
  • Instala el paquete denyhosts para ayudar a prevenir los intentos de acceso SSH forzados.
  • Elimina todas las cuentas de usuario no estándar innecesarias de la instalación predeterminada.
  • En /etc/passwd, configura la shell de todas las cuentas de usuario no estándar como /sbin/nologin o /usr/sbin/nologin (según la ubicación donde tu SO instaló nologin).
  • Configura tu SO para que use SHA512 en las contraseñas de /etc/shadow.
  • Establece y configura pam_cracklib para obtener contraseñas seguras.
  • Establece y configura pam_tally para bloquear cuentas durante 5 minutos después de 3 fallas.
  • En /etc/shadow, configura la cuenta raíz para que se bloquee de forma predeterminada. Ejecuta el siguiente comando para bloquear la cuenta raíz:

    usermod -L root
  • Deniega la raíz en /etc/ssh/sshd_config mediante la inclusión de la siguiente línea:

    PermitRootLogin no
  • Crea perfiles de AppArmor o SELinux para todos los servicios predeterminados en ejecución orientados a la red.

  • Si es posible, usa las funciones del sistema de archivos a fin de prescindir del bit S*ID y proporcionar un control más detallado.

  • Habilita las mitigaciones de compilación y de explotación del entorno de ejecución cuando compilas software orientado a la red. Por ejemplo, estas son algunas de las mitigaciones que ofrece GNU Compiler Collection (GCC) y los pasos para habilitarlas:

    • Protección contra el desborde de pilas: Habilítala con -fstack-protector. De forma predeterminada, esta opción protege las funciones con un búfer de pilas asignadas mayor a ocho bytes. Si quieres aumentar la protección mediante la cobertura de funciones con búferes de al menos cuatro bytes, agrega --param=ssp-buffer-size=4.
    • Aleatorización del diseño del espacio de direcciones (ASLR): habilítala mediante la creación de un ejecutable independiente de posición con -fPIC -pie.
    • Protecciones de glibc: Habilítalas con -D_FORTIFY_SOURCE=2.
    • Protección de Global Offset Table (GOT): Habilita esta función del cargador del entorno de ejecución con -Wl,-z,relro,-z,now.
    • Errores en tiempo de compilación para strings de formato faltantes: -Wformat -Wformat-security -Werror=format-security.
  • 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 la siguiente configuración:

    kernel.modules_disabled = 1
  • Quita la tabla de símbolos del kernel:

    sudo rm /boot/System.map

¿Qué sigue?