Wyszukiwanie w witrynie

Konfigurowanie wymagań wstępnych Hadoop i zwiększanie zabezpieczeń — część 2


Budowanie klastra Hadoop to proces krok po kroku, który rozpoczyna się od zakupu wymaganych serwerów, montażu w szafie, okablowania itp. i umieszczenia w centrum danych. Następnie musimy zainstalować system operacyjny, można to zrobić za pomocą kickstartu w środowisku czasu rzeczywistego, jeśli rozmiar klastra jest duży. Po zainstalowaniu systemu operacyjnego musimy przygotować serwer do instalacji Hadoop i przygotować serwery zgodnie z polityką bezpieczeństwa Organizacji.

Wymagania

  • Najlepsze praktyki dotyczące wdrażania serwera Hadoop w CentOS/RHEL 7 – część 1

W tym artykule omówimy wymagania wstępne na poziomie systemu operacyjnego zalecane przez Cloudera. Podkreśliliśmy także kilka ważnych wskazówek dotyczących zwiększania bezpieczeństwa zgodnie z benchmarkiem CIS dla serwerów produkcyjnych. Te zabezpieczenia mogą się różnić w zależności od wymagań.

Konfigurowanie wymagań wstępnych Cloudera Hadoop

W tym miejscu omówimy wymagania wstępne na poziomie systemu operacyjnego zalecane przez Cloudera.

1. Wyłącz przezroczystą ogromną stronę

Domyślnie Przejrzysta ogromna strona (THP) jest włączona na komputerach z systemem Linux, które słabo współdziałają z obciążeniami Hadoop i pogarsza to ogólną wydajność klastra. Musimy więc to wyłączyć, aby osiągnąć optymalną wydajność za pomocą następującego polecenia echo.

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

2. Zmień zmienność maszyny wirtualnej

Domyślnie wartość vm.swappiness wynosi 30 lub 60 dla większości komputerów z Linuksem.

sysctl vm.swappiness

Nie zaleca się stosowania wyższej wartości zamiany w przypadku serwerów Hadoop, ponieważ może to powodować długie przerwy w usuwaniu śmieci. A przy wyższej wartości wymiany dane mogą być buforowane w celu wymiany pamięci, nawet jeśli mamy wystarczającą ilość pamięci. Obniżenie wartości swappiness może spowodować, że pamięć fizyczna będzie zawierać więcej stron pamięci.

sysctl vm.swappiness=1

Możesz też otworzyć plik /etc/sysctl.conf i dodać na końcu "vm.swappiness=1".

vm.swappiness=1

3. Wyłącz zaporę sieciową

Każdy serwer Hadoop będzie ponosił własną odpowiedzialność za działanie wielu usług (demonów). Wszystkie serwery będą się ze sobą często komunikować w różnych celach.

Na przykład Datanode będzie wysyłać impuls do Namenode co 3 sekundy, aby Namenode upewniał się, że Datanode działa.

Jeśli cała komunikacja między demonami na różnych serwerach odbywa się za pośrednictwem zapory sieciowej, będzie to dodatkowe obciążenie dla Hadoopa. Dlatego najlepszą praktyką jest wyłączenie zapory ogniowej na poszczególnych serwerach w klastrze.

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

4. Wyłącz SELinux

Jeśli pozostawimy włączony SELinux, spowoduje to problemy podczas instalacji Hadoopa. Ponieważ Hadoop to przetwarzanie klastrowe, Cloudera Manager dotrze do wszystkich serwerów w klastrze, aby zainstalować Hadoop i jego usługi, a także utworzy niezbędne katalogi usług tam, gdzie jest to wymagane.

Jeśli SELinux jest włączony, nie pozwoli Cloudera Managerowi sterować instalacją według własnego uznania. Zatem włączenie SELinux będzie przeszkodą dla Hadoopa i spowoduje problemy z wydajnością.

Możesz sprawdzić status SELinux za pomocą poniższego polecenia.

sestatus

Teraz otwórz plik /etc/selinux/config i wyłącz SELINUX, jak pokazano.

SELinux=disabled

Po wyłączeniu SELinux należy ponownie uruchomić system, aby był aktywny.

reboot

5. Zainstaluj usługi NTP

W klastrze Hadoop wszystkie serwery powinny być zsynchronizowane czasowo, aby uniknąć błędów przesunięcia zegara. RHEL/CentOS 7 ma wbudowaną chronyd do synchronizacji zegara sieciowego/czasu, ale Cloudera zaleca używanie NTP.

Musimy zainstalować NTP i skonfigurować go. Po zainstalowaniu zatrzymaj „chronyd” i wyłącz. Ponieważ jeśli na serwerze działa zarówno ntpd, jak i chronyd, Cloudera Manager weźmie pod uwagę chronyd do synchronizacji czasu, to zgłosi błąd, nawet jeśli mamy czas zsynchronizowany przez NTP.

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

6. Wyłącz Chronyd

Jak wspomnieliśmy powyżej, nie potrzebujemy aktywnego chronyd, ponieważ używamy ntpd. Sprawdź status chronyd, jeśli działa, zatrzymaj i wyłącz. Domyślnie chronyd jest zatrzymany, chyba że uruchomimy go po instalacji systemu operacyjnego, po prostu musimy go wyłączyć ze względów bezpieczeństwa.

systemctl status chronyd
systemctl disable chronyd

7. Ustaw FQDN (w pełni kwalifikowaną nazwę domeny)

Musimy ustawić nazwę hosta za pomocą FQDN (w pełni kwalifikowana nazwa domeny). Każdy serwer powinien mieć unikalną nazwę kanoniczną. Aby rozwiązać nazwę hosta, musimy skonfigurować DNS lub /etc/hosts. Tutaj skonfigurujemy /etc/hosts.

Adres IP i FQDN każdego serwera należy wpisać w /etc/hosts wszystkich serwerów. Wtedy tylko Cloudera Manager może komunikować się ze wszystkimi serwerami za pomocą swojej nazwy hosta.

hostnamectl set-hostname master1.linux-console.net

Następnie skonfiguruj plik /etc/hosts. Na przykład: – Jeśli mamy klaster składający się z 5 węzłów, 2 głównych i 3 procesów roboczych, możemy skonfigurować /etc/hosts jak poniżej.

8. Instalowanie zestawu Java Development Kit (JDK)

Ponieważ Hadoop składa się z Javy, wszystkie hosty powinny mieć zainstalowaną Javę w odpowiedniej wersji. Tutaj będziemy mieć OpenJDK. Domyślnie Cloudera Manager zainstaluje OracleJDK, ale Cloudera zaleca posiadanie OpenJDK.

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

Bezpieczeństwo i wzmacnianie Hadoop

W tej sekcji zajmiemy się bezpieczeństwem środowiska Harden Hadoop…

1. Wyłącz automatyczne montowanie

Automatyczne montowanie „autofs” umożliwia automatyczny montaż urządzeń fizycznych, takich jak USB, CD/DVD. Użytkownik z dostępem fizycznym może podłączyć swój nośnik USB lub dowolny nośnik pamięci, aby uzyskać dostęp do wstawianych danych. Użyj poniższych poleceń, aby sprawdzić, czy jest wyłączona, czy nie, jeśli nie, wyłącz ją.

systemctl disable autofs
systemctl is-enabled autofs

2. Ustawienia bezpiecznego rozruchu

Plik konfiguracyjny grub zawiera najważniejsze informacje o ustawieniach rozruchu i poświadczeniach umożliwiających odblokowanie opcji rozruchu. Plik konfiguracyjny Gruba „grub.cfg” zlokalizowany w /boot/grub2 i połączony jako /etc/grub2.conf i upewnij się, że grub.cfg jest własnością użytkownika root.

cd /boot/grub2

Użyj poniższego polecenia, aby sprawdzić, czy Uid i Gid mają wartość 0/root i „grupa” lub „inne' nie powinno mieć żadnych uprawnień.

stat /boot/grub2/grub.cfg

Użyj poniższego polecenia, aby usunąć uprawnienia innych i grup.

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

3. Ustaw hasło programu ładującego

To ustawienie pozwala uniknąć innego nieautoryzowanego ponownego uruchomienia serwera. tj. wymaga hasła do ponownego uruchomienia serwera. Jeśli nie jest ustawiona, nieautoryzowani użytkownicy mogą uruchomić serwer i dokonać zmian w partycjach startowych.

Użyj poniższego polecenia, aby ustawić hasło.

grub2-mkpasswd-pbkdf2

Dodaj utworzone powyżej hasło do pliku /etc/grub.d/01_users.

Następnie ponownie wygeneruj plik konfiguracyjny Gruba.

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

4. Usuń narzędzie Prelink

Prelink to program, który może zwiększyć podatność serwera na ataki, jeśli złośliwi użytkownicy mogą złamać zabezpieczenia popularnych bibliotek, takich jak libc.

Użyj poniższego polecenia, aby go usunąć.

yum remove prelink

5. Wyłącz niechciane usługi

Powinniśmy rozważyć wyłączenie niektórych usług/protokołów, aby uniknąć potencjalnych ataków.

systemctl disable <service name>
  • Wyłącz usługi sieciowe – upewnij się, że usługi sieciowe – opłaty, w ciągu dnia, odrzucanie, echo, czas nie są włączone. Te usługi sieciowe służą do debugowania i testowania. Zaleca się ich wyłączenie, co może zminimalizować zdalny atak.
  • Wyłącz TFTP i FTP – oba protokoły nie zapewniają poufności danych ani poświadczeń. Najlepszą praktyką jest nie mieć tego na serwerze, chyba że jest to wyraźnie wymagane. Przeważnie te protokoły są instalowane i włączane na serwerach plików.
  • Wyłącz DHCP – DHCP to protokół, który dynamicznie przydziela adres IP. Zaleca się wyłączenie, chyba że jest to serwer DHCP, aby uniknąć potencjalnych ataków.
  • Wyłącz HTTP – HTTP to protokół, którego można używać do hostowania treści internetowych. Oprócz serwerów głównych/zarządzających (na których należy skonfigurować WebUI usług, takich jak CM, Hue itp.), możemy wyłączyć HTTP na innych węzłach roboczych, co pozwoli uniknąć potencjalnych ataków.

Streszczenie

Przeszliśmy przez przygotowanie serwera, które obejmuje wymagania wstępne Cloudera Hadoop i pewne wzmocnienie zabezpieczeń. Wymagania wstępne na poziomie systemu operacyjnego określone przez Cloudera są obowiązkowe dla bezproblemowej instalacji Hadoop. Zazwyczaj skrypt wzmacniający zostanie przygotowany z wykorzystaniem CIS Benchmark i wykorzystany do audytu i korygowania niezgodności w czasie rzeczywistym.

W minimalnej instalacji CentOS/RHEL 7 instalowane są tylko podstawowe funkcje/oprogramowanie, co pozwala uniknąć niepożądanego ryzyka i luk w zabezpieczeniach. Mimo że jest to instalacja minimalna, przed instalacją Hadoopa zostanie wykonanych wiele iteracji audytu bezpieczeństwa, nawet po zbudowaniu klastra, przed przeniesieniem klastra do środowiska operacyjnego/produkcyjnego.