CentOS 7にMemcachedをインストールして保護する方法

前書き

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

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

前提条件

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

  • 1台のCentOS 7サーバー。https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [CentOS 7による初期サーバーセットアップチュートリアル]に従ってセットアップします。

  • FirewallD、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7#install-and-enable-your-firewallに従って構成-to-start-at-boot [FirewallDをCentOS 7で使用する方法についてのガイドの「ファイアウォールをインストールして起動時に起動できるようにする」]セクション

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

公式リポジトリからMemcachedをインストールする

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

sudo yum update

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

sudo yum install memcached

Memcachedサーバーで動作するいくつかのツールを提供するライブラリである `+ libmemcached +`をインストールすることもできます。

sudo yum install libmemcached

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

Memcached構成設定の保護

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

`+ vi `で ` / etc / sysconfig / memcached +`を開くことができます:

sudo vi /etc/sysconfig/memcached

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

/ etc / sysconfig / memcached

. . .
OPTIONS=""

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

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

/ etc / sysconfig / memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

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

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

sudo systemctl restart memcached

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

sudo netstat -plunt

次のような出力が表示されるはずです。

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

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

許可ユーザーの追加

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

SASLサポートの構成

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

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

memstat --servers="127.0.0.1"

次のような出力が表示されるはずです。

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

次に、SASLの有効化に進みます。 最初に、 `+ -S `パラメータを ` / etc / sysconfig / memcached `の ` OPTIONS +`変数に追加し、SASLを有効にします。 ファイルを再度開きます。

sudo vi /etc/sysconfig/memcached

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

/ etc / sysconfig / memcached

. . .
OPTIONS=""

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

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

sudo systemctl restart memcached

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

sudo journalctl -u memcached

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

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

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

memstat --servers="127.0.0.1"

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

echo $?

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

認証済みユーザーの追加

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

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

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

sudo mkdir -p /etc/sasl2
sudo vi /etc/sasl2/memcached.conf

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

/etc/sasl2/memcached.conf

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

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

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

sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2

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

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

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

sudo systemctl restart memcached

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

memstat --servers="127.0.0.1" --username= --password=

次のような出力が表示されるはずです。

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

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

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

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

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

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

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

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

次に、開いておくポートを指定します。 Memcachedはデフォルトでポート `+ 11211 +`を使用します:

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

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

sudo firewall-cmd --permanent --zone=memcached --add-source=

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

sudo firewall-cmd --reload

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

これらの変更を行ったら、Memcachedサービスに必要な構成変更を行い、サーバーのプライベートネットワークインターフェイスにバインドします。

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

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

次のように入力して、 `+ / etc / sysconfig / memcached +`を再度開くことができます。

sudo vi /etc/sysconfig/memcached

内部で、 `+ OPTIONS `変数を見つけます。 MemcachedサーバーのプライベートIPを反映するように「 -l 127.0.0.1+」を変更できるようになりました。

/ etc / sysconfig / memcached

. . .
OPTIONS="-l  -U 0 -S -vv"

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

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

sudo systemctl restart memcached

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

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

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

結論

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

Memcachedの詳細については、https://memcached.org/about [project documentation]をご覧ください。 Memcachedの使用方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-memcache-on-ubuntu-14-04 [How To]のチュートリアルを参照してください。 Ubuntu 14.04でMemcacheをインストールして使用します]。

Related