前書き
Memcachedなどのメモリオブジェクトキャッシングシステムは、情報を一時的にメモリに保存し、頻繁にまたは最近要求されたレコードを保持することにより、バックエンドデータベースのパフォーマンスを最適化できます。 このようにして、データベースへの直接リクエストの数を減らします。
Memcachedなどのシステムは、不適切に構成されているとサービス拒否攻撃に寄与する可能性があるため、Memcachedサーバーを保護することが重要です。 このガイドでは、インストールをローカルまたはプライベートネットワークインターフェイスにバインドし、Memcachedインスタンスの承認済みユーザーを作成して、Memcachedサーバーを保護する方法について説明します。
前提条件
このチュートリアルは、root以外のsudo
ユーザーと基本的なファイアウォールでサーバーがセットアップされていることを前提としています。 そうでない場合は、次を設定します。
-
Initial Server Setup with Ubuntu 18.04 tutorialに従ってセットアップされた1つのUbuntu18.04サーバー。
これらの前提条件が整ったら、Memcachedサーバーをインストールして保護する準備が整います。
[[step-1 -—- installing-memcached-from-the-official-repositories]] ==ステップ1—公式リポジトリからMemcachedをインストールする
サーバーにMemcachedがまだインストールされていない場合は、公式のUbuntuリポジトリからインストールできます。 まず、ローカルパッケージインデックスが更新されていることを確認します。
sudo apt update
次に、次のように公式パッケージをインストールします。
sudo apt install memcached
Memcachedサーバーで動作するいくつかのツールを提供するライブラリであるlibmemcached-tools
をインストールすることもできます。
sudo apt install libmemcached-tools
Memcachedは、接続をテストできるツールとともに、サーバーにサービスとしてインストールする必要があります。 これで、構成設定の保護に進むことができます。
[[step-2 -—- securing-memcached-configuration-settings]] ==ステップ2—Memcached構成設定の保護
Memcachedインスタンスがローカルインターフェース127.0.0.1
でリッスンしていることを確認するために、/etc/memcached.conf
にある構成ファイルのデフォルト設定を確認します。 UbuntuとDebianに同梱されている現在のバージョンのMemcachedでは、-l
パラメータがローカルインターフェイスに設定されており、ネットワークからのサービス拒否攻撃を防ぎます。 この設定を調べて、正しく設定されていることを確認できます。
nano
で/etc/memcached.conf
を開くことができます:
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サービスを再起動して、変更を適用します。
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
. . .
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2279/memcached
. . .
これにより、TCPのみを使用してmemcached
が127.0.0.1
アドレスにバインドされていることが確認されます。
[[step-3 -—- adding-authorized-users]] ==ステップ3—許可されたユーザーの追加
Memcachedサービスに認証済みユーザーを追加するために、認証手順をアプリケーションプロトコルから切り離すフレームワークであるSimple Authentication and Security Layer(SASL)を使用することができます。 Memcached構成ファイル内でSASLを有効にしてから、認証資格情報を持つユーザーの追加に進みます。
SASLサポートの構成
最初に、memcstat
コマンドを使用してMemcachedインスタンスの接続をテストできます。 これは、構成ファイルに変更を加えた後、SASLおよびユーザー認証が有効になっていることを確認するのに役立ちます。
Memcachedが稼働していることを確認するには、次を入力します。
memcstat --servers="127.0.0.1"
次のような出力が表示されるはずです。
OutputServer: 127.0.0.1 (11211)
pid: 2279
uptime: 65
time: 1546620611
version: 1.5.6
. . .
次に、SASLの有効化に進みます。 まず、-S
パラメータを/etc/memcached.conf
に追加します。 ファイルを再度開きます。
sudo nano /etc/memcached.conf
ファイルの最後に、次を追加します。
/etc/memcached.conf
. . .
-S
次に、-vv
オプションを見つけてコメントを外します。これにより、/var/log/memcached
に詳細な出力が提供されます。 コメントされていない行は次のようになります。
/etc/memcached.conf
. . .
-vv
ファイルを保存して閉じます。
Memcachedサービスを再起動します。
sudo systemctl restart memcached
次に、ログを見て、SASLサポートが有効になっていることを確認できます。
sudo journalctl -u memcached
SASLサポートが初期化されたことを示す次の行が表示されます。
Output. . .
Jan 04 16:51:12 memcached systemd-memcached-wrapper[2310]: Initialized SASL.
. . .
接続を再度確認できますが、SASLが初期化されているため、このコマンドは認証なしで失敗します。
memcstat --servers="127.0.0.1"
このコマンドは出力を生成しません。 次のように入力して、ステータスを確認できます。
echo $?
$?
は常に、最後に終了したコマンドの終了コードを返します。 通常、0
以外は、プロセスの失敗を示します。 この場合、1
の終了ステータスが表示されます。これは、memcstat
コマンドが失敗したことを示しています。
認証済みユーザーの追加
これで、SASLユーザーデータベースの管理プログラムを含むパッケージであるsasl2-bin
をダウンロードできます。 これにより、認証済みユーザーを作成できます。
sudo apt install sasl2-bin
次に、MemcachedがSASL構成設定を確認するディレクトリとファイルを作成します。
sudo mkdir /etc/sasl2
sudo nano /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データベースを作成します。 saslpasswd2
コマンドを使用して、-c
オプションを使用してデータベースにユーザーの新しいエントリを作成します。 ここでのユーザーはsammyになりますが、この名前を独自のユーザーに置き換えることができます。 -f
オプションを使用して、データベースへのパスを指定します。これは、/etc/sasl2/memcached.conf
で設定したパスになります。
sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
選択したパスワードを入力して再確認するように求められます。
最後に、SASLデータベースに対するmemcache
ユーザー所有権を付与します。
sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
Memcachedサービスを再起動します。
sudo systemctl restart memcached
memcstat
を再度実行すると、認証プロセスが機能したかどうかが確認されます。 今回は、認証資格情報を使用して実行します。
memcstat --servers="127.0.0.1" --username=sammy --password=your_password
次のような出力が表示されるはずです。
OutputServer: 127.0.0.1 (11211)
pid: 2772
uptime: 31
time: 1546621072
version: 1.5.6 Ubuntu
. . .
Memcachedサービスは、SASLサポートとユーザー認証で正常に実行されています。
[[step-4 -—- allowing-access-over-the-private-network-optional]] ==ステップ4—プライベートネットワーク経由のアクセスを許可する(オプション)
Memcachedインターフェイスを外部の第三者にさらされないように保護することにより、サービス拒否攻撃を防ぐことができるローカルインターフェイスでリッスンするようにMemcachedを構成する方法について説明しました。 ただし、他のサーバーからのアクセスを許可する必要がある場合があります。 この場合、構成設定を調整して、Memcachedをプライベートネットワークインターフェイスにバインドできます。
[.note]#Note:このセクションでは、UFWを使用してファイアウォール設定を構成する方法について説明しますが、DigitalOceanクラウドファイアウォールを使用してこれらの設定を作成することもできます。 DigitalOceanクラウドファイアウォールの設定の詳細については、Introduction to DigitalOcean Cloud Firewallsを参照してください。 特定のマシンへの着信トラフィックを制限する方法の詳細については、このチュートリアルのapplying firewall rules using tags and server namesに関するセクションと、firewall tags。
の説明を確認してください。
ファイアウォールによるIPアクセスの制限
構成設定を調整する前に、Memcachedサーバーに接続できるマシンを制限するファイアウォールルールを設定することをお勧めします。 ファイアウォールルールを構成するには、client server’s private IP addressを知る必要があります。 DigitalOceanのプライベートネットワークの詳細については、このoverview of DigitalOcean private networkingを参照してください。
UFWファイアウォールを使用している場合は、次のように入力して、Memcachedインスタンスへのアクセスを制限できます。
sudo ufw allow from client_server_private_IP/32 to any port 11211
ufw essentials guideを読むと、UFWファイアウォールの詳細を確認できます。
これらの変更を実施したら、Memcachedサービスを調整して、サーバーのプライベートネットワークインターフェースにバインドできます。
Memcachedをプライベートネットワークインターフェイスにバインドする
ファイアウォールが設置されたので、127.0.0.1
の代わりにサーバーのプライベートネットワークインターフェースにバインドするようにMemcached構成を調整できます。
次のように入力して、/etc/memcached.conf
ファイルを再度開くことができます。
sudo nano /etc/memcached.conf
内部で、以前にチェックまたは変更した-l 127.0.0.1
行を見つけ、サーバーのプライベートネットワークインターフェイスに一致するようにアドレスを変更します。
/etc/memcached.conf
. . .
-l memcached_server_private_IP
. . .
完了したら、ファイルを保存して閉じます。
次に、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
. . .
tcp 0 0 memcached_server_private_IP:11211 0.0.0.0:* LISTEN 2912/memcached
. . .
外部クライアントからの接続をテストして、引き続きサービスにアクセスできることを確認します。 許可されていないクライアントからのアクセスも確認して、ファイアウォールルールが有効であることを確認することをお勧めします。
結論
このチュートリアルでは、ローカルまたはプライベートネットワークインターフェイスにバインドするように構成し、SASL認証を有効にすることにより、Memcachedサーバーを保護する方法を説明しました。
Memcachedの詳細については、project documentationを確認してください。 Memcachedの操作方法の詳細については、How To Install and Use Memcache on Ubuntu 14.04に関するチュートリアルを参照してください。