网站搜索

设置 Hadoop 先决条件和安全强化 - 第 2 部分


Hadoop集群构建是一个逐步的过程,该过程从购买所需的服务器、安装到机架、布线等以及放置在数据中心开始。然后我们需要安装操作系统,如果集群规模很大,可以在实时环境中使用kickstart来完成。安装操作系统后,我们需要准备用于 Hadoop 安装的服务器,并且需要根据组织的安全策略准备服务器。

要求

  • 在 CentOS/RHEL 7 上部署 Hadoop 服务器的最佳实践 – 第 1 部分

在本文中,我们将介绍 Cloudera 推荐的操作系统级先决条件。此外,我们还根据生产服务器的CIS 基准强调了一些重要的安全强化技巧。这些安全加固可以根据需求而有所不同。

设置 Cloudera Hadoop 先决条件

在这里,我们将讨论 Cloudera 推荐的操作系统级先决条件。

1. 禁用透明大页

默认情况下,透明大页 (THP) 在 Linux 计算机中启用,与 Hadoop 工作负载交互效果较差,并且会降低集群的整体性能。因此,我们需要使用以下 echo 命令禁用此功能以获得最佳性能。

echo never > /sys/kernel/mm/transparent_hugepage/enabled 
echo never > /sys/kernel/mm/transparent_hugepage/defrag 

2. 更改虚拟机交换性

默认情况下,大多数 Linux 计算机的 vm.swappiness 值为 3060

sysctl vm.swappiness

不建议 Hadoop 服务器使用较高的 swappiness 值,因为它可能会导致长时间的垃圾收集暂停。并且,通过较高的 swappiness 值,即使我们有足够的内存,数据也可以缓存到交换内存中。降低swappiness值可以使物理内存包含更多的内存页。

sysctl vm.swappiness=1

或者,您可以打开文件 /etc/sysctl.conf 并在末尾添加 "vm.swappiness=1"

vm.swappiness=1

3.禁用防火墙

每个 Hadoop 服务器都将负责其上运行的多个服务(守护进程)。所有服务器都将出于各种目的而频繁地相互通信。

例如,Datanode将每3秒向Namenode发送一次心跳,以便Namenode确保Datanode处于活动状态。

如果所有的通信都通过防火墙发生在不同服务器上的守护进程之间,这将给 Hadoop 带来额外的负担。因此,最佳实践是禁用集群中各个服务器中的防火墙。

iptables-save > ~/firewall.rules
systemctl stop firewalld
systemctl disable firewall

4.禁用SELinux

如果我们保持SELinux启用,则会在安装Hadoop时导致问题。由于Hadoop是集群计算,Cloudera Manager将到达集群中的所有服务器来安装Hadoop及其服务,并在需要的地方创建必要的服务目录。

如果启用 SELinux,它将不会让 Cloudera Manager 根据需要规则安装。因此,启用 SELinux 将成为 Hadoop 的障碍,并且会导致性能问题。

您可以使用以下命令检查SELinux的状态。

sestatus

现在,打开 /etc/selinux/config 文件并禁用 SELINUX,如图所示。

SELinux=disabled

禁用 SELinux 后,您需要重新启动系统才能使其激活。

reboot

5.安装NTP服务

Hadoop集群中,所有服务器应该时间同步以避免时钟偏移错误。 RHEL/CentOS 7内置了chronyd用于网络时钟/时间同步,但Cloudera建议使用NTP

我们需要安装NTP并配置它。安装后,停止“chronyd”并禁用。因为,如果服务器同时运行 ntpdchronyd,Cloudera Manager 会考虑 chronyd 进行时间同步,那么即使我们通过ntp来同步时间。

yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd

6. 禁用 Chronyd

正如我们上面提到的,我们不需要 chronyd 处于活动状态,因为我们使用 ntpd。检查chronyd的状态,是否正在运行停止和禁用。默认情况下,chronyd 会停止,除非我们在操作系统安装后启动它,只是为了安全起见,我们需要禁用它。

systemctl status chronyd
systemctl disable chronyd

7. 设置FQDN(完全限定域名)

我们必须使用FQDN完全限定域名)设置主机名。每个服务器都应该有一个唯一的规范名称。要解析主机名,我们需要配置 DNS 或 /etc/hosts。在这里,我们将配置/etc/hosts

每台服务器的 IP 地址和 FQDN 应输入到所有服务器的 /etc/hosts 中。然后只有 Cloudera Manager 可以通过其主机名与所有服务器进行通信。

hostnamectl set-hostname master1.linux-console.net

接下来,配置/etc/hosts文件。例如: – 如果我们有 5 个节点集群,其中有 2 个主节点和 3 个工作节点,我们可以按如下方式配置 /etc/hosts

8.安装Java开发工具包(JDK)

由于HadoopJava组成,因此所有主机都应该安装适当版本的Java。这里我们将有OpenJDK。默认情况下,Cloudera Manager 将安装OracleJDK,但 Cloudera 建议安装OpenJDK

yum -y install java-1.8.0-openjdk-devel
java -version

Hadoop 安全和强化

在本节中,我们将强化 Hadoop 环境安全性……

1.禁用自动挂载

自动挂载“autofs”允许自动挂载 USB、CD/DVD 等物理设备。具有物理访问权限的用户可以连接其 USB 或任何存储介质来访问插入数据。使用以下命令验证它是否被禁用,如果没有禁用它。

systemctl disable autofs
systemctl is-enabled autofs

2. 安全启动设置

grub 配置文件包含启动设置的关键信息和解锁启动选项的凭据。 grub 配置文件“grub.cfg”位于 /boot/grub2,它被链接为 /etc/grub2.conf 并确保grub.cfg 由 root 用户拥有。

cd /boot/grub2

使用以下命令检查 UidGid 均为 0/root 和“group”或“ >other' 不应该有任何权限。

stat /boot/grub2/grub.cfg

使用以下命令删除其他人和组的权限。

chmod og-rwx /boot/grub2/grub.cfg

3. 设置引导加载程序密码

此设置可避免其他未经授权的服务器重新启动。即,重新启动服务器需要密码。如果未设置,未经授权的用户可以引导服务器并可以更改引导分区。

使用以下命令设置密码。

grub2-mkpasswd-pbkdf2

将上面创建的密码添加到 /etc/grub.d/01_users 文件中。

接下来,重新生成 grub 配置文件。

grub2-mkconfig > /boot/grub2/grub.cfg

4.删除预链接工具

Prelink 是一种软件程序,如果恶意用户可以破坏 libc 等常见库,则该软件程序可能会增加服务器中的漏洞。

使用以下命令将其删除。

yum remove prelink

5.禁用不需要的服务

我们应该考虑禁用某些服务/协议以避免潜在的攻击。

systemctl disable <service name>
  • 禁用网络服务 – 确保网络服务 – 收费、白天、丢弃、回声、时间未启用。这些网络服务用于调试和测试,建议禁用,可以最大限度地减少远程攻击。
  • 禁用 TFTP 和 FTP – 这两种协议都不支持数据或凭据的机密性。除非明确要求,否则最好不要在服务器中使用。大多数这些协议是在文件服务器上安装和启用的。
  • 禁用 DHCP – DHCP 是动态分配 IP 地址的协议。除非是 DHCP 服务器,否则建议禁用,以避免潜在的攻击。
  • 禁用 HTTP – HTTP 是可用于托管 Web 内容的协议。除了主/管理服务器(其中要配置服务的WebUI,如CM、Hue等)之外,我们可以在其他工作节点上禁用HTTP,这可以避免潜在的攻击。

概括

我们已经完成了服务器准备工作,其中包括Cloudera Hadoop 先决条件和一些安全强化。为了顺利安装 Hadoop,Cloudera 定义的操作系统级别先决条件是必需的。通常,将使用 CIS 基准准备强化脚本,并用于实时审核和修复不合规情况。

CentOS/RHEL 7的最小安装中,仅安装基本功能/软件,这将避免不必要的风险和漏洞。即使是最小安装,在安装 Hadoop 之前,甚至在构建集群之后、将集群移至运营/生产之前,也会进行多次安全审核迭代。