序章

Memcachedなどのメモリオブジェクトキャッシングシステムは、情報をメモリに一時的に保存し、頻繁にまたは最近要求されたレコードを保持することで、バックエンドデータベースのパフォーマンスを最適化できます。 このようにして、データベースへの直接リクエストの数を減らします。

Memcachedのようなシステムは、不適切に構成されている場合、サービス拒否攻撃の原因となる可能性があるため、Memcachedサーバーを保護することが重要です。 このガイドでは、インストールをローカルまたはプライベートネットワークインターフェースにバインドし、Memcachedインスタンスの承認済みユーザーを作成することにより、Memcachedサーバーを保護する方法について説明します。

前提条件

このチュートリアルでは、root以外のsudoユーザーと基本的なファイアウォールがサーバーに設定されていることを前提としています。 そうでない場合は、次のように設定します。

  • 1つのUbuntu16.04サーバー。Ubuntu16.04チュートリアルを使用した初期サーバーセットアップに従ってセットアップします。

これらの前提条件が整っていると、Memcachedサーバーをインストールして保護する準備が整います。

ステップ1—公式リポジトリからMemcachedをインストールする

サーバーにMemcachedをまだインストールしていない場合は、公式のUbuntuリポジトリからインストールできます。 まず、ローカルパッケージインデックスが更新されていることを確認します。

  1. sudo apt-get update

次に、公式パッケージを次のようにインストールします。

  1. sudo apt-get install memcached

libmemcached-toolsをインストールすることもできます。これは、Memcachedサーバーと連携するためのいくつかのツールを提供するライブラリです。

  1. sudo apt-get install libmemcached-tools

これで、Memcachedが、接続をテストできるツールとともに、サーバーにサービスとしてインストールされます。 これで、構成設定の保護に進むことができます。

ステップ2—Memcached構成設定の保護

Memcachedインスタンスがローカルインターフェース127.0.0.1でリッスンしていることを確認するために、/etc/memcached.confにある構成ファイルのデフォルト設定を確認します。 UbuntuとDebianに同梱されている現在のバージョンのMemcachedでは、-lパラメーターがローカルインターフェイスに設定されており、ネットワークからのサービス拒否攻撃を防ぎます。 この設定を調べて、正しく設定されていることを確認できます。

/etc/memcached.confnanoで開くことができます。

  1. sudo nano /etc/memcached.conf

インターフェイス設定を調べるには、ファイル内で次の行を見つけます。

/etc/memcached.conf
. . .
-l 127.0.0.1

-l 127.0.0.1のデフォルト設定が表示されている場合は、この行を変更する必要はありません。 この設定をよりオープンに変更する場合は、UDPを無効にすることもお勧めします。これは、サービス拒否攻撃で悪用される可能性が高いためです。 (TCPに影響を与えずに)UDPを無効にするには、このファイルの最後に次のオプションを追加します。

/etc/memcached.conf
. . .
-U 0

完了したら、ファイルを保存して閉じます。

Memcachedサービスを再起動して、変更を適用します。

  1. sudo systemctl restart memcached

次のように入力して、Memcachedが現在ローカルインターフェイスにバインドされており、TCP接続のみをリッスンしていることを確認します。

  1. sudo netstat -plunt

次の出力が表示されます。

Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached . . .

これにより、memcachedがTCPのみを使用して127.0.0.1アドレスにバインドされていることが確認されます。

ステップ3—許可ユーザーの追加

認証されたユーザーをMemcachedサービスに追加するには、認証手順をアプリケーションプロトコルから切り離すフレームワークであるSimple Authentication and Security Layer(SASL)を使用できます。 Memcached構成ファイル内でSASLを有効にしてから、認証資格情報を持つユーザーの追加に進みます。

SASLサポートの構成

最初に、memcstatコマンドを使用してMemcachedインスタンスの接続をテストできます。 これは、構成ファイルに変更を加えた後、SASLとユーザー認証が有効になっていることを確認するのに役立ちます。

Memcachedが稼働していることを確認するには、次のように入力します。

  1. memcstat --servers="127.0.0.1"

次のような出力が表示されます。

Output
Server: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .

これで、SASLの有効化に進むことができます。 まず、-Sパラメータを/etc/memcached.confに追加します。 ファイルを再度開きます。

  1. sudo nano /etc/memcached.conf

ファイルの最後に、以下を追加します。

/etc/memcached.conf
. . .
-S

次に、-vvオプションを見つけてコメントを外します。これにより、/var/log/memcachedに詳細な出力が提供されます。 コメントされていない行は次のようになります。

/etc/memcached.conf
. . .
-vv

ファイルを保存して閉じます。

Memcachedサービスを再起動します。

  1. sudo systemctl restart memcached

次に、ログを調べて、SASLサポートが有効になっていることを確認できます。

  1. sudo journalctl -u memcached

SASLサポートが初期化されたことを示す次の行が表示されます。

Output
. . . Mar 02 22:03:58 memcached systemd-memcached-wrapper[2760]: Initialized SASL. . . .

接続を再度確認できますが、SASLが初期化されているため、このコマンドは認証なしで失敗するはずです。

  1. memcstat --servers="127.0.0.1"

このコマンドは出力を生成しません。 次のように入力して、ステータスを確認できます。

  1. echo $?

$?は、最後に終了したコマンドの終了コードを常に返します。 通常、0以外は、プロセスの失敗を示します。 この場合、1の終了ステータスが表示されます。これは、memcstatコマンドが失敗したことを示しています。

認証されたユーザーの追加

これで、SASLユーザーデータベースの管理プログラムを含むパッケージであるsasl2-binをダウンロードできます。 これにより、認証されたユーザーを作成できます。

  1. sudo apt-get install sasl2-bin

次に、MemcachedがSASL構成設定を確認するディレクトリとファイルを作成します。

  1. sudo mkdir -p /etc/sasl2
  2. sudo nano /etc/sasl2/memcached.conf

SASL構成ファイルに以下を追加します。

/etc/sasl2/memcached.conf
mech_list: plain
log_level: 5
sasldb_path: /etc/sasl2/memcached-sasldb2

ログレベルを指定することに加えて、mech_listplainに設定します。これにより、Memcachedは独自のパスワードファイルを使用し、プレーンテキストのパスワードを確認する必要があります。 次に作成するユーザーデータベースファイルへのパスも指定します。 終了したら、ファイルを保存して閉じます。

次に、ユーザー資格情報を使用してSASLデータベースを作成します。 saslpasswd2コマンドを使用して、-cオプションを使用してデータベースにユーザーの新しいエントリを作成します。 ここでのユーザーはsammyになりますが、この名前を自分のユーザーに置き換えることができます。 -fオプションを使用して、データベースへのパスを指定します。これは、/etc/sasl2/memcached.confで設定したパスになります。

  1. sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

最後に、SASLデータベースに対するmemcacheユーザー所有権を付与します。

  1. sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2

Memcachedサービスを再起動します。

  1. sudo systemctl restart memcached

memcstatを再度実行すると、認証プロセスが機能したかどうかが確認されます。 今回は、認証資格情報を使用して実行します。

  1. memcstat --servers="127.0.0.1" --username=sammy --password=your_password

次のような出力が表示されます。

Output
Server: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .

Memcachedサービスは、SASLサポートとユーザー認証で正常に実行されています。

ステップ4—プライベートネットワーク経由のアクセスを許可する(オプション)

ローカルインターフェースでリッスンするようにMemcachedを構成する方法について説明しました。これにより、Memcachedインターフェースを外部の第三者にさらされることから保護することで、サービス拒否攻撃を防ぐことができます。 ただし、他のサーバーからのアクセスを許可する必要がある場合があります。 この場合、構成設定を調整して、Memcachedをプライベートネットワークインターフェイスにバインドできます。

注:このセクションでは、 UFW を使用してファイアウォール設定を構成する方法について説明しますが、DigitalOceanクラウドファイアウォールを使用してこれらの設定を作成することもできます。 DigitalOceanクラウドファイアウォールの設定の詳細については、DigitalOceanCloudファイアウォールの概要を参照してください。 特定のマシンへの着信トラフィックを制限する方法の詳細については、タグとサーバー名を使用したファイアウォールルールの適用に関するこのチュートリアルのセクションと、ファイアウォールタグの説明を確認してください。

ファイアウォールによるIPアクセスの制限

構成設定を調整する前に、ファイアウォールルールを設定して、Memcachedサーバーに接続できるマシンを制限することをお勧めします。 ファイアウォールルールを構成するには、クライアントサーバーのプライベートIPアドレスを知っている必要があります。

UFW ファイアウォールを使用している場合は、次のように入力して、Memcachedインスタンスへのアクセスを制限できます。

  1. sudo ufw allow from client_servers_private_IP/32 to any port 11211

ufwエッセンシャルガイドを読むと、UFWファイアウォールの詳細を確認できます。

これらの変更を適切に行うと、サーバーのプライベートネットワークインターフェイスにバインドするようにMemcachedサービスを調整できます。

Memcachedをプライベートネットワークインターフェイスにバインドする

ファイアウォールが設置されたので、127.0.0.1の代わりに、サーバーのプライベートネットワークインターフェイスにバインドするようにMemcached構成を調整できます。

次のように入力すると、/etc/memcached.confファイルを再度開くことができます。

  1. sudo nano /etc/memcached.conf

内部で、以前にチェックまたは変更した-l 127.0.0.1行を見つけ、サーバーのプライベートネットワークインターフェイスと一致するようにアドレスを変更します。

/etc/memcached.conf
. . .
-l memcached_servers_private_IP
. . .

終了したら、ファイルを保存して閉じます。

次に、Memcachedサービスを再起動します。

  1. sudo systemctl restart memcached

netstatで新しい設定を確認して、変更を確認します。

  1. sudo netstat -plunt
Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached . . .

外部クライアントからの接続をテストして、引き続きサービスにアクセスできることを確認します。 許可されていないクライアントからのアクセスもチェックして、ファイアウォールルールが有効であることを確認することをお勧めします。

結論

このチュートリアルでは、Memcachedサーバーをローカルまたはプライベートネットワークインターフェイスにバインドするように構成し、SASL認証を有効にすることでサーバーを保護する方法について説明しました。

Memcachedの詳細については、プロジェクトのドキュメントをご覧ください。 Memcachedの操作方法の詳細については、 Ubuntu14.04にMemcacheをインストールして使用する方法に関するチュートリアルを参照してください。