Website-Suche

Einrichten von Hadoop-Voraussetzungen und Sicherheitshärtung – Teil 2


Hadoop Cluster Building ist ein schrittweiser Prozess, bei dem der Prozess mit dem Kauf der erforderlichen Server, der Montage im Rack, der Verkabelung usw. und der Platzierung im Rechenzentrum beginnt. Dann müssen wir das Betriebssystem installieren. Dies kann mit Kickstart in der Echtzeitumgebung erfolgen, wenn die Clustergröße groß ist. Sobald das Betriebssystem installiert ist, müssen wir den Server für die Hadoop-Installation vorbereiten und die Server gemäß den Sicherheitsrichtlinien der Organisation vorbereiten.

Anforderungen

  • Best Practices für die Bereitstellung von Hadoop Server unter CentOS/RHEL 7 – Teil 1

In diesem Artikel gehen wir auf die von Cloudera empfohlenen Voraussetzungen auf Betriebssystemebene ein. Außerdem haben wir einige wichtige Tipps zur Sicherheitshärtung gemäß dem CIS Benchmark für Produktionsserver hervorgehoben. Diese Sicherheitshärtung kann je nach Anforderung unterschiedlich sein.

Einrichten der Voraussetzungen für Cloudera Hadoop

Hier besprechen wir die von Cloudera empfohlenen Voraussetzungen auf Betriebssystemebene.

1. Deaktivieren Sie die transparente große Seite

Standardmäßig ist Transparent Huge Page (THP) auf Linux-Maschinen aktiviert, die schlecht mit Hadoop-Workloads interagieren und die Gesamtleistung von Cluster beeinträchtigen. Um eine optimale Leistung zu erzielen, müssen wir dies mit dem folgenden Echo-Befehl deaktivieren.

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

2. Ändern Sie die VM-Austauschbarkeit

Standardmäßig ist der vm.swappiness-Wert für die meisten Linux-Maschinen 30 oder 60.

sysctl vm.swappiness

Ein höherer Wert für swappiness wird für Hadoop-Server nicht empfohlen, da dies zu längeren Pausen bei der Garbage Collection führen kann. Und mit dem höheren Swapiness-Wert können Daten im Swap-Speicher zwischengespeichert werden, selbst wenn wir über genügend Speicher verfügen. Wenn Sie den Swappiness-Wert senken, kann der physische Speicher mehr Speicherseiten enthalten.

sysctl vm.swappiness=1

Oder Sie können die Datei /etc/sysctl.conf öffnen und am Ende "vm.swappiness=1" hinzufügen.

vm.swappiness=1

3. Deaktivieren Sie die Firewall

Jeder Hadoop-Server trägt seine eigene Verantwortung, auf dem mehrere Dienste (Daemons) ausgeführt werden. Alle Server werden für verschiedene Zwecke regelmäßig miteinander kommunizieren.

Beispielsweise sendet Datanode alle 3 Sekunden einen Heartbeat an Namenode, damit Namenode sicherstellt, dass der Datanode aktiv ist.

Wenn die gesamte Kommunikation zwischen den Daemons über verschiedene Server hinweg über die Firewall erfolgt, stellt dies eine zusätzliche Belastung für Hadoop dar. Daher empfiehlt es sich, die Firewall auf den einzelnen Servern im Cluster zu deaktivieren.

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

4. Deaktivieren Sie SELinux

Wenn wir SELinux aktiviert lassen, führt dies zu Problemen bei der Installation von Hadoop. Da es sich bei Hadoop um ein Cluster-Computing handelt, erreicht Cloudera Manager alle Server im Cluster, um Hadoop und seine Dienste zu installieren, und erstellt bei Bedarf die erforderlichen Dienstverzeichnisse.

Wenn SELinux aktiviert ist, kann Cloudera Manager die Installation nicht wie gewünscht steuern. Die Aktivierung von SELinux stellt also ein Hindernis für Hadoop dar und führt zu Leistungsproblemen.

Sie können den Status von SELinux überprüfen, indem Sie den folgenden Befehl verwenden.

sestatus

Öffnen Sie nun die Datei /etc/selinux/config und deaktivieren Sie SELINUX wie gezeigt.

SELinux=disabled

Nachdem Sie SELinux deaktiviert haben, müssen Sie das System neu starten, um es zu aktivieren.

reboot

5. Installieren Sie NTP-Dienste

Im Hadoop-Cluster sollten alle Server zeitsynchronisiert sein, um Taktversatzfehler zu vermeiden. In RHEL/CentOS 7 ist chronyd für die Netzwerkuhr/Zeitsynchronisierung integriert, Cloudera empfiehlt jedoch die Verwendung von NTP.

Wir müssen NTP installieren und konfigurieren. Stoppen Sie nach der Installation „chronyd“ und deaktivieren Sie es. Denn wenn auf einem Server sowohl ntpd als auch chronyd ausgeführt werden, berücksichtigt Cloudera Manager chronyd für die Zeitsynchronisierung und gibt selbst dann einen Fehler aus Wir haben die Zeit über NTP synchronisiert.

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

6. Deaktivieren Sie Chronyd

Wie oben erwähnt, brauchen wir chronyd nicht aktiv, da wir ntpd verwenden. Überprüfen Sie den Status von chronyd. Wenn es ausgeführt wird, stoppen und deaktivieren Sie es. Standardmäßig wird chronyd gestoppt, es sei denn, wir starten es nach der Installation des Betriebssystems. Aus Sicherheitsgründen müssen wir es nur deaktivieren.

systemctl status chronyd
systemctl disable chronyd

7. Legen Sie den FQDN (vollständig qualifizierter Domänenname) fest.

Wir müssen den Hostnamen mit FQDN (Fully Qualified Domain Name) festlegen. Jeder Server sollte einen eindeutigen kanonischen Namen haben. Um den Hostnamen aufzulösen, müssen wir entweder den DNS oder /etc/hosts konfigurieren. Hier konfigurieren wir /etc/hosts.

IP-Adresse und FQDN jedes Servers sollten in /etc/hosts aller Server eingegeben werden. Dann kann nur Cloudera Manager alle Server mit seinem Hostnamen kommunizieren.

hostnamectl set-hostname master1.linux-console.net

Als nächstes konfigurieren Sie die Datei /etc/hosts. Zum Beispiel: – Wenn wir einen 5-Knoten-Cluster mit 2 Mastern und 3 Workern haben, können wir /etc/hosts wie folgt konfigurieren.

8. Installieren eines Java Development Kit (JDK)

Da Hadoop aus Java besteht, sollte auf allen Hosts Java mit der entsprechenden Version installiert sein. Hier haben wir OpenJDK. Standardmäßig installiert Cloudera Manager OracleJDK, Cloudera empfiehlt jedoch OpenJDK.

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

Hadoop-Sicherheit und -Härtung

In diesem Abschnitt beschäftigen wir uns mit der Härtung der Sicherheit der Hadoop-Umgebung.

1. Deaktivieren Sie die automatische Bereitstellung

Das automatische Mounten von „autofs“ ermöglicht das automatische Mounten physischer Geräte wie USB, CD/DVD. Benutzer mit physischem Zugriff können ihren USB-Stick oder ein beliebiges Speichermedium anschließen, um auf die eingegebenen Daten zuzugreifen. Verwenden Sie die folgenden Befehle, um zu überprüfen, ob es deaktiviert ist oder nicht. Wenn nicht, deaktivieren Sie es.

systemctl disable autofs
systemctl is-enabled autofs

2. Sichere Starteinstellungen

Die grub-Konfigurationsdatei enthält wichtige Informationen zu Starteinstellungen und Anmeldeinformationen zum Freischalten von Startoptionen. Die Grub-Konfigurationsdatei „grub.cfg“ befindet sich unter /boot/grub2 und ist als /etc/grub2.conf verlinkt grub.cfg gehört dem Root-Benutzer.

cd /boot/grub2

Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Uid und Gid beide 0/root und 'group' oder ' sind >other' sollte keine Berechtigung haben.

stat /boot/grub2/grub.cfg

Verwenden Sie den folgenden Befehl, um Berechtigungen von anderen und Gruppen zu entfernen.

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

3. Legen Sie das Bootloader-Passwort fest

Diese Einstellung verhindert einen anderen unbefugten Neustart des Servers. Das heißt, es ist ein Passwort erforderlich, um den Server neu zu starten. Wenn es nicht gesetzt ist, können nicht autorisierte Benutzer den Server booten und Änderungen an den Boot-Partitionen vornehmen.

Verwenden Sie den folgenden Befehl, um das Passwort festzulegen.

grub2-mkpasswd-pbkdf2

Fügen Sie das oben erstellte Passwort zur Datei /etc/grub.d/01_users hinzu.

Als nächstes generieren Sie die Grub-Konfigurationsdatei neu.

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

4. Entfernen Sie das Prelink-Tool

Prelink ist ein Softwareprogramm, das die Verwundbarkeit eines Servers erhöhen kann, wenn böswillige Benutzer gängige Bibliotheken wie libc gefährden können.

Verwenden Sie den folgenden Befehl, um es zu entfernen.

yum remove prelink

5. Deaktivieren Sie unerwünschte Dienste

Wir sollten erwägen, einige Dienste/Protokolle zu deaktivieren, um potenzielle Angriffe zu vermeiden.

systemctl disable <service name>
  • Netzwerkdienste deaktivieren – Stellen Sie sicher, dass die Netzwerkdienste – Gebühren, Tageszeit, Verwerfen, Echo, Uhrzeit – nicht aktiviert sind. Diese Netzwerkdienste dienen zum Debuggen und Testen. Es wird empfohlen, sie zu deaktivieren, um den Remote-Angriff zu minimieren.
  • TFTP und FTP deaktivieren – Beide Protokolle unterstützen die Vertraulichkeit der Daten oder Anmeldeinformationen nicht. Es empfiehlt sich, dies nur dann auf dem Server zu tun, wenn dies ausdrücklich erforderlich ist. Meistens werden diese Protokolle auf Dateiservern installiert und aktiviert.
  • DHCP deaktivieren – DHCP ist das Protokoll, das die IP-Adresse dynamisch zuweist. Es wird empfohlen, die Funktion zu deaktivieren, es sei denn, es handelt sich um einen DHCP-Server, um potenzielle Angriffe zu vermeiden.
  • HTTP deaktivieren – HTTP ist das Protokoll, das zum Hosten von Webinhalten verwendet werden kann. Abgesehen von Master-/Verwaltungsservern (auf denen die WebUI von Diensten wie CM, Hue usw. konfiguriert werden muss) können wir HTTP auf anderen Worker-Knoten deaktivieren, um potenzielle Angriffe zu vermeiden.

Zusammenfassung

Wir haben die Servervorbereitung durchgeführt, die aus Cloudera Hadoop-Voraussetzungen und einigen Sicherheitsmaßnahmen besteht. Für die reibungslose Installation von Hadoop sind von Cloudera definierte Voraussetzungen auf Betriebssystemebene zwingend erforderlich. Normalerweise wird unter Verwendung des CIS-Benchmarks ein Härtungsskript erstellt und zur Prüfung und Behebung von Verstößen in Echtzeit verwendet.

Bei einer Minimalinstallation von CentOS/RHEL 7 werden nur grundlegende Funktionalitäten/Software installiert, wodurch unerwünschte Risiken und Schwachstellen vermieden werden. Obwohl es sich um eine Minimalinstallation handelt, werden vor der Installation von Hadoop mehrere Iterationen der Sicherheitsüberprüfung durchgeführt, auch nach der Erstellung des Clusters, bevor der Cluster in Betrieb/Produktion überführt wird.