将虚拟磁盘手动导入 Compute Engine 后,您需要优化这些映像,以便它们能够使用 Compute Engine 环境专有的功能。
目录
安装 Compute Engine 访客环境
您必须先安装客机环境,然后才能使用 Compute Engine 的主要功能。要了解何时需要手动安装客机环境,请查看何时手动安装或更新客机环境。
请在手动导入现有映像后,在您创建的运行中虚拟机实例上安装访客环境。要执行这项安装工作,您可以使用您在导入映像前创建的用户账号通过 SSH 来访问该虚拟机实例,或者通过与串行控制台互动来访问该实例。
针对 Compute Engine 配置已导入的映像
您无需额外更改即可在 Compute Engine 中运行启动磁盘映像,但您也可以进一步优化该映像,使其在 Compute Engine 中以最佳方式运行,并且能够使用 Compute Engine 的全部功能。
修改
ntp.conf
文件,使其仅包含server metadata.google.internal iburst
Google NTP 服务器条目。将时区设置为 UTC:
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
要确保高性能的网络能力,请使用所推荐的以下网络配置:
- 使用 ISC DHCP 客户端。
- 将 DHCP MTU 设置为网络 MTU。Compute Engine DHCP 服务器会将此参数用作
interface-mtu
选项,大多数客户端都支持这种用法。如需详细了解网络 MTU,请参阅最大传输单元概览。 - 如果您不打算配置 IPv6 地址,请停用 IPv6。
移除永久性网络规则,防止实例记住 MAC 地址。例如:
rm -f /etc/udev/rules.d/70-persistent-net.rules
停用操作系统防火墙,除非您有 Compute Engine 防火墙规则不支持的特定要求。 Compute Engine 会为入站和出站流量提供防火墙。如需详细了解防火墙,请参阅防火墙规则概览。
为确保网络和磁盘维持高性能运作,请停用或移除
irqbalance
守护进程。此守护进程无法为虚拟机 (VM) 实例上的访客操作系统正确平衡 IRQ 请求。请改为使用访客环境中的脚本来正确平衡虚拟 CPU 的 IRQ 设置。配置对基础映像的 SSH 访问权限:
- 停用根 ssh 登录。
- 停用密码身份验证。
- 停用基于主机的身份验证。
- 启用严格的主机密钥检查。
- 使用
ServerAliveInterval
保持连接的开放状态。 从映像中移除 SSH 密钥,使其他人无法访问您映像中的公钥或私钥。请改用 Compute Engine 来管理对实例的访问权限。
修改
/etc/ssh/ssh_config
文件以使用以下配置: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
修改
/etc/ssh/sshd_config
文件以使用以下配置:# 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
在 Compute Engine 上配置和优化启动磁盘后,基于该启动磁盘创建一个映像,如此您便可以通过该映像的完全优化版本创建实例,而无需每次创建实例时都进行配置。
安全配置最佳做法
您应始终提供安全的操作系统环境,但在环境的安全性和可访问性之间是很难取得平衡的。容易遭到攻击的虚拟机会占用昂贵的资源。Google 强烈建议您的映像遵循以下安全最佳做法:
- 最大限度地减少默认安装的软件数量(例如,执行操作系统的最小安装)。
- 启用自动更新。
- 默认情况下,停用除 SSH、DHCP 和 NTPD 之外的所有网络服务。如果邮件服务器(如 Postfix)仅接受来自本地主机的连接,则可以允许其运行。
- 不允许除 sshd 之外的外部侦听端口。
- 安装 denyhosts 软件包,帮助防止 SSH 暴力登录攻击。
- 移除默认安装中所有不必要的非用户账号。
- 在
/etc/passwd
中,将所有非用户账号的 shell 设置为/sbin/nologin
或/usr/sbin/nologin
(具体取决于 nologin 在您的操作系统上的安装位置)。 - 在
/etc/shadow
中,将操作系统的密码配置为使用加盐 SHA512 算法。 - 设置和配置 pam_cracklib,检测密码是否为安全系数高的密码。
- 设置并配置 pam_tally,以在 3 次失败后锁定账号 5 分钟。
在
/etc/shadow
中,将根账号配置为默认处于锁定状态。请运行以下命令来锁定根账号:usermod -L root
添加以下行以拒绝
/etc/ssh/sshd_config
中的根登录:PermitRootLogin no
尽可能使用文件系统功能,以消除对 S*ID 位的需求并提供更精细的控制。
在编译面向网络的软件时,启用编译器并采用运行时漏洞缓解措施。例如,下面是 GNU 编译器集合 (GCC) 提供的一些缓解措施及其启用方式:
- 堆栈粉碎保护:使用
-fstack-protector
来启用此选项。默认情况下,此选项使用长度超过 8 个字节的堆栈分配缓冲区来保护函数。如要使用至少 4 个字节的缓冲区涵盖函数以增强保护,请添加--param=ssp-buffer-size=4
。 - 地址空间布局随机化 (ASLR):通过使用
-fPIC -pie
构建与位置无关的可执行文件来启用此选项。 - Glibc 保护:使用
-D_FORTIFY_SOURCE=2
来启用这些保护措施。 - 全局偏移表 (GOT) 保护:使用
-Wl,-z,relro,-z,now
来启用此运行时加载程序功能。 - 编译时发生的缺失格式字符串错误:
-Wformat -Wformat-security -Werror=format-security
- 堆栈粉碎保护:使用
停用允许加载和卸载内核模块的
CAP_SYS_MODULE
。如需停用此功能,请修改/etc/sysctl.conf
文件并添加以下设置:kernel.modules_disabled = 1
移除内核符号表:
sudo rm /boot/System.map
后续步骤
- 在您的映像已准备好正式使用后,请为该自定义映像创建最终版本,并将该映像加入到映像系列中,以便您能够轻松管理该自定义映像的更新版本。
- 了解如何从映像启动实例。