ค้นหาเว็บไซต์

การตั้งค่าข้อกำหนดเบื้องต้นของ Hadoop และการเพิ่มความปลอดภัย - ส่วนที่ 2


การสร้างคลัสเตอร์ Hadoop เป็นกระบวนการทีละขั้นตอน โดยกระบวนการเริ่มต้นจากการซื้อเซิร์ฟเวอร์ที่จำเป็น การติดตั้งเข้ากับแร็ค การเดินสายเคเบิล ฯลฯ และการวางในศูนย์ข้อมูล จากนั้นเราจำเป็นต้องติดตั้ง OS ซึ่งสามารถทำได้โดยใช้ Kickstart ในสภาพแวดล้อมแบบเรียลไทม์หากคลัสเตอร์มีขนาดใหญ่ เมื่อติดตั้ง OS แล้ว เราจะต้องเตรียมเซิร์ฟเวอร์สำหรับการติดตั้ง Hadoop และเราต้องเตรียมเซิร์ฟเวอร์ตามนโยบายความปลอดภัยขององค์กร

ข้อกำหนด

  • แนวทางปฏิบัติที่ดีที่สุดสำหรับการปรับใช้เซิร์ฟเวอร์ Hadoop บน CentOS/RHEL 7 – ส่วนที่ 1

ในบทความนี้ เราจะพูดถึงข้อกำหนดเบื้องต้นระดับระบบปฏิบัติการที่แนะนำโดย Cloudera นอกจากนี้เรายังได้เน้นย้ำเคล็ดลับการรักษาความปลอดภัยที่สำคัญบางประการตาม เกณฑ์มาตรฐาน CIS สำหรับเซิร์ฟเวอร์ที่ใช้งานจริง การชุบแข็งด้านความปลอดภัยเหล่านี้อาจแตกต่างกันไปตามความต้องการ

การตั้งค่าข้อกำหนดเบื้องต้นของ Cloudera Hadoop

ที่นี่ เราจะพูดถึงข้อกำหนดเบื้องต้นระดับระบบปฏิบัติการที่แนะนำโดย Cloudera

1. ปิดการใช้งานหน้าใหญ่แบบโปร่งใส

ตามค่าเริ่มต้น Transparent Huge Page (THP) จะถูกเปิดใช้งานในเครื่อง Linux ซึ่งมีการโต้ตอบกับปริมาณงาน Hadoop ได้ไม่ดี และทำให้ประสิทธิภาพโดยรวมของคลัสเตอร์ลดลง ดังนั้นเราจึงจำเป็นต้องปิดการใช้งานนี้เพื่อให้ได้ประสิทธิภาพสูงสุดโดยใช้คำสั่ง 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 ที่ลดลงจะทำให้หน่วยความจำกายภาพมีเพจหน่วยความจำมากขึ้น

sysctl vm.swappiness=1

หรือคุณสามารถเปิดไฟล์ /etc/sysctl.conf และเพิ่ม "vm.swappiness=1" ต่อท้ายได้

vm.swappiness=1

3. ปิดการใช้งานไฟร์วอลล์

เซิร์ฟเวอร์ Hadoop แต่ละเซิร์ฟเวอร์จะมีความรับผิดชอบของตัวเองโดยมีบริการต่างๆ (daemons) ที่ทำงานอยู่บนนั้น เซิร์ฟเวอร์ทั้งหมดจะสื่อสารกันบ่อยครั้งเพื่อวัตถุประสงค์ต่างๆ

ตัวอย่างเช่น Datanode จะส่งฮาร์ทบีทไปที่ Namenode ทุกๆ 3 วินาที เพื่อให้ Namenode จะทำให้แน่ใจว่า Datanode ยังมีชีวิตอยู่

หากการสื่อสารทั้งหมดเกิดขึ้นระหว่าง daemons บนเซิร์ฟเวอร์ต่างๆ ผ่านทางไฟร์วอลล์ จะเป็นภาระเพิ่มเติมสำหรับ 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' และปิดการใช้งาน เพราะหากเซิร์ฟเวอร์ที่มีทั้ง ntpd และ chronyd ทำงานอยู่ 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 (ชื่อโดเมนแบบเต็ม) แต่ละเซิร์ฟเวอร์ควรมีชื่อ 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/hosts ได้ดังนี้

8. การติดตั้ง Java Development Kit (JDK)

เนื่องจาก Hadoop ประกอบด้วย Java โฮสต์ทั้งหมดจึงควรติดตั้ง Java ในเวอร์ชันที่เหมาะสม ที่นี่เราจะมี OpenJDK ตามค่าเริ่มต้น Cloudera Manager จะติดตั้ง OracleJDK แต่ Cloudera แนะนำให้ใช้ OpenJDK

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

ความปลอดภัยและการเสริมความแข็งแกร่งของ Hadoop

ในส่วนนี้ เราจะไปที่การรักษาความปลอดภัยของสภาพแวดล้อม Harden Hadoop...

1. ปิดการใช้งานการติดตั้งอัตโนมัติ

การติดตั้งอัตโนมัติ 'autofs' ช่วยให้สามารถติดตั้งอุปกรณ์ทางกายภาพ เช่น USB, CD/DVD ได้โดยอัตโนมัติ ผู้ใช้ที่มีสิทธิ์เข้าถึงทางกายภาพสามารถต่อ USB หรือสื่อบันทึกข้อมูลใด ๆ เพื่อเข้าถึงข้อมูลที่แทรกได้ ใช้คำสั่งด้านล่างเพื่อตรวจสอบว่าปิดใช้งานหรือไม่ หากไม่ได้ปิดใช้งาน

systemctl disable autofs
systemctl is-enabled autofs

2. การตั้งค่าการบูตที่ปลอดภัย

ไฟล์การกำหนดค่า ด้วง มีข้อมูลสำคัญของการตั้งค่าการบูตและข้อมูลประจำตัวเพื่อปลดล็อกตัวเลือกการบูต ไฟล์กำหนดค่าด้วง 'grub.cfg' อยู่ที่ /boot/grub2 และมีการเชื่อมโยงเป็น /etc/grub2.conf และรับประกัน grub.cfg เป็นของผู้ใช้รูท

cd /boot/grub2

ใช้คำสั่งด้านล่างเพื่อตรวจสอบ Uid และ Gid มีทั้ง 0/root และ 'group' หรือ 'other' ไม่ควรได้รับอนุญาตใดๆ

stat /boot/grub2/grub.cfg

ใช้คำสั่งด้านล่างเพื่อลบการอนุญาตจากผู้อื่นและกลุ่ม

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

3. ตั้งรหัสผ่าน Bootloader

การตั้งค่านี้จะหลีกเลี่ยงการรีบูตเซิร์ฟเวอร์อื่นๆ โดยไม่ได้รับอนุญาต คือมันต้องใช้รหัสผ่านเพื่อรีบูตเซิร์ฟเวอร์ หากไม่ได้ตั้งค่าไว้ ผู้ใช้ที่ไม่ได้รับอนุญาตสามารถบูตเซิร์ฟเวอร์และสามารถเปลี่ยนแปลงพาร์ติชันสำหรับบูตได้

ใช้คำสั่งด้านล่างเพื่อตั้งรหัสผ่าน

grub2-mkpasswd-pbkdf2

เพิ่มรหัสผ่านที่สร้างขึ้นข้างต้นในไฟล์ /etc/grub.d/01_users

จากนั้นสร้างไฟล์การกำหนดค่าด้วงอีกครั้ง

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 เป็นโปรโตคอลที่สามารถใช้เพื่อโฮสต์เนื้อหาเว็บ นอกเหนือจากเซิร์ฟเวอร์หลัก/การจัดการ (โดยที่ต้องกำหนดค่า WebUI ของบริการ เช่น CM, Hue ฯลฯ) เราสามารถปิดการใช้งาน HTTP บนโหนดของผู้ปฏิบัติงานอื่น ๆ ซึ่งสามารถหลีกเลี่ยงการโจมตีที่อาจเกิดขึ้นได้

สรุป

เราได้ดำเนินการเตรียมเซิร์ฟเวอร์ซึ่งประกอบด้วย ข้อกำหนดเบื้องต้นของ Cloudera Hadoop และการเพิ่มความปลอดภัยบางส่วน ข้อกำหนดเบื้องต้นระดับ OS ที่กำหนดโดย Cloudera เป็นสิ่งจำเป็นสำหรับการติดตั้ง Hadoop อย่างราบรื่น โดยปกติแล้ว สคริปต์ที่เพิ่มความเข้มงวดจะถูกจัดเตรียมโดยใช้ CIS Benchmark และใช้ในการตรวจสอบและแก้ไขการไม่ปฏิบัติตามข้อกำหนดแบบเรียลไทม์

ในการติดตั้ง CentOS/RHEL 7 เพียงเล็กน้อย จะมีการติดตั้งเฉพาะฟังก์ชัน/ซอฟต์แวร์พื้นฐานเท่านั้น ซึ่งจะช่วยหลีกเลี่ยงความเสี่ยงและช่องโหว่ที่ไม่พึงประสงค์ แม้ว่าจะเป็นการติดตั้งขั้นต่ำก็ตาม จะมีการตรวจสอบความปลอดภัยซ้ำหลายครั้งก่อนที่จะติดตั้ง Hadoop แม้กระทั่งหลังจากสร้างคลัสเตอร์แล้ว ก่อนที่จะย้ายคลัสเตอร์ไปสู่การดำเนินงาน/การผลิต