Ρύθμιση προαπαιτούμενων Hadoop και σκλήρυνσης ασφαλείας - Μέρος 2


Το Hadoop Cluster Building είναι μια διαδικασία βήμα προς βήμα όπου η διαδικασία ξεκινά από την αγορά των απαιτούμενων διακομιστών, την τοποθέτηση στο rack, την καλωδίωση κ.λπ. και την τοποθέτηση στο Datacentre. Στη συνέχεια, πρέπει να εγκαταστήσουμε το λειτουργικό σύστημα, μπορεί να γίνει χρησιμοποιώντας το kickstart σε περιβάλλον πραγματικού χρόνου, εάν το μέγεθος του συμπλέγματος είναι μεγάλο. Μόλις εγκατασταθεί το λειτουργικό σύστημα, τότε πρέπει να προετοιμάσουμε τον διακομιστή για εγκατάσταση Hadoop και πρέπει να προετοιμάσουμε τους διακομιστές σύμφωνα με τις πολιτικές ασφαλείας του Οργανισμού.

Απαιτήσεις

  • Βέλτιστες πρακτικές για την ανάπτυξη του διακομιστή Hadoop σε CentOS/RHEL 7 – Μέρος 1

Σε αυτό το άρθρο, θα εξετάσουμε τις προϋποθέσεις σε επίπεδο λειτουργικού συστήματος που προτείνει η Cloudera. Επίσης, έχουμε επισημάνει ορισμένες σημαντικές συμβουλές για τη σκλήρυνση ασφαλείας σύμφωνα με το Συγκριτικό σημείο αναφοράς CIS για διακομιστές παραγωγής. Αυτή η σκλήρυνση ασφαλείας μπορεί να διαφέρει ανάλογα με τις απαιτήσεις.

Ρύθμιση προϋποθέσεων για το Cloudera Hadoop

Εδώ, θα συζητήσουμε τις προϋποθέσεις σε επίπεδο λειτουργικού συστήματος που προτείνει η Cloudera.

1. Απενεργοποιήστε το Transparent Huge Page

Από προεπιλογή, η Transparent Huge Page (THP) είναι ενεργοποιημένη σε μηχανές Linux που αλληλεπιδρούν ελάχιστα με φόρτους εργασίας Hadoop και υποβαθμίζει τη συνολική απόδοση του Cluster. Πρέπει λοιπόν να το απενεργοποιήσουμε για να επιτύχουμε τη βέλτιστη απόδοση χρησιμοποιώντας την ακόλουθη εντολή echo.

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

2. Αλλαγή VM Swappiness

Από προεπιλογή, η τιμή vm.swappiness είναι 30 ή 60 για τα περισσότερα μηχανήματα Linux.

# sysctl vm.swappiness

Η υψηλότερη τιμή swappiness δεν συνιστάται για διακομιστές Hadoop επειδή μπορεί να προκαλέσει μεγάλες παύσεις συλλογής σκουπιδιών. Και, με την υψηλότερη τιμή swappiness, τα δεδομένα μπορούν να αποθηκευτούν προσωρινά για εναλλαγή μνήμης, ακόμη κι αν έχουμε αρκετή μνήμη. Η χαμηλότερη τιμή swappiness μπορεί να κάνει τη φυσική μνήμη να περιέχει περισσότερες σελίδες μνήμης.

# sysctl vm.swappiness=1

Εναλλακτικά, μπορείτε να ανοίξετε το αρχείο /etc/sysctl.conf και να προσθέσετε \vm.swappiness=1\ στο τέλος.

vm.swappiness=1

3. Απενεργοποιήστε το Τείχος προστασίας

Κάθε διακομιστής Hadoop θα έχει τη δική του ευθύνη με πολλαπλές υπηρεσίες (δαίμονες) να εκτελούνται σε αυτόν. Όλοι οι διακομιστές θα επικοινωνούν μεταξύ τους με συχνό τρόπο για διάφορους σκοπούς.

Για παράδειγμα, η Datanode θα στέλνει έναν καρδιακό παλμό στο Namenode για κάθε 3 δευτερόλεπτα, έτσι ώστε η Namenode να βεβαιωθεί ότι η Datanode είναι ζωντανή.

Εάν όλη η επικοινωνία συμβαίνει μεταξύ των δαιμόνων σε διαφορετικούς διακομιστές μέσω του τείχους προστασίας, θα είναι ένα επιπλέον βάρος για το Hadoop. Επομένως, η καλύτερη πρακτική είναι να απενεργοποιήσετε το τείχος προστασίας στους μεμονωμένους διακομιστές στο Cluster.

# 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

Στο Cluster Hadoop, όλοι οι διακομιστές θα πρέπει να είναι Συγχρονισμένοι με το χρόνο για να αποφευχθούν σφάλματα μετατόπισης ρολογιού. Το RHEL/CentOS 7 διαθέτει ενσωματωμένο chronyd για συγχρονισμό ρολογιού/ώρας δικτύου, αλλά η Cloudera συνιστά τη χρήση του NTP.

Πρέπει να εγκαταστήσουμε το NTP και να το διαμορφώσουμε. Μόλις εγκατασταθεί, σταματήστε το «chronyd» και απενεργοποιήστε το. Επειδή, εάν ένας διακομιστής που έχει και ntpd και chronyd εκτελείται, το Cloudera Manager θα εξετάσει το ενδεχόμενο chronyd για συγχρονισμό χρόνου, τότε θα εμφανίσει σφάλμα ακόμα και αν έχουμε χρόνο συγχρονισμένο μέσω ntp.

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

6. Απενεργοποιήστε το Chronyd

Όπως αναφέραμε παραπάνω, δεν χρειαζόμαστε το chronyd active καθώς χρησιμοποιούμε το ntpd. Ελέγξτε την κατάσταση του chronyd, εάν εκτελείται διακοπή και απενεργοποίηση. Από προεπιλογή, το chronyd έχει σταματήσει, εκτός και αν το ξεκινήσουμε μετά την εγκατάσταση του λειτουργικού συστήματος, απλώς πρέπει να το απενεργοποιήσουμε για πιο ασφαλή πλευρά.

# systemctl status chronyd
# systemctl disable chronyd

7. Ορίστε FQDN (Πλήρως πιστοποιημένο όνομα τομέα)

Πρέπει να ορίσουμε το όνομα κεντρικού υπολογιστή με το FQDN (Πλήρως πιστοποιημένο όνομα τομέα). Κάθε διακομιστής πρέπει να έχει ένα μοναδικό Canonical όνομα. Για να επιλύσουμε το όνομα κεντρικού υπολογιστή, πρέπει είτε να διαμορφώσουμε το DNS είτε το /etc/hosts. Εδώ, θα διαμορφώσουμε το /etc/hosts.

Η διεύθυνση IP και το FQDN κάθε διακομιστή πρέπει να εισαχθούν στο /etc/hosts όλων των διακομιστών. Τότε μόνο το Cloudera Manager μπορεί να επικοινωνήσει όλους τους διακομιστές με το όνομα κεντρικού υπολογιστή του.

# hostnamectl set-hostname master1.linux-console.net

Στη συνέχεια, διαμορφώστε το αρχείο /etc/hosts. Για παράδειγμα: – Εάν έχουμε σύμπλεγμα 5 κόμβων με 2 κύριους και 3 εργαζόμενους, μπορούμε να διαμορφώσουμε το /etc/host όπως παρακάτω.

8. Εγκατάσταση ενός κιτ ανάπτυξης Java (JDK)

Καθώς το Hadoop αποτελείται από Java, όλοι οι κεντρικοί υπολογιστές θα πρέπει να έχουν εγκαταστήσει την Java με την κατάλληλη έκδοση. Εδώ θα έχουμε OpenJDK. Από προεπιλογή, ο Cloudera Manager θα εγκαταστήσει το OracleJDK, αλλά το Cloudera συνιστά να έχετε το OpenJDK.

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

Hadoop Security and Hardening

Σε αυτήν την ενότητα, θα πάμε στην ασφάλεια περιβάλλοντος Harden Hadoop…

1. Απενεργοποιήστε την αυτόματη τοποθέτηση

Η αυτόματη τοποθέτηση «autoofs» επιτρέπει την αυτόματη τοποθέτηση φυσικών συσκευών όπως 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

Χρησιμοποιήστε την παρακάτω εντολή για να ελέγξετε ότι το Uid και το Gid είναι και τα δύο 0/root και group ή άλλο' δεν πρέπει να έχει καμία άδεια.

# stat /boot/grub2/grub.cfg

Χρησιμοποιήστε την παρακάτω εντολή για να αφαιρέσετε δικαιώματα από άλλα και ομάδα.

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

3. Ορίστε τον κωδικό πρόσβασης του Bootloader

Αυτή η ρύθμιση αποφεύγει άλλες μη εξουσιοδοτημένες επανεκκινήσεις του διακομιστή. Δηλαδή, Απαιτεί κωδικό πρόσβασης για επανεκκίνηση του διακομιστή. Εάν δεν έχει οριστεί, οι μη εξουσιοδοτημένοι χρήστες μπορούν να εκκινήσουν τον διακομιστή και να κάνουν αλλαγές στα διαμερίσματα εκκίνησης.

Χρησιμοποιήστε την παρακάτω εντολή για να ορίσετε τον κωδικό πρόσβασης.

# 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 είναι το πρωτόκολλο που μπορεί να χρησιμοποιηθεί για τη φιλοξενία περιεχομένου ιστού. Εκτός από τους διακομιστές Master/Management (όπου πρόκειται να διαμορφωθούν οι υπηρεσίες WebUI, όπως CM, Hue, κ.λπ.), μπορούμε να απενεργοποιήσουμε το HTTP σε άλλους κόμβους εργαζομένων που μπορούν να αποφύγουν τις πιθανές επιθέσεις.

Περίληψη

Έχουμε ολοκληρώσει την προετοιμασία του διακομιστή, η οποία αποτελείται από Προαπαιτούμενα του Cloudera Hadoop και κάποια σκλήρυνση ασφαλείας. Οι προϋποθέσεις επιπέδου λειτουργικού συστήματος που ορίζονται από την Cloudera είναι υποχρεωτικές για την ομαλή εγκατάσταση του Hadoop. Συνήθως, ένα script hardening θα προετοιμαστεί με τη χρήση του CIS Benchmark και θα χρησιμοποιηθεί για τον έλεγχο και την αποκατάσταση της μη συμμόρφωσης σε πραγματικό χρόνο.

Σε μια ελάχιστη εγκατάσταση του CentOS/RHEL 7, εγκαθίστανται μόνο βασικές λειτουργίες/λογισμικό, κάτι που θα αποφύγει ανεπιθύμητους κινδύνους και ευπάθειες. Παρόλο που πρόκειται για Ελάχιστη εγκατάσταση, πολλές επαναλήψεις ελέγχου ασφαλείας θα γίνουν πριν από την εγκατάσταση του Hadoop, ακόμη και μετά την κατασκευή του συμπλέγματος, πριν από τη μεταφορά του συμπλέγματος στη λειτουργία/παραγωγή.