本节书摘来自华章出版社《虚拟化安全解决方案》一书中的第2章,第2.2节,作者[美]戴夫·沙克尔福(Dave Shackleford),更多章节内容可以访问云栖社区“华章计算机”公众号查看
2.2 配置VMware ESXi
今天,VMware有两种广泛使用的主要管理程序平台。旧版平台ESX大部分被新的ESXi(表示嵌入式/可安装的ESX)替代。ESX比ESXi有更大的占有率,在被认为恰当地加固之前,它需要大量的配置。多数企业组织已经迁移到ESXi,或正在迁移的过程中,因此,我们这里将关注更新的平台。锁定ESXi的多数配置控制都能应用于ESXi的第4版和第5版,我将尽力在合适的地方指出它们的不同。
2.2.1 给VMware ESXi打补丁
经常给你的管理程序平台打补丁应该被认为是最关键的安全操作之一。在VMware平台上发现了许多重大的漏洞,经常给你的系统打补丁是让它们不受伤害的最好方法。
有一些常用的系统打补丁的方法,但管理员应该意识到VMware仅为它自己的平台提供真正的补丁程序。换句话说,如果你已经有一个补丁管理基础设施,那么它可能对ESXi打补丁不管用。VMware提供了管理补丁的许多产品。但是,如果你在一个非常小的环境中工作,你可以在命令行使用脚本工具打补丁,这些内容我将在本章后面的“通过命令行打补丁”部分讲解。但是,多数组织希望有一个更具扩展性的解决方案。
VMware GO
在2011年,VMware收购了补丁管理提供商Shavlik,从此获得了它的技术,提供vCenter Protect和VMware GO产品。两者都是独立的产品,主要服务于中小型企业(SMB)市场。
VMware GO是基于云的服务,它使小型组织能够通过建立一个中央管理系统(例如管理员的工作站)削减他们的运营费用,中央管理系统通过与VMware云通信给主机和虚拟机扫描和打补丁。一旦登录,管理员可以通过IP范围、主机名、域名或组扫描他们的本地环境,向这些系统推送补丁。从那里,一个简单的内置服务台票务系统可被用于指定补丁,并给各种组或人更新任务。在GO库中一个完整的补丁管理程序看起来就像这样。
多数组织使用VMware更新管理器(VMware Update Manager,VUM)给ESXi系统打补丁。VUM可以使打补丁和更新过程自动化、简单化。使用VUM,你可以仅控制打补丁的操作周期的各个方面。
例如,VUM已经可以支持集群;所有集群成员均可以评估资源可用性,把主机转入维护模式打补丁(这表示所有虚拟机需要迁移到其他集群成员)。一旦完成资源评估,想打补丁的集群成员将处于维护模式,虚拟机将迁移到其他成员,你就可以开始打补丁。你可以给所有集群成员打补丁,或是仅用VUM给特定管理程序打补丁。在集群主机上,某些服务可以关闭或扔在一边。如果由于某些原因第一次打补丁失败,可以有计划地
重试。
在ESXi5版,VUM也可以从多个源下载补丁,过滤出特定的更新,使得只有与你环境相关的补丁被下载。VUM可以从ESX/ESXi 4.x升级到5.x,更新VMware虚拟设备(Virtual Appliance,VA)和一些第三方产品,虚拟机VMware产品的更新可以预先设定。
安装VUM和它的vCenter插件超出了本书的范围。斯科特劳所著的《精通VMware vSphere 5》(Sybex,2011)是个很好的资源。
1.?配置VUM
配置VUM是非常简单的,有许多明确的打补丁的最佳实践。第一步是定义补丁如何下载和使用。这里,你有两个选择:
通过互联网直连下载。
添加本地(内部)补丁存储库。从存储库,你可以提供补丁,将镜像更新到主机。应该以这种方式分发这些补丁和镜像库,以轻松地与主机通信,而不用跨广域网或较慢的网络连接,因为需要发送大量的数据。
选择共享库对大型、更加分布式的环境是最好的。一旦你制定了合理成熟的VMware平台的补丁过程,使用共享库是最安全的选择,因为它给你提供了更多补丁如何存储和分发的控制。另一个主要优点是你的vCenter系统不会持续地查询网上的VMware补丁库,当你有许多系统或一些系统根本不能访问互联网的时候,这特别有用。
为了建立共享库,你首先需要从vSphere安装媒体中运行VMware-UMDS.exe文件,安装更新管理器下载服务(UMDS)。然后你可以使用这个简单命令行工具下载所有补丁和更新到中央库,任何vCenter系统都可以访问它。
为了建立补丁下载或定义存储库、定义下载和使用补丁的任务计划,可按照以下步骤:
1)访问vCenter控制台。选择“解决方案和应用程序”,选择“更新管理器”,选择你的vCenter位置。
2)选择配置标签页(在面板的上面)。在左边的列上单击下载设置。结果如图2.2所示。
3)指定从哪里下载,这里你有两个选项:
单击“Direct Connection To Internet”单选按钮,然后在右边单击添加下载源,添加你想要的新的外部下载源(确保它是你信任的源)。
对于大型的更加分布的选项,单击“Use A Shared Repository”单选按钮,它允许你指定内部存储库。指定和验证你的共享库位置。
4)单击“Apply”按钮,或单击“Download Now”按钮,立刻得到补丁。
5)下一步是定期的任务计划下载。在左侧的列中单击下载任务计划。在任务计划更新下载窗口(见图2.3),你可以指定一个任务名和描述、更新的频率和时间,及电子邮件通知设置。
2.?定义基线配置文件
配置更新的下一步是定义细粒度的基线配置文件,包括关键和非关键的主机补丁(这些是预定义的)以及共用的虚拟设备的特定配置文件。维护一套ESXi镜像来完成更新也是非常明智的。它们中的每个也应该有一个定义的基线配置文件。
为了了解你得到的基线选项是什么,让我们看一个预定义的基线:
1)在屏幕上面更新管理器管理区选择“基线和组”标签页。你将在窗口中看到两个面板。左边的面板是基线列表,右边的面板是基线组的列表。在左侧面板中,你也注意到了上面的两个按钮,一个用于主机,另一个用于虚拟机/虚拟设备。默认情况下,你应该有两个默认的定义的主机基线:关键主机补丁和非关键主机补丁。
2)双击关键主机补丁基线,打开编辑基线窗口,第一屏提供了一些你能定义的选项:
因为是预定义的,所以基线名称和描述已经填充了数据。
因为是预定义的,所以基线类型也是不能修改的,但是如果需要的话你可以创建你自己的。有一些主机基线类型供选择:
主机补丁:这个基线用于给管理程序主机打补丁。
主机扩展:这个基线将安装或更新主机上的附加软件组件。
主机更新:这些基线包含一个镜像文件,它用于你想升级的从一个ESX或ESXi到另外一个版本的主机。
而且,你有另外一个称为单选VA基线的分类,即VA更新。这个类别把更新应用于虚拟设备,这些设备可以是VMware和VMware认可的特定第三方提供商。
3)在这个例子中,主机补丁基线类型已经被选中。请单击“下一步”。
4)下一个界面允许你选择补丁选项。你有两个选择项可选择:
固定的:这是一个严格定义的类型,它指定某些系列的补丁,仅当管理员从列表中添加或删除的时候才变更。这个选项需要更多的管理介入,但保证永远不会推送一个你不想要的补丁。建议大多数环境使用它,因为这样不会有任何不必要的风险。
动态的:动态补丁允许你指定某种补丁标准,VUM遵守这些标准,符合标准的新补丁被动态地添加到列表中。在某些环境中这可以加速打补丁,但你首先必须小心地测试。我建议这种设置仅用在这样的环境中,即速度更重要,且虚拟机管理程序配置是非常好理解的。而且,需要稍微高的风险容忍度,因为使用动态补丁多数可能出错。
关键补丁默认设置是动态的。使用这种补丁类型,你需要指定包含的标准,因此单击“下一步”。
5)动态基线标准截屏(图2.4)允许你指定补丁的标准,包括供应商、产品、及补丁严重程度和类型,及发布日期信息。完成后,单击“下一步”。
6)下一个界面允许你明确地排除某些补丁,为管理员提供了另一级别的粒度,控制推出什么补丁。单击“下一步”。
7)最后的配置页允许你在基线中包含额外的补丁,可能是一个或若干不满足之前指定的标准的。再次,这就是在动态补丁中允许更多的粒度。单击“下一步”,出现总结页,然后单击“完成”。
相当直观,不是吗?创建你自己的基线是简单的。右击左侧面板的任何地方,选择新基线。然后,你将看到我们刚才用过的相同的向导页面。但你将注意到对于每个不同的基线类型是有些不同点的。
对于主机固定补丁基线,你将仅从库中选择一个静态的补丁列表。
对于主机扩展基线,你将选择一个扩展列表更新。
对于主机更新基线,你将选择你想要用于更新的ESX或ESXi镜像文件。
这同样也适用于VA更新,仅你创建的供应商和特定产品的规则适用。对于虚拟机和虚拟设备,有三种预定义的基线(它们不能被编辑):
VMware工具更新以匹配主机。
虚拟机硬件更新以匹配主机。
虚拟设备(VA)更新到最新。
因此,你怎么样决定使用哪个选项?下面是一些建议:
对于多数关键的主机,需要严格控制配置的一致性,最好定义固定的主机补丁基线,每个补丁必须手动添加。
动态配置对于自动添加满足规则的新补丁到基线是有益的,但是如果没有足够的测试就部署,它们可以造成严重的破坏。动态基线的新过滤规则使控制包含哪个补丁变得容易,因此可以极大地简化较不重要主机的自动打补丁。
另一个合理的实践是定义多个补丁库,对特定镜像和补丁包的外部(例如VMware的网站)及本地库。
3.?定义基线组
下一个重要的实践是定义基线组。基线组到底是什么呢?简单!它们仅仅是你定义的可以同时应用的基线的组。例如,你可能有一个经常使用的定期动态打补丁的基线,但是你每月一次从固定的组中使用特定的补丁。这两个过程可以被结合到一个能够给你更多灵活性的基线组中。另一个选择是将主机更新与补丁相结合,还可以定义包含虚拟机或虚拟设备更新的混合组。你仅需要决定什么对你自己环境的各种主机组和虚拟机有意义。
为了定义基线组,遵从下面这些步骤:
1)登录到vCenter,转到“更新管理器管理”页面,单击上面的“基线和组”标签页。
2)在右侧的面板中,要么右击任何位置,选择“新基线组”,要么单击右上角的“创建”按钮。
3)新基线组向导打开后,你需要选择你想要的组类型——主机基线组或虚拟机和虚拟设备基线组。填写组名,单击“下一步”。
4)对于主机组,下一步是选择任何更新基线、补丁基线,最后是扩展基线。对于虚拟机/虚拟设备组,你将仅选择定义的更新基线选项。
5)当你选择这些(通过选择复选框或选择任何你想包含的基线旁边的单选按钮),你将在“准备完成”页面结束定义操作,在这里你可以单击“完成”按钮。最后的页面例子如图2.5所示,你可以看到它包含一个简单的主机基线组、关键和非关键补丁以及默认的安装基线更新。
4.?其他VUM设置
在VUM的配置页面,有许多你应该密切注意的设置:
网络连接 这里,你可以为客户设置VUM使用的连接端口,以及ESX和ESXi主机补丁库连接。你也可以设置补丁库的IP地址和主机名。
下载设置 包括本章之前“配置VUM”部分,这是你指定VMware URL的地方,从这里下载补丁和选择内部补丁库。你也可以配置代理设置或不需要验证访问的URL。
下载计划 这是你设置按照任务计划定期下载的地方。
通知检查计划 VUM将定期检查补丁更新和报警,你可定义这些任务计划以及任何你想收到的邮件通知。
虚拟机设置 为了保险起见,你可以在打补丁前对任何虚拟机生成快照以防你需要将它们回退。你也可以指定这些快照要保持多久。
ES主机/集群设置 在这部分,有许多需要考虑的选项。
首先,你可以选择在主机进入维护模式进行更新前是否关闭电源或休眠。你也可以选择什么都不做的选项,这表示虚拟机将必须在维护期间迁移到其他主机。
首先你可以禁止可移动媒体设备,它可能阻止主机进入维护模式。
对于集群设置,你可以选择暂时禁止某些特性,如分布式电源管理(Distributed Power Management,DPM)和容错功能,同时更新所有集群主机(如果你能这样做的话,建议这么做)。
主机和集群的可用选项如图2.6所示。
vApp设置 vApp是虚拟机组,它们由于特定目的连接在一起。一些虚拟应用组需要重启,以保持与主机或相互间的同步,VMware的智能重启能力使你能够在需要的时候,有选择地重启VAPP虚拟机。
5.?附加基线和组
一旦配置了VUM,建立了基线和基线组,需要将基线和组应用于主机和虚拟机。这是通过将它们应用到vCenter内特定对象来完成的。有两个你访问的地方可以应用VUM基线:
“主机和集群”视图用于添加基线到主机。你可以添加一个基线到数据中心、集群或单个主机。
“虚拟机和模板”视图用于添加基线到虚拟机。你可以添加基线到一个数据中心、文件夹或单个虚拟机。
对于任何一个视图,最简单的添加基线、获得补丁和开始更新的方法是使用更新管理器。遵循下面的步骤:
1)在上面选择“更新管理器”标签页。
2)一旦你进入“更新管理器”标签页,你将看到几个面板,包括添加基线、基线组和使用这些基线的任何对象具有的兼容状态的简单视图。为了添加基线或基线组,右击任何地方,选择附加或单击右上角的附加
链接。
3)附加基线或组向导出现(见图2.7)。在这里,选择任何定义的基线或组甚至是创建新基线都很简单。
选择基线和/或组,单击“附加”。你应该看到更新管理器界面反映了这些变更,如图2.8所示。
4)为了手动初始化一个合规性评估,你可以为任何vCenter对象返回主界面,单击右上角的“扫描链接”。
6.?分阶段和修复
现在,已经有了另外两个可用于给主机和其他系统打补丁的选项。第一个称为分阶段(staging),能够在打补丁之前,将补丁推送给虚拟机管理程序主机,这可能在真正安装补丁的时候节省时间。当主机在远程办公室或位于网络较慢的地方的时候,这是很方便的。
设置分阶段,遵循下面的步骤:
1)在窗口的右下方部分,单击“分阶段”。
2)当分阶段向导打开的时候,选择基线和主机,选择任何用于扩展和补丁的不适用情况,然后单击“完成”。
第二个选择是修复或立刻应用补丁。与分阶段很像,它可以这样完成,单击窗口右下方的“修复”按钮,然后选择基线和/或基线组、主机、除外情况、你想遵从的时间表。实际上,这个过程不能再简单了!
7.?通过命令行打补丁
对于那些仅有小型环境想通过命令行手动推送补丁的人,也有办法。下面是可以遵循的步骤:
1)在进行任何形式的更新之前,备份ESXi配置将是明智的!在ESXi直接控制台或通过SSH使用vicfg-cfg备份命令,或使用同样名称的vSphere CLI命令。下面的步骤显示的是vSpere CLI版本:
3)让主机处于维护模式:
4)现在,可以用演习选项运行更新,它将告诉使用者可能遇到的任何潜在错误或问题:
5)假设没有问题,继续运行更新:
6)你可能需要重启主机:
7)最后,将主机脱离维护模式:
就这样!在这个操作上有差异;例如,旧版的ESX和ESXi可能使用esxupdate和vihostupdate工具。
2.2.2 VMware ESXi的安全通信
总之,所有与ESXi服务器的通信均使用安全套接字层(SSL)或有数字证书的传输层安全(Transport Layer Security,TLS)加密。在安装期间,ESXi产生自签名VMware证书;换句话说,它不是可信的第三方认证授权(Certif?icate Authority,CA)或你自己的内部认证授权,而是VMware发行的用于进行基于SSL加密必需的机制。在安装以后,默认的证书和私钥位于下面的位置:
默认SSL证书:/etc/vmware/ssl/rui.crt
默认SSL私钥:/etc/vmware/ssl/rui.key
原则上,这些应该被更加可信的证书和私钥替换。创建可信的证书超出了本书的范围,但下面的链接描述如何使用OpenSSL创建它们:
使用vSphere CLI替换默认的私钥和证书是非常简单的:
1)在将虚拟机管理程序设为维护模式之前,记得将所有运行的虚拟机迁移到另一个ESXi主机上。在vCenter控制台或vSphere客户接口中右击ESXi服务器将系统设为维护模式,选择进入维护模式(见图2.9)。
2)接着,打开一个vSphere CLI控制台。
3)在命令提示符中,输入下面的命令,替换单个ESXi主机上的私钥和证书:
ssl_cert和ssl_key实际是这些文件将放置位置的“指针”,因此你需要使用完全准确的语法,太奇怪了。
在多数情况下,另一种方法完成这个操作甚至更容易些。用你新生成的rui.crt和rui.key简单地替换/etc/vmware/ssl目录中的文件。为此,执行下面的命令:
4)当做完这些的时候,将主机退出维护模式。
就是这样!还有其他方式完成它,包括使用HTTP PUT命令,但这是最简单和最合理的。
备份你的设置
记住ESXi本质上是一个临时的操作系统,意味着它仅运行在内存中。当系统突然重启(由于电源故障或其他问题),你不小的话就将失去这个配置。在每小时的第一分钟,ESXi运行/sbin/auto-backup.sh脚本,然后写当前配置到/bootbank/state.tgz,当它启动重新配置系统时,ESXi使用后者。为了完全确定你保持了这些设置,可以手动通过SSH登录运行脚本或使用命令行,执行下面的命令:
确保可信的证书在恰当的位置是帮助你防止中间人(Man-In-The-Middle MIMT)攻击的简单方法。这可以在vCenter管理控制台开启。一旦你有了正确的证书,登录vCenter,完成下面的步骤:
1)在窗口上面单击管理菜单,然后选择vCenter设置。
2)在左边的菜单中单击“SSL设置”。确保右边标签为“vCenter需要验证主机SSL证书”的复选框被选中。SSL设置界面如图2.10所示。
3)为了验证主机证书的ESXi指纹(VMware称它们为拇指指纹),登录到主机的直接控制台。按F2键访问系统自定义菜单。
4)选择“视图支持信息”,在右侧查找唯一指纹,如图2.11所示。
5)确保这些主机指纹与你的主机匹配,然后选择vCenter中主机旁边的“验证”复选框。
为了SSL更加安全,你应该考虑添加超时值。在ESXi上有两种类型的超时:
读超时应用于在TCP 443端口SSL握手进程已经完成的连接。
握手超时应用于没有完成SSL握手的系统。
两种超时都应该设置。为了改变这些设置,请完成下面的步骤:
1)登录到直接控制台或使用SSH访问ESXi命令解释程序,转到/etc/vmware/hostd目录,使用Vi文本编辑器打开conf?ig.xml文件。
2)查找段头标签,将看到段头下面的几行有各种配置参数,在下面输入如下两个新行:
文件信息基本如图2.12所示,这些设置的单位是毫秒,因此,上面的行将超时都设置为15秒,在多数环境中,这都是合理的值。如果你有网络延时或其他可能导致更长的握手时间的问题,你可能想增大这些值。
3)保存文件(按下Escape,然后输入“wq”)。
4)运行下面的命令,重启主机服务:
另一种与ESX/ESXi进行安全通信的方法是使用IPSec。这仅适用于主机运行在4.1及以上版本的情况,为了使用IPSec,你需要启动IPV6。为了启动IPv6,并通过vCenter添加一个地址,按下面步骤做:
1)选择一台ESX/ESXi主机,然后单击“配置”标签页,在左边选择网络连接。
2)然后在右侧单击“属性”。你将得到一个简单的弹出窗口。单击标签为“在这个系统上开启IPv6支持”的复选框,单击“OK”。
3)现在,需要重启主机,这表示需要首先将虚拟主机迁移。一旦完成,就可以为主机上各种网络连接适配器设置IPv6地址。返回配置页的网络部分。
4)对于每个vSwitch,单击“属性”。选择端口组,可以单击或双击“编辑”按钮,然后单击第二个标签页(IP设置)。现在应该能够配置一个或多个IPv6地址。
一旦设置了IPv6地址,就已经准备好配置IPSec了。IPSec可以通过vSphere CLI vicfg-ipsec命令配置。下面是你需要设置的参数:
配置IPSec的主机添加一个IPSec安全关联(SA)vCenter服务器的IPv6地址ESX/ESXi主机的IPv6地址IPSec模式,通常是传输安全参数索引(SPI),或SA标识符使用的加密算法SA的加密密钥使用的验证算法使用的验证加密密钥SA的唯一名称
看起来很多,当然它的确如此!下面是一个笔者为主机esx.abc.com配置简单传输模式SA的例子,使用aes128-cbc(AES 128位加密,使用密码块链接)SA加密、HMAC-SHA2验证加密和TestSA的SA名:
接下来,在创建了安全关联之后,应该为加密vSphere客户从管理服务器到主机通信建立安全策略。这也需要一个带有多个参数的vicfg-ipsec复杂命令行:
配置IPSec的主机添加一个IPSec安全策略vCenter服务器的IPv6地址ESX/ESXi主机的IPv6地址IPSec通信的源端口IPSec通信的目的端口加密的上层协议(通常是TCP)通信方向(在本例中,入站)这个策略采取的动作(ipsec)SP模式;应该匹配SA模式与策略关联的SASP的唯一名称
下面是上述命令的一个例子,笔者对主机esx.abc.com应用这一安全策略,使用相同的IPv6地址(需要在结束位置为单个IPv6主机添加/128子网掩码),对于TCP通信,设置进入端口是443,SP名是TestSP:
配置IPSec还有许多其他选项,包括允许IPSec像真正的通信过滤机制类似的配置选项(更像一个防火墙)。你应该找出在你的组织中运行得最好的选项;记住,如果错误配置了任何东西,它可以导致严重的问题,这是一个复杂的协议。
而且,需要在主机通信的vCenter服务器上建立IPSec。本章后面讲解Hyper-V的时候,将介绍一个Windows 2008 IPSec的例子。
2.2.3 在VMware ESXi上改变和删除默认设置
默认情况下,在ESXi平台许多服务随主服务后台进程hostd运行,主服务作为它们的代理。在某些情况下,可以关闭一些服务。
许多人选择关闭下面三个服务:
网络访问登录页
受管理对象浏览器
主机欢迎登录页
这些多少都是通过网络浏览器访问ESXi信息,它们默认是通过在浏览器中输入ESXi系统的管理接口的IP地址开启的。受管理的对象浏览器主要由vSphere软件开发工具箱(SDK)用来预读取主机的管理对象模型。登录页几乎总是可以被禁止而没什么影响。但是,受管理对象浏览器可能被各种程序所用,在禁止它之前应仔细地测试。
适用于任何列出的hostd服务的其他措施是强迫使用HTTPS而不是HTTP。这应该基于平台所在环境和你拥有的用例而被认真地考虑,因为HTTPS确实对性能有更大的影响,尽管在企业环境中通常不是重大影响。
使用V Center或VSphere客户端禁用这些服务以对受管理的企业环境产生最小的影响。确保首先测试通过!VMware建议在ESXi 5.x版本上不禁止网络访问登录页面,因为这可能使高可用性(HA)服务崩溃。
遵循下面的步骤关闭不需要的服务:
1)为了确定什么服务正在运行,通过SSH或在直接ESXi控制台执行下面的命令:
2)使用下面的命令禁止不需要的服务(对于ESX平台,使用vmware-vim-cmd替换vim-cmd)
网页访问登录页:vim-cmdproxysvc/remove_service"/ui" "httpsWithRedirect"
受管理对象浏览器:vim-cmdproxysvc/remove_service "/mob" "httpsWithRedirect"
主机欢迎登录页:vim-cmdproxysvc/remove_service"/" "httpsWithRedirect"
3)对于每个列出的服务,注意变量。基于服务,有几个已经配置了的选项。为了使用HTTPS,配置下面其中一项:
httpsOnly——强迫使用HTTPS,使用HTTP连接将不会得到响应。
httpsWithRedirect——重定向HTTP连接到适当的端口/资源。
4)设置将立刻有效;需运行/etc/init.d/hostd restart,然后运行/sbin/autobackup.sh脚本以确保它有效。
2.2.4 在VMware ESXi上开启运营安全
有一些支持服务可配置用于优化虚拟化运营。其中一些将在后面章节单独讲解(例如,syslog将在第7章讲解),但有两个在这里特别值得提到:
网络时间协议(Network Time Protocol,NTP) NTP是安全的关键支持服务,因为它在不同系统的事件间关联时间戳时提供了一种非常合理的方式。没有NTP,多个系统的登录数据(包括虚拟机、虚拟机管理程序、管理平台)就不能准确地连接在一起,重建事件和意外。
简单网络管理协议(Simple Network Management Protocol,SNMP) SNMP允许管理员监控环境中的系统配置和事件细节。对于SNMP,需要配置社区字符串(community strings),它标识环境中的查询和响应SNMP服务。许多人将SNMP社区字符串看作SNMP服务的共享密码,这是一个合理的近似。许多SNMP实现和产品使用的默认社区字符串是公钥和私钥。因为它们如此普遍,多数试图通过SNMP枚举或改变配置项的攻击者都会尝试它们。你应该有非常确定的计划修改它们!
NTP和SNMP都是安全的运营支持服务,但至关重要。NTP的配置总是心需的,而SNMP的配置取决于环境。
1.?配置NTP
在VMware平台上开启和配置NTP和SNMP实际上是相当简单的。为了在ESX或ESXi主机上启用NTP,最简单的方法是使用有vCenter的vSphere客户端:
1)登录到vCenter,访问“详细信息”→“主机和集群区”。
2)选择一台主机,然后在上面单击“配置”页。单击左侧的“安全概要”链接,显示“服务和防火墙”设置。
3)单击“服务”列表旁边的“属性”链接。你应该看到一个NTP后台程序的入口。高亮这个入口,然后单击右下角的“选项”按钮。
将看到NTP后台程序的选项界面。有两种可用的选项类型可供选择,默认界面为通用(见图2.14),允许启动后台程序和选择将来如何启动它(自动或仅当特定端口提前开启时)。
对于多数企业,NTP后台程序应该与主机一起启动和停止,但如果主机处在DMZ中或面向公众的子网中,可以选择随打开和关闭端口启动和停止。
4)单击“开始”按钮现在就启动后台程序,或可以在添加NTP服务器之后启动它。
5)选择NTP后台程序设置的第二个类型,对应标题“NTP设置”。这里其实只有一个选项,也就是添加NTP服务器,从这个服务器获得ESX/ESXi主机时间。单击“添加”按钮,输入一个NTP服务器的IP地址或主机名,单击OK完成。你将看到与图2.15类似的界面。
一个好的做法是添加至少三个NTP服务器。有许多的外部时间服务器可选,但一个好的可靠时间服务列表(对在美国的人适用)可在NIST上找到:
6)如果NTP后台程序已经启动了,可以单击“重启NTP服务以应用更改”按钮,然后单击“OK”。
如果你在添加NTP服务器之前没有在第4步启动服务,再次单击左侧的“通用”类型,然后在单击“OK”之前单击“开始”。
7)当回到“安全概要配置”界面的时候,注意也可以在标准服务选项下方配置防火墙端口和认可的服务。当单击防火墙属性的时候,也可以通过在右下角选择NTP后台程序和单击“选项”按钮启用NTP后台程序。
通过命令行启用NTP也是很简单的,即使用vicfg-ntp命令!下面是操作步骤:
1)首先,访问vSphere CLI,添加服务器:
2)为想要添加的每个NTP服务器重复上面的步骤。
3)然后,在主机上启动NTP服务,如下:
这就是ESXi主机上远程命令行控制NTP服务的步骤。对于ESX主机,语法相似,除了用命令esxcfg-ntp替换。
2.?配置SN MP
为了在ESX和ESXi主机上配置SNMP,最可靠和简单的方法是在vSphere命令行使用vicfg-snmp脚本。你也需要确保SNMP端口(UDP161)在ESX/ESXi主机上打开。
1)运行下面的命令确定主机上SNMP是否启用:
将得到SNMP代理是否启用(0或1)和SNMP使用的端口的信息。
2)为了检查SNMP端口是否启用,需要检查主机上防火墙的配置。这可以使用vSphere客户端或ESXi5主机的esxcli命令来完成。
为了使用vSphere客户端,连接到主机或vCenter,导航到“主机和集群”区并选择主机。在右侧面板单击“配置”页,然后选择左边列表中的“安全概要”链接,查看防火墙部分。如果端口是打开的,你应该看到SNMP服务器或主机上进来(DUP端口161)和潜在的流出(UDP端口162)的snmpd列表。如果它们没有列出,单击“属性”链接,在“防火墙属性”窗口找到同样名字的入口,单击旁边的选择框,然后单击“OK”(见图2.16)。
从命令行检查防火墙状态,可以在vSphere CLI中使用esxcli命令如下:
3)在提示输入密码之后,能得到一个防火墙识别的服务和它们的状态(启用/禁止)。为了使用esxcli命令启用防火墙服务,运行下面的命令(当然有点复杂):
这个命令将在ESXi防火墙中启用已知的SNMP规则(通过选项“-e 1”)。
4)一旦打开了防火墙端口,服务已经启用,可以使用vicfg-snmp命令启用和配置SNMP服务。使用下面的命令启动SNMP服务(如果没有运行的话):
这个命令将在ESXi上运行,但对于ESX系统你需要添加与SNMP服务相关的社区字符串:
如图2.17所示。
当没有虚拟机管理程序安全控制的时候,另一个在vSphere基础设施中配置SNMP的地方就是vCenter自身。在这里你能控制用于外部SNMP接收器和vCenter间通信的社区字符串,还能控制用于发送SNMP报警的端口和URL。为了配置这些设置,应登录到vCenter,在上面选择“管理”菜单,然后选择“vCenter服务器设置”菜单项。在新出现的窗口中单击SNMP选项,将看到一个SNMP接收器列表,可以配置它们的URL、端口和共享字符串,如图2.18所示。
确认已从VMware下载中心下载与vCenter和ESX/ESXi相关的任何管理信息基础(Management Information Base,MIB)文件。
2.2.5 在VMware ESXi中保护和监控关键配置文件
ESXi主机上有大量从安全配置角度被认为是非常关键的文件:其中一些本质上是静态的,随着时间推移保持一致,直到保存系统更改的时候;另一些本质上更加容易变化,经常改变日期和时间戳,一些文件大小也会发生变动。可监控的基础文件列表可以在https:// or IP>/host上找到。通常需要认证才可获得这个列表。这些文件没有特定的与之相关的目录属性,因此不能准确识别它们在ESXi文件系统的位置。但是可以找到它们,我们不需要监控文件的完整性,因为仅仅需要指定/host/语法,就像在这个列表中看到的那样。
下面是一些附加的文件,它们某种程度上基本保持不变,仅当系统有意更新的时候而改变。这些文件非常重要,应该监控它们的完整性且跟踪它们:
其他需要跟踪的重要文件包括在/etc目录中与安全相关的配置文件,如下所示:
还有许多文件被认为是ESXi的/host列表非常重要的一部分,但是会经常更新,这导致修改日期改变。但这些文件的大小不应该经常变化。它们是:
最后,在/host中列出了一些文件,它们经常改变,按照通常的规则监控非常困难。因为它们是重要的日志文件,你应该认识它们,但是日志文件几乎不会一直保持不变:
因此,既然已经定义了可能想监控完整性的文件,但是如何获得并且监控它们呢?在ESXi系统上最简单的方式是使用vSphere CLI下载这些文件到一个可信的存储位置,然后使用Windows或其他系统工具对它们进行散列操作(hashing)。
下载文件的命令是简单的:
一旦这些文件被保存在中心位置,可以使用常用的md5sum或sha1sum工具进行快速的完整性检查。后者实际上是ESXi系统默认的可运行命令,但通常先下载这些文件,然后用其他方法运行散列命令。
仅仅像下面一样运行可执行命令:
Windows版的散列工具有许多,但一个已被验证可行的Windows sha1sum库可以从GnuPG (ftp://ftp.gnupg.org/gcrypt/binary/sha1sum.exe)下载。
这不是最有效的方法,整个过程脚本化更有意义,创建批处理脚本是很简单的。
2.2.6 在VMware ESXi上保护本地用户和组
ESX和ESXi平台有本地用户,它们可以从本地命令行访问(使用ESX控制台或ESXi直接控制台用户接口,或DCUI)或通过使用远程工具(SSH是一个最常用的工具)。这些用户列在系统的/etc/passwd文件中。与这些用户相关的文件的密码列在文件/etc/shadow中,正如你在任何现代UNIX/Linux平台上期望的那样。在ESX和ESXi管理程序系统上,有四条你应该遵守的与本地用户相关的安全指南:
1)尽可能限制系统上本地用户的数量。
2)只要可能限制全能根账户的使用。
3)实现本地密码的复杂和重复策略。
4)如果可能,实现活动目录认证。
1.?限制本地用户
对于vSphere 4.x和5.x系统,系统上有一小部分本地用户。下面的用户在多数环境中是默认存在的:
root:根用户是系统中最强大的管理员账户。
vpxuser:vpxuser账户是当连接到(然后被管理)VMware vCenter管理平台的时候,每个ESXi主机上创建的非常重要的用户。
dcui:直接控制台用户接口(Direct Console User Interface,DCUI)账户是数据中心内系统本地控制台的一个特权账户。
daemon:后台程序账户是一个“捕获所有”ESXi服务的账户,是非交互账户。
nfsnobody:如果需要,nfsnobody账户可被配置为NFS存储的代理用户。在旧版的ESX和ESXi上,这个账户名为vimuser。
现代ESXi平台的组数量也比之前ESX和ESXi版本的数量少很多。根用户组仅包括根用户,后台程序组仅包括后台程序用户。users和nfsnobody组默认是空的。
除了nfsnobody账户之外,所有ESXi的默认账户都是必需的。关键在于不要添加任何新的账号,直到它们真正需要!ESX平台的服务控制台提供了控制特权使用的标准Linux命令(例如su和sudo),但是ESXi仅提供了su。总之,在系统上,交互用户账号越少越好。
在ESXi系统上,添加、删除、修改本地用户有许多方法。首先,你可以检查看看有什么用户。这可以用下面的步骤完成:
1)从本地DCUI或通过SSH,仅仅输入cat /etc/passwd,所有本地用户就都列在这里了,如图2.19所示。
2)用下面的一种方法获取用户和组的信息:
应用vSphere CLI,可以列出所有本地组,以及每个组中的用户,使用下面的命令:
另一种仅列出本地用户和它们的全名、用户ID(User ID,UID)数量,以及判断它们是否具有脚本访问(0或1)的方法如下:
最后一种选择,可以使用vSphere客户端直接连接ESXi主机。一旦连接后,在右侧选择“本地用户和组”。在这个面板中你有两个视图选项卡,一个是用户,另一个是组。双击用户或组的任何一个将进入编辑界面,这里你可以修改属性、设置、密码和组关系。用户编辑界面如图2.20所示。
也可以通过vSphere CLI管理用户(记住:–username参数指的是ESXi主机的admin用户,不是正编辑的本地用户)。
添加一个新的本地用户,运行下面的命令:
删除用户和组,vicfg-user语法类似。为了删除一个用户,运行下面的命令:
修改用户也可以使用vicfg-user命令实现,像下面这样添加新参数,将操作参数改为modify:
2.?限制本地根账号
在ESXi主机上保护本地用户的第二个主要的步骤是尽可能地限制本地根账号。对于ESX来说,使用sudo命令和/etc/sudoers文件完成非常容易,在文件/etc/sudoers中明确定义要限制的用户账户和组。遗憾的是,在最近版本的ESXi上并没有sudo,但有两个可用的
选择:
开启lockdown模式,它限制了除vCenter之外的所有远程访问,也可用本地访问禁止lockdown模式;
在/etc/ssh/sshd_conf?ig文件中限制SSH根登录。
我们将讲解这两个过程。
使用者可以很容易地在添加一个主机到vCenter中的过程中,启用lockdown模式,如
图2.21所示。
也可以使用vCenter以下面的方式启用lockdown模式:
1)选择库区域,然后选择主机和集群,最后选择一个特定的ESXi主机。
2)在右侧面板中单击“配置”页,然后在左侧选择“安全概要”链接。
3)在这里,向下滚动到lockdown模式类别,单击“编辑”链接。一个小窗口将弹出,里面有一个启用lockdown模式的复选框。
最后一个选项是在主机上使用本地DCUI控制台,在控制台中选择“配置Lockdown模式”,然后当窗口出现的时候,选择“启用Lockdown模式”,如图2.22所示。
尽管这样并不会真正撤销所有根用户对主机的访问,但是它完成了同样的目标——限制管理员访问权限。
另一个方式,对多数Linux用户来说更熟悉,是在配置文件/etc/ssh/sshd_conf?ig中限制SSH根用户登录。用Vi编辑器打开这个文件,然后滚动到读取PermitRootLogin的行,确保设为no,如图2.23底下一行所示。
最后一步是创建和增强一个策略,必须使用定期登录,然后使用su变更到根用户。这会在文件/scratch/log/auth.log和/scratch/log/shell.log中产生一条日志信息。这些相同的日志也会镜像在/var/log/auth.log和/var/log/shell.log中,日志将在第7章中更深入讲解。
3.?实现和增强密码策略
本地用户控制的第三个关键方面是增强密码策略。对于ESXi,建立和修改密码策略是相当简单的。ESXi使用Linux可插拔验证模块(Pluggable Authentication Module,PAM)系统的修改版本,它允许细粒度地对最常见的配置选项进行控制。下面的内容可以很容易地设置:
密码输入重试:一个用户在ESXi控制台被禁止访问之前,输入错误密码的次数。
复杂度:有四种字符类型用于在PAM中定义密码,它们是大写字母、小写字母、数字和特殊字符、感叹号和其他标点符号。你可以根据使用的字符类型的数量定义密码需要多少字符。
为了修改这些配置,修改文件/etc/pam.d/system-auth-generic (ESXi 4.x)或/etc/pam.d/passwd (ESXi 5.x)。一旦文件打开,查找下面行:
下面讲述如何分解这一行,“retry = 值”表示在用户被禁止访问之前,容忍的密码输入错误的尝试次数。默认值是3,这对于多数组织来说都是合理的。下一部分,“min=A, B, C, D, E”需要花点时间理解。下面是这些位每个代表的意思:
A:仅使用一种字符类型的密码需要的最小字符数量(默认是8)。
B:使用两种字符类型的密码需要的最小字符数量(默认是8)。
C:密码需要的最小字符数(默认是8)。
D:使用三种字符类型的密码需要的最小字符数量(默认是7)。
E:使用所有四种字符类型的密码需要的最小字符数量(默认是6)。
需要注意的一个关键点是,对字符类型计数来说(这样有意义,因为人们可能会尝试使用像Password这样糟糕的密码)密码的第一个和最后一个字符不计数。
因此,设置最优安全密码策略的最佳方法是什么呢?下面是笔者推荐的,这通常也是经得起推敲的:
一些人可能会想这看起来有点严酷。遗憾的是,当使用较宽松的标准时,密码相当容易猜测和破解。正如前面提到的,首先应该限制本地账号,仅留下根账号和每个管理员用的一个“定期”用户账号。这些所有账号都应该被认为是非常重要的账号,那么更加严格的密码策略将有助于防止未授权的访问。
4.?实现活动目录认证
控制用户访问和与ESXi主机交互需要考虑的第四个方面是实现活动目录认证和授权。启用活动目录认证应该是强制实行的,多数审计和安全团队将要求看到这一项。这可以极大地简化ESXi主机的管理,尤其是在大型、复杂环境下有多个管理的情况。AD的好处是能从中心AD组中添加和删除管理用户,这比登录到每个ESXi平台,进行用户相关的修改要简单很多。在某些情况下,最简单的解决方案也是最安全的,这非常有效!
在启用活动目录之前,确认完成下面的预备步骤:
一个特殊的命名组ESX Admins,必须在活动目录中被创建。它必须包含所有你想用于访问主机的用户账号;
NTP应该开启,时间应该同步到活动目录域控制器相同的服务器时间;
一般来说,每个虚拟机管理程序主机的DNS应该能够解析域控制器和域;
ESXi平台应该有与它们要认证的域控制器相同的域前缀。
一旦完成了这些步骤,可以通过vSphere客户端配置活动目录认证,使用客户端直接连接到vCenter或主机。在vCenter中,使用者需要导航到库部分,选择“主机和集群”,然后选择一个特定的主机。一旦选择了主机,在右侧面板中选择“配置”页,然后从左侧的列表中选择“认证服务”,能看到在这个部分有两个列出的选项,即目录服务配置和域设置。这两个都可以通过在右上角单击“属性”链接进行编辑。然后按照下面的步骤进行:
1)从第一个下拉菜单中选择“活动目录”。
2)在域设置部分,输入主机将要加入的域,还可以选择复选框,使用vSphere认证代理。然后输入代理服务器的IP地址。
输入代理服务器是可选的,但是这是一个非常好的功能,因为它允许主机连接域,而不在它们的配置中使用或存储认证信息。代理可以与vCenter认证信息相关联,然后用域服务处理所有认证。
3)最后,单击“加入域”。如果输入了vSphere认证代理详细配置信息,那么主机将尝试连接它,并且通过现有的认证信息。否则,按提示输入认证信息,添加主机到域中。这些配置选项如图2.24所示。
另外一个与vSphere认证代理通信的安全方式是导入一个数字认证到ESXi主机。这使得ESXi主机和代理之间的通信管理起来更加简单,而不用输入令人头疼的认证信息。按照下面的步骤:
1)在主认证服务配置界面右上角单击“导入认证”。
2)按要求输入代理的IP地址和认证文件的路径。
另一个方式是使用vicfg-authconf?ig vSphere CLI命令在一个特定的ESXi主机上配置活动目录成员。
1)运行下面的命令:
2)按提示输入ESXi主机密码。输入密码,然后你将看到“成功加入<域>”的消息。
3)为了验证现在主机已经是AD域的一部分,可使用下面的命令:
2.2.7 锁定对虚拟机管理程序控制台的访问
除了执行lockdown模式(在之前“限制本地根账户”章节中讲述的),通常有两种方式限制对ESXi控制台的访问
配置ESXi内建防火墙的规则;
使用在文件/etc/security/access.conf中修改TCP包装器的功能。
已经讲解的DCUI命令行访问(通过主机接口开启或关闭)和远程命令行连接的SSH访问也是要考虑的非常重要的事情。
1.?配置ESXi防火墙
通常防火墙规则和服务的关键是相当简单的——仅允许需要的那些服务,没有更多了。ESXi防火墙默认设置是安全的配置。要确保仅在需要的时候,添加新的服务,随着时间推移定期评估防火墙设置,确保一切都井然有序。
在ESXi版本5中,表2.1中列出的端口默认都是打开的。
有两种方式有效管理ESXi主机的防火墙规则。第一个是直接通过vSphere客户端或通过vCenter,这是最简单的控制ESXi主机上已知服务的方法。但是,这种方法有个重大缺陷:没办法定义用户服务!你可以在本地真正的控制台命令行或通过SSH定义。
为了通过GUI配置防火墙,使用vSphere客户端登录主机或vCenter。导航到主机的配置页面(在vCenter中,首先到库部分的主机和集群)。按照下面的步骤做:
1)在左边菜单列表中单击“安全概要”链接,在可用的选项中向下查找直到找到防火墙部分,单击这个部分的右侧属性链接。防火墙属性界面打开,如图2.25所示。
到许多定义的服务列在这里。可以看到域服务相关的TCP和UDP端口,以及是否开启流入和或流出。如果服务名左边的框被选中,那么服务是开启的。
可以选中一些服务,然后单击右下角的“选项”按钮。通常单击它使你能够配置与服务相关的附加选项和操作,例如在主机上它如何启动和停止。
2)选中任何你想启用的服务的复选框,或禁止你不想启用的(但是要小心)。
也可以单击任何一个服务的防火墙按钮。这允许指定与服务通信的IP地址或子网,提供了更细粒度的控制对主机和服务访问的控制(参考图2.26)。
3)当完成启用和禁止服务和端口的时候,单击“OK”完成配置本地主机防火墙。
4)可以自动为一些服务打开端口,在安全概要配置区的服务部分中启用它们。
使用本地主机或SSH,配置自定义服务或设置防火墙访问,可以按照下面的步骤进行:
1)登录到本地DCUI或使用SSH访问主机控制台命令行。转换到/etc/vmware/f?irewall目录中,使用文本编辑器打开service.xml文件。你应该看到许多XML标签段,看起来像图2.27所示。
2)为了添加新服务定义,先退出service.xml文件,再在同一目录中添加一个新的XML文件。下面是文件看起来的样子的例子:
服务ID号和名称应该反映你自己的服务,如同规则ID、方向、协议、端口类型(源或目的)一样相当简单。和标签是可选的,如果你想选择一个端口范围而不是单一端口。
3)一旦你完成添加你想要的这些端口和服务组合,确保文件的最后一行是?igRoot>,然后保存和退出。
4)现在,需要通知ESXi系统变更,输入下面的命令刷新防火墙规则:
这么做的关键在于现在可以在vSphere客户端中看见防火墙规则了。可以看到这样的一个例子如图2.28所示,一个新服务标记为SybexTest。
2.?使用/ETC/SECURITY/ACCESS.CONF文件控制SSH访问
第二种控制对ESXi平台访问的方法是创建常规用户账户,用/etc/security/access.conf文件控制这个账户对平台的访问。ESXi将默认拒绝这个文件中明明确定义的任何人的访问。
第一步是创建一个新用户,这之前已经讲过,确保这个用户授予命令行访问权限。接着,你可以以两种方式之一授权用户访问权限。第一种方式是简单的,编辑/etc/security/access.conf文件,添加下面的行:
对于用户戴夫,添加+:dave:ALL,保存文件。现在你可以通过SSH使用常规账户而不是根用户访问系统。
为了通过远程命令行完成相同的功能,在vSphere CLI中使用vicfg-user命令,输入下面的命令: