Hadoop の前提条件のセットアップとセキュリティ強化 - パート 2
Hadoop クラスタの構築は、必要なサーバーの購入、ラックへの取り付け、ケーブル配線など、データセンターへの配置から始まる段階的なプロセスです。次に、OS をインストールする必要があります。クラスターのサイズが大きい場合は、リアルタイム環境でキックスタートを使用してインストールできます。 OS をインストールしたら、Hadoop インストール用にサーバーを準備する必要があり、組織のセキュリティ ポリシーに従ってサーバーを準備する必要があります。
要件
- CentOS/RHEL 7 に Hadoop サーバーを導入するためのベスト プラクティス – パート 1
この記事では、Cloudera が推奨する OS レベルの前提条件について説明します。また、 運用サーバーのCIS ベンチマークに基づいて、セキュリティ強化に関する重要なヒントをいくつか紹介しました。これらのセキュリティ強化は要件に応じて異なります。
Cloudera Hadoop の前提条件のセットアップ
ここではClouderaが推奨する OS レベルの前提条件について説明します。
1. 透明な巨大ページを無効にする
デフォルトでは、透過的ヒュージ ページ (THP) は Linux マシンで有効になっており、Hadoop ワークロードとの対話が不十分であり、クラスターの全体的なパフォーマンスが低下します。したがって、最適なパフォーマンスを実現するには、次の 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
スワップネスの値を大きくすると、ガベージ コレクションの一時停止が長くなる可能性があるため、Hadoop サーバーでは推奨されません。また、スワップネスの値が高くなると、十分なメモリがある場合でも、データをキャッシュしてメモリをスワップできます。スワッピーの値を下げると、物理メモリに含まれるメモリ ページが増える可能性があります。
sysctl vm.swappiness=1
または、ファイル /etc/sysctl.conf を開き、最後に "vm.swappiness=1"
を追加します。
vm.swappiness=1
3. ファイアウォールを無効にする
各 Hadoop サーバーは独自の責任を負い、その上で複数のサービス (デーモン) が実行されます。すべてのサーバーは、さまざまな目的で頻繁に相互に通信します。
たとえば、データノードは 3 秒ごとにハートビートをネームノードに送信し、ネームノードがデータノードが生きていることを確認します。
すべての通信がファイアウォールを介して異なるサーバーにまたがるデーモン間で行われる場合、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. クロニドを無効にする
上で述べたように、ntpd を使用しているため、chronyd をアクティブにする必要はありません。 chronyd のステータスを確認し、実行中の場合は停止して無効にします。デフォルトでは、chronyd は OS のインストール後に起動するまで停止していますが、安全のために無効にする必要があります。
systemctl status chronyd
systemctl disable chronyd
7. FQDN(完全修飾ドメイン名)の設定
ホスト名をFQDN (完全修飾ドメイン名) で設定する必要があります。各サーバーには一意の正規名が必要です。ホスト名を解決するには、DNS または /etc/hosts を設定する必要があります。ここでは、/etc/hosts を構成します。
各サーバーの IP アドレスと FQDN は、すべてのサーバーの /etc/hosts に入力する必要があります。次に、Cloudera Manager のみがそのホスト名を使用してすべてのサーバーと通信できます。
hostnamectl set-hostname master1.linux-console.net
次に、/etc/hosts ファイルを構成します。例: – 2 つのマスターと 3 つのワーカーを持つ 5 ノードのクラスターがある場合、/etc/hosts を次のように構成できます。
8. Java 開発キット (JDK) のインストール
Hadoop は Java で構成されているため、すべてのホストに適切なバージョンの Java がインストールされている必要があります。ここではOpenJDKを使用します。デフォルトでは、Cloudera Manager は OracleJDK をインストールしますが、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 構成ファイルには、ブート設定とブート オプションのロックを解除するための資格情報に関する重要な情報が含まれています。 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. ブートローダーのパスワードを設定する
この設定により、その他の不正なサーバーの再起動が回避されます。つまり、サーバーを再起動するにはパスワードが必要です。設定されていない場合、権限のないユーザーがサーバーを起動し、ブート パーティションを変更できます。
以下のコマンドを使用してパスワードを設定します。
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 は、Web コンテンツをホストするために使用できるプロトコルです。マスター/管理サーバー (CM、Hue などのサービスの WebUI が設定されるサーバー) とは別に、他のワーカー ノードで HTTP を無効にすることで、潜在的な攻撃を回避できます。
まとめ
Cloudera Hadoop の前提条件といくつかのセキュリティ強化で構成されるサーバーの準備を完了しました。 Hadoop をスムーズにインストールするには、Cloudera によって定義された OS レベルの前提条件が必須です。通常、強化スクリプトは CIS ベンチマークを使用して準備され、リアルタイムで非準拠を監査および修復するために使用されます。
CentOS/RHEL 7 の最小限のインストールでは、基本的な機能/ソフトウェアのみがインストールされるため、望ましくないリスクや脆弱性が回避されます。最小限のインストールであっても、Hadoop のインストール前、クラスターの構築後、クラスターを運用/運用に移行する前に、複数回のセキュリティ監査が実行されます。