このガイドでは、Alibaba Cloud Elastic Compute Service (ECS)上でホストされているCentOS 7サーバの初期セットアップのベストプラクティスについて説明します。
Alibaba Cloud Tech Share執筆、 Francis Ndungu。 Tech Shareは、技術的な知識やベストプラクティスをクラウドコミュニティ内で共有することを奨励するAlibaba Cloudのインセンティブプログラムです。
Alibaba Cloud Elastic Compute Service (ECS)は、従来の物理サーバと比較して、クラウドアプリケーションをより高速かつ強力に実行する方法を提供します。クラウドのニーズに対して大きな成果を得ることができます。ECSを使用すると、最新世代のCPUでより多くの成果を得ることができるだけでなく、DDoSやトロイの木馬の攻撃からインスタンスを保護することができます。
このガイドでは、Alibaba Cloud Elastic Compute Service (ECS) インスタンス上でホストされた CentOS 7 サーバーをプロビジョニングするためのベストプラクティスについて説明します。
前提条件
1、有効なAlibaba Cloudアカウント。まだお持ちでない場合は、無料トライアルにサインアップして、最大300ドル相当のAlibaba Cloud製品をお楽しみください。
2、CentOS 7を実行しているECSインスタンス。お好みのリージョンと構成を選択できます。
3、サーバーのルートパスワード。
ステップ1: Alibaba Cloud CentOS 7サーバーに接続
Alibaba Cloud ECSインスタンスに関連付けられたインターネットIPアドレス(パブリックIPアドレス)を探します。
LinuxまたはMacを実行している場合は、ターミナルアプリケーションを使用してSSH経由でインスタンスに接続します。Windowsをお使いの場合は、PuTTy(こちらからダウンロード)を使用してサーバーに接続することができます。SSH経由でログインするには、Alibaba Cloud ECSインスタンスを作成した際に設定したIPアドレス、ユーザー名、パスワードを入力する必要があります。
ECSインスタンスに接続する方法は他にもあります。詳しくはECSの公式ドキュメントをご覧ください。
ステップ2: CentOS 7サーバのホスト名を変更
ホスト名は、Linux サーバと通信する際のデフォルトの識別子です。これは、自宅のPCやラップトップに関連付けられたコンピュータ名のようなものです。CentOS 7 サーバに説明的なホスト名を付けることで、特に複数のマシンを運用している場合には、マシンを区別するのに役立ちます。
開始するには、以下のコマンドを入力して、CentOS 7 システムが最新の状態であることを確認します。
$ sudo yum update
ホスト名を確認するには、ターミナルウィンドウで以下のコマンドを入力します。
$ hostname
ホスト名を変更するには、以下のコマンドでnanoテキストエディタをインストールする必要があります。
$ sudo yum install nano
次に、/etc/cloud/cloud.cfg ファイルを編集して、 preserve_hostname というエントリを見つけます。その値を false から true に変更します。
$ sudo nano /etc/cloud/cloud.cfg
preserve_hostname true
CTRL + X, Yを押してからEnterを押して終了し、変更を保存します。
次に、以下のコマンドを入力して、nanoエディタを使って/etc/hostnameファイルを編集します。
$ sudo nano /etc/hostname
ファイルの一番上に書かれている現在のホスト名を上書きし、CTRL + X, Y を押してから Enter を押して変更を保存します。
また、Linux hosts ファイルにいくつかのエントリを追加する必要があります。テキストエディタを使ってファイルを開きます。
$ sudo nano /etc/hosts
このファイルの 127.0.0.0.1 localhost エントリのすぐ下に 2 つのエントリを追加する必要があります。最初に追加するエントリは、ループバックインターフェースのアドレス 127.0.1.1 を使用します。これは、同じファイル内の 'localhost' の値を持つ 127.0.0.1 とは異なることに注意してください。
サーバのパブリックIPアドレスが111.111.111.111.111で、ホスト名がmiamiだとすると、/etc/hostsファイルの一番上に以下のようなエントリがあるはずです。
127.0.0.1 localhost
127.0.1.1 miami
111.111.111.111 miami
以下のコマンドを入力して、Alibaba Cloud ECSインスタンスを再起動して変更を有効にします。
$ sudo reboot
ステップ3: CentOS 7サーバでタイムゾーンを設定する
以下のコマンドを入力することで、Alibaba Cloud CentOS 7サーバーのデフォルトの日付とタイムゾーンを確認することができます。
$ timedatectl
特にCentOS 7サーバ上でcronジョブを実行している場合は、日付と時刻に大きく依存するため、正しいタイムゾーンを設定する必要があります。タイムゾーンを変更するには、以下のコマンドを使用します。
$ sudo timedatectl set-timezone
例えば、サーバーのタイムゾーンをロンドンに設定するには、以下のコマンドを使用します。
$ sudo timedatectl set-timezone Europe/London
dateコマンドを実行して、変更が成功したかどうかを確認することができます。
$ date
ステップ4: CentOS 7上でSudo権限を持つ非rootユーザーを作成する
ルートユーザを使ってCentOS 7サーバにログインすると、多くの問題が発生する可能性があります。例えば、間違ったパラメータを入力して単純な 'rm' コマンドを実行すると、本番環境のサーバデータ全体が消去されてしまう可能性があります。
そのため、sudo 権限を持つ非 root ユーザーを作成する必要があります。必要に応じて sudo コマンドを使用して、一時的に権限を昇格させることができます。
ユーザーを作成するには、以下のコマンドを使用します。
$ sudo adduser
例えば、サーバにjamesとして識別されるユーザを追加するには、以下のコマンドを使用します。
$ sudo adduser james
次に、上記で作成したユーザーにパスワードを割り当てます。
$ sudo passwd james
ユーザーのパスワードを入力するように促されます。
次に、次のように入力してsudoコマンドで管理タスクを実行する機能を割り当てるために、ユーザーをホイールグループに追加する必要があります。
$ sudo gpasswd -a james wheel
jamesをお好みの正しいユーザー名に置き換えることを忘れないでください。
ステップ5: CentOS 7サーバにログインするための認証キーペアを作成する
秘密鍵と公開鍵のペアを使用してCentOS 7サーバにログインすると、パスワードを使用するよりも安全です。このモードでは、秘密鍵をローカルコンピュータに、公開鍵を Alibaba Cloud サーバ上の .ssh/authorized_keys ファイルの下に保持します。
この技術は、公開鍵を介してサーバから送信されたデータを暗号化し、ユーザは、あなただけが知っている正しい秘密鍵を使用して復号化することができます。このようにして使用される鍵は、最も機知に富んだハッカーであっても推測することはできません。また、秘密鍵をパスフレーズで保護することで、悪意のある人の手に落ちた場合に備えて、セキュリティの別の層を追加することもできます。
PuTTY key Generator (ダウンロードはこちら) のようなツールを使って秘密鍵/公開鍵のペアを生成することができます。
鍵を生成するユーザーとしてログインしていることを確認してください。また、以下のコマンドは 'sudo' を使って実行しないでください。
以下のコマンドを使って、公開鍵の部分をCentOS 7のサーバにコピーします。
$ mkdir ~/.ssh
そして、nanoエディタを使って、authorized_keysファイルに自分の公開鍵をタイプして貼り付けます。
$ nano ~/.ssh/authorized_keys
以下のコマンドを入力してファイルを保護します。
$ chmod 700 -R ~/.ssh && chmod 600 ~/.ssh/authorized_keys
鍵を作成したら、SSH接続で作成したユーザ名と秘密鍵を使って、CentOS 7サーバにログインできるようになります。
ステップ6: CentOS 7サーバでパスワード認証を無効にする
秘密鍵と公開鍵のペアを設定したら、パスワードベースのログインを無効にしてください。これにより、正しい秘密鍵を持った人だけが CentOS 7 サーバにアクセスできるようになります。
これを行うには、以下のコマンドで SSH 設定ファイルを編集します。
$ sudo nano /etc/ssh/sshd_config
「PasswordAuthentication」の行を見つけ、値を「yes」から「no」に変更します。
PasswordAuthentication no
SSH デーモンを再起動します。
$ sudo service sshd restart
ステップ7: CentOS 7サーバでSSHルートアクセスを無効にする
sudo 権限とパスワードによるログインを無効にした非 root ユーザを作成したら、SSH 経由での root ログインを無効にしてください。これにより、誰もrootユーザ名を使ってSSH経由でCentOS 7サーバにログインできないようになります。
この時点からの管理作業は、sudo権限を持つ非rootユーザが行うことになります。
SSH 経由での root アクセスを無効にするには、nano エディタで SSH 設定ファイルを編集し、PermitRootLogin ディレクティブを探して、その値を yes から no に変更します。
$ sudo nano /etc/ssh/sshd_config
PermitRootLogin no
変更を有効にするには、以下のコマンドを入力して SSH デーモンを再起動してください。
$ sudo service sshd restart
ステップ8: CentOS 7サーバーにファイアウォールをインストールする
CentOS 7では、UFW(Uncomplicated Firewall)と呼ばれるツールを使ってIPテーブルを操作することができます。UFWは、特にLinux環境に慣れていない初心者のために、IPテーブルの設定プロセスを簡素化することを目的としたツールです。
UFWは、Alibaba Cloud上で動作するCentOS 7サーバに別のセキュリティを追加するのに適しています。
以下のコマンドを使用してインストールすることができます。
$ sudo yum install ufw
次に、以下のコマンドを入力して、すべての発信通話を許可し、着信を拒否または着信するようにします。
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
以下のUFWコマンドを使用して、特定のポートやサービスへのトラフィックを許可することができます。
$ sudo ufw allow
CentOS 7 サーバから完全にロックされないようにするために、UFW で最初に許可するポート/サービスは 22 番ポートで SSH 接続を待ち受けています。
これを行うには、以下のコマンドを入力してルールを追加します。
$ sudo ufw allow 22
または
$ sudo ufw allow ssh
また、Webサーバーを運用している場合は、httpポートとhttpsポートを有効にしておきましょう。
$ sudo ufw allow http
$ sudo ufw allow https
サービスをホワイトリストに登録したら、以下のコマンドを実行してUFWを起動します。
$ sudo ufw enable
作成したルールは、まず番号を確認してから以下のコマンドで削除することで削除できます。
$ sudo ufw status numbered
$ sudo ufw delete
ここで、<rule number>は、利用可能なルールのリストから上記の値を取得したものです。
ルール一覧を確認する前に、UFWが有効になっていることを確認してください。
以下のコマンドを入力することで、いつでもUFWを無効にすることができます。
$ sudo ufw disable
または、タイプしてすべてのルールをリセットします。
$ sudo ufw reset
ステップ9: CentOS 7サーバにFail2Banをインストールする
Fail2Banは、IPテーブルを利用してCentOS 7サーバにセキュリティの別のレイヤーを追加するツールです。Fail2Banは、ログインに失敗した回数に基づいて、サーバーにアクセスしようとするユーザーを禁止します。
Fail2Banをインストールするには、以下のコマンドを入力します。
$ sudo yum install fail2ban
サーバーはデフォルトのFail2Banの設定で使用できますが、必要に応じて設定ファイルを編集して変更することができます。すべてのFail2Ban設定ファイルは、'/etc/fail2ban/'ディレクトリにあります。
デフォルトでは、.confファイルが最初に読み込まれ、その後に.localファイルが続きます。そのため、設定を上書きしたい場合は、.local ファイルに変更を加え、.conf ファイルはそのままにしておく必要があります。
例えば、以下のコマンドを使用して、jail.confファイルのコピーを作成し、編集用のローカルファイルを作成することができます。
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
その後、以下のコマンドで新しいファイルを編集することで、Fail2Banの設定を変更することができます。
$ sudo nano /etc/fail2ban/jail.local
ほとんどの場合、SSH 接続の禁止時間、検索時間、リトライ回数の最大値を設定することになります。これはすべて、CentOS 7 サーバに必要なセキュリティレベルに依存します。
まとめ
これで完了です。
Alibaba Cloud Elastic Compute Service(ECS)上で動作するCentOS 7サーバのプロビジョニングに成功しました。これは、サーバをセットアップする際に取るべきLinuxのセキュリティ対策の決定的なリストではありませんが、特にECSを使い始めたばかりの場合は、ハッカーを遠ざけることができます。これで、Web サイトや Web アプリケーションを実行するための Web サーバとデータベースサーバをインストールすることができます。チュートリアルを読んで楽しんでいただけたでしょうか?
Alibaba Cloudは初めてですか?アカウントにサインアップして、40以上の製品を無料でお試しください。または、Getting Started with Alibaba Cloudをご覧ください。
本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。
アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ