웹사이트 검색

Hadoop 전제 조건 및 보안 강화 설정 - 2부


Hadoop 클러스터 구축은 필요한 서버 구매, 랙 장착, 케이블 연결 등을 거쳐 데이터센터에 배치하는 과정이 시작되는 단계별 프로세스입니다. 그런 다음 OS를 설치해야 하며, 클러스터 크기가 큰 경우 실시간 환경에서 kickstart를 사용하여 수행할 수 있습니다. OS가 설치되면 Hadoop 설치를 위한 서버를 준비해야 하며, 조직의 보안 정책에 따라 서버를 준비해야 합니다.

요구 사항

  • CentOS/RHEL 7에 Hadoop 서버를 배포하기 위한 모범 사례 – 1부

이 글에서는 Cloudera에서 권장하는 OS 수준 전제 조건을 살펴보겠습니다. 또한 프로덕션 서버에 대한 CIS 벤치마크에 따라 몇 가지 중요한 보안 강화 팁을 강조했습니다. 이러한 보안 강화는 요구 사항에 따라 다를 수 있습니다.

Cloudera Hadoop 사전 요구 사항 설정

여기서는 Cloudera에서 권장하는 OS 수준 전제 조건에 대해 논의하겠습니다.

1. 투명 거대 페이지 비활성화

기본적으로 Transparent Huge Page(THP)는 Hadoop 작업 부하와 제대로 상호 작용하지 않는 Linux 시스템에서 활성화되어 클러스터의 전반적인 성능을 저하시킵니다. 따라서 최적의 성능을 얻으려면 다음 echo 명령을 사용하여 이를 비활성화해야 합니다.

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

2. VM 교체 변경

기본적으로 대부분의 Linux 시스템에서 vm.swappiness 값은 30 또는 60입니다.

sysctl vm.swappiness

Swappiness 값을 높게 설정하면 가비지 수집 일시 중지 시간이 길어질 수 있으므로 Hadoop 서버에서는 권장되지 않습니다. 그리고 swappiness 값이 높을수록 메모리가 충분하더라도 데이터를 스왑 메모리에 캐시할 수 있습니다. swappiness 값을 낮추면 실제 메모리에 더 많은 메모리 페이지가 포함될 수 있습니다.

sysctl vm.swappiness=1

또는 /etc/sysctl.conf 파일을 열고 끝에 "vm.swappiness=1"를 추가할 수 있습니다.

vm.swappiness=1

3. 방화벽 비활성화

각 Hadoop 서버는 해당 서버에서 실행되는 여러 서비스(데몬)에 대해 자체적인 책임을 집니다. 모든 서버는 다양한 목적을 위해 빈번하게 서로 통신합니다.

예를 들어, DatanodeNamenodeDatanode가 활성 상태인지 확인하도록 3초마다 Namenode에 하트비트를 보냅니다.

방화벽을 통해 여러 서버에 걸쳐 데몬 간에 모든 통신이 이루어지면 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. 크로니드 비활성화

위에서 언급했듯이 ntpd를 사용하므로 chronyd를 활성화할 필요가 없습니다. chronyd의 상태를 확인하고 실행 중인 경우 중지 및 비활성화합니다. 기본적으로 chronyd는 OS 설치 후 시작할 때까지 중지됩니다. 안전한 측면을 위해 비활성화해야 합니다.

systemctl status chronyd
systemctl disable chronyd

7. FQDN(정규화된 도메인 이름) 설정

FQDN(정규화된 도메인 이름)으로 호스트 이름을 설정해야 합니다. 각 서버에는 고유한 정식 이름이 있어야 합니다. 호스트 이름을 확인하려면 DNS 또는 /etc/hosts를 구성해야 합니다. 여기서는 /etc/hosts를 구성하겠습니다.

모든 서버의 /etc/hosts에는 각 서버의 IP 주소와 FQDN을 입력해야 합니다. 그러면 Cloudera Manager만이 호스트 이름으로 모든 서버와 통신할 수 있습니다.

hostnamectl set-hostname master1.linux-console.net

다음으로 /etc/hosts 파일을 구성합니다. 예: – 2개의 마스터와 3개의 워커가 있는 5개의 노드 클러스터가 있는 경우 /etc/hosts를 아래와 같이 구성할 수 있습니다.

8. JDK(Java Development Kit) 설치

HadoopJava로 구성되므로 모든 호스트에는 적절한 버전의 Java가 설치되어 있어야 합니다. 여기서는 OpenJDK를 사용하겠습니다. 기본적으로 Cloudera ManagerOracleJDK를 설치하지만 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 구성 파일에는 부팅 옵션을 잠금 해제하기 위한 부팅 설정 및 자격 증명에 대한 중요한 정보가 포함되어 있습니다. /boot/grub2에 있는 grub 구성 파일 'grub.cfg'는 /etc/grub2.conf로 링크되어 있으며 다음을 확인합니다. grub.cfg는 루트 사용자가 소유합니다.

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는 웹 콘텐츠를 호스팅하는 데 사용할 수 있는 프로토콜입니다. 마스터/관리 서버(CM, Hue 등과 같이 서비스의 WebUI가 구성되는 곳) 외에도 잠재적인 공격을 피할 수 있는 다른 작업자 노드에서 HTTP를 비활성화할 수 있습니다.

요약

Cloudera Hadoop 전제조건과 일부 보안 강화로 구성된 서버 준비를 거쳤습니다. Hadoop의 원활한 설치를 위해서는 Cloudera에서 정의한 OS 수준 사전 요구 사항이 필수입니다. 일반적으로 강화 스크립트는 CIS 벤치마크를 사용하여 준비되며 실시간으로 비준수를 감사하고 해결하는 데 사용됩니다.

CentOS/RHEL 7의 최소 설치에서는 기본 기능/소프트웨어만 설치되므로 원치 않는 위험과 취약점을 방지할 수 있습니다. 최소 설치임에도 불구하고 Hadoop을 설치하기 전, 클러스터를 구축한 후에도 클러스터를 운영/생산으로 이동하기 전에 보안 감사가 여러 번 반복됩니다.