序章

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

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

前提条件

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

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

公式リポジトリからのMemcachedのインストール

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

  1. sudo yum update

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

  1. sudo yum install memcached

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

  1. sudo yum install libmemcached

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

Memcached構成設定の保護

Memcachedインスタンスがローカルインターフェースでリッスンしていることを確認するには 127.0.0.1、変更します OPTIONS にある構成ファイルの変数 /etc/sysconfig/memcached. また、UDPリスナーを無効にします。 これらのアクションは両方とも、サービス拒否攻撃からサーバーを保護します。

開くことができます /etc/sysconfig/memcachedvi:

  1. sudo vi /etc/sysconfig/memcached

を見つけます OPTIONS 変数。最初は次のようになります。

/ etc / sysconfig / memcached
. . .
OPTIONS=""

ローカルネットワークインターフェイスにバインドすると、同じマシン上のクライアントへのトラフィックが制限されます。 追加することでこれを行います -l 127.0.0.1 私たちに OPTIONS 変数。 これは特定の環境では制限が厳しすぎる可能性がありますが、セキュリティ対策として適切な出発点となる可能性があります。

UDPプロトコルはTCPよりもサービス拒否攻撃に対してはるかに効果的であるため、UDPリスナーを無効にすることもできます。 これを行うには、を追加します -U 0 私たちのパラメータ OPTIONS 変数。 完全なファイルは次のようになります。

/ etc / sysconfig / memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -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 にバインドされています 127.0.0.1 TCPのみを使用するアドレス。

許可ユーザーの追加

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

SASLサポートの構成

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

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

  1. memstat --servers="127.0.0.1"

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

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

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

  1. sudo vi /etc/sysconfig/memcached

両方を追加します -S-vv 私たちのパラメータ OPTIONS 変数。 The -vv オプションは、詳細な出力を提供します /var/log/memcached、デバッグ時に役立ちます。 これらのオプションをに追加します OPTIONS 次のように変数:

/ etc / sysconfig / memcached
. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -vv" 

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

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

  1. sudo systemctl restart memcached

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

  1. sudo journalctl -u memcached

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

Output
. . . Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL. . . .

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

  1. memstat --servers="127.0.0.1"

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

  1. echo $?

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

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

これで、 PLAIN 認証スキームをサポートするプラグインを含む、CyrusSASLライブラリとその認証メカニズムを操作できるようにする2つのパッケージをダウンロードできます。 これらのパッケージ、 cyrus-sasl-develcyrus-sasl-plain、ユーザーを作成して認証できるようになります。 次のように入力してパッケージをインストールします。

  1. sudo yum install cyrus-sasl-devel cyrus-sasl-plain

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

  1. sudo mkdir -p /etc/sasl2
  2. sudo vi /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

最後に、 memcached SASLデータベースに対するユーザーの所有権:

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

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

  1. sudo systemctl restart memcached

ランニング memstat 再度、認証プロセスが機能したかどうかを確認します。 今回は、認証資格情報を使用して実行します。

  1. memstat --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サポートとユーザー認証で正常に実行されています。

プライベートネットワーク経由のアクセスを許可する

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

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

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

構成設定を調整する前に、ファイアウォールルールを設定して、Memcachedサーバーに接続できるマシンを制限することをお勧めします。 前提条件に従い、サーバーにFirewallDをインストールし、別のホストからMemcachedに接続する計画をしないする場合は、ファイアウォールルールを調整する必要はありません。 スタンドアロンのMemcachedインスタンスがリッスンしている必要があります 127.0.0.1、 おかげ OPTIONS 以前に定義した変数であるため、着信トラフィックについて心配する必要はありません。 ただし、他のホストからMemcachedサーバーへのアクセスを許可する場合は、を使用してファイアウォール設定を変更する必要があります。 firewall-cmd 指図。

専用のMemcachedゾーンをに追加することから始めます firewalld ポリシー:

  1. sudo firewall-cmd --permanent --new-zone=memcached

次に、開いたままにするポートを指定します。 Memcachedはポートを使用します 11211 デフォルト:

  1. sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

次に、Memcachedへのアクセスを許可するプライベートIPアドレスを指定します。 このためには、クライアントサーバーのプライベートIPアドレスを知っている必要があります。

  1. sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

ファイアウォールをリロードして、新しいルールが有効になるようにします。

  1. sudo firewall-cmd --reload

これで、クライアントのIPアドレスからのパケットは、専用のMemcachedゾーンのルールに従って処理されるはずです。 他のすべての接続はデフォルトで処理されます public ゾーン。

これらの変更が適切に行われると、Memcachedサービスに必要な構成変更を加えて、サーバーのプライベートネットワークインターフェイスにバインドすることができます。

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

サーバーのプライベートネットワークインターフェイスにバインドする最初のステップは、 OPTIONS 以前に設定した変数。

開くことができます /etc/sysconfig/memcached もう一度入力して:

  1. sudo vi /etc/sysconfig/memcached

内部で、 OPTIONS 変数。 これで変更できます -l 127.0.0.1 MemcachedサーバーのプライベートIPを反映するには:

/ etc / sysconfig / memcached
. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

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

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をインストールして使用する方法に関するチュートリアルを参照してください。