Ubuntu20.04にMemcachedをインストールして保護する方法

このチュートリアルの以前のバージョンはKathleen Juellによって書かれました。

はじめに

Memcachedのようなメモリオブジェクトキャッシュシステムは、メモリに情報を一時的に格納し、頻繁にまたは最近要求されたレコードを保持する このようにして、データベースへの直接要求の数を減らします。

このガイドでは、Memcachedサーバーをインストールおよび構成する方法を学習します。 また、Simple Authentication and Security Layer(SASL)を使用してmemcachedを保護するために認証を追加する方法についても説明します。 最後に、Memcachedをローカルまたはプライベートネットワークインターフェイスにバインドして、認証されたユーザーが信頼できるネットワーク上でのみアクセ

前提条件

このチュートリアルを実行するには、次のものが必要です:

  • sudo非rootユーザーとファイアウォールが有効になっているUbuntu20.04サーバー。 これを設定するには、Ubuntu20.04を使用した初期サーバー設定チュートリアルに従ってください。

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

または、対話型端末を使用してMemcachedをブラウザにインストールして設定することを実験したい場合は、対話型端末を起動をクリックしてください。 開始するには、以下のボタン。

インタラクティブ端末を起動!

ステップ1—Memcachedのインストール

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

  • sudo apt update

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

  • sudo apt install memcached

また、Memcachedサーバーの検査、テスト、および管理に使用できるさまざまなツールを含むパッケージであるlibmemcached-toolsをインストールすることもできます。 次のコマンドを使用して、サーバーにパッケージを追加します:

  • sudo apt install libmemcached-tools

Memcachedは、接続性をテストできるツールとともに、サーバー上のサービスとしてインストールする必要があります。

Memcachedを起動するには、次のsystemctlコマンドを実行します:

  • sudo systemctl start memcached

今、あなたはその構成設定を保護することに進むことができます。

ステップ2—Memcachedネットワーク設定の構成(オプション)

MemcachedサーバーがTCPを使用したローカルIpv4接続のみをサポートする必要がある場合は、このセクションをスキップして、このチュートリアルのステップ3に進むことができます。 それ以外の場合は、UDPソケット、Unixドメインソケットを使用するようにMemcachedを構成したり、Ipv6接続のサポートを追加したりする場合は、チュートリアルのこのセ

まず、MemcachedインスタンスがローカルIpv4ループバックインターフェイス127.0.0.1でリッスンしていることを確認します。 UbuntuおよびDebianに同梱されている現在のバージョンのMemcachedには、-l設定パラメータがローカルインターフェイスに設定されています。

Memcachedが現在ローカルIpv4127.0.0.1インターフェイスにバインドされており、ssコマンドを使用してTCP接続のみをリッスンしていることを確認します:

  • sudo ss -plunt

さまざまなフラグは、次の方法でss出力を変更します:

  • -p ソケットを使用しているプロセスの名前を追加します
  • -lは、他のシステムに接続されているソケットを含めるのではなく、listenソケットのみに出力を制限します
  • -uは、UDPベースのソケットを出力に含めます
  • -nは、人間が読める名前と値の代わりに出力に数値を表示します
  • -tは、TCPベースのソケットを出力に含めます。出力

次のような出力を受け取る必要があります:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26)). . .

この出力は、memcachedがTCPプロトコルのみを使用してIpv4ループバック127.0.0.1アドレスにバインドされていることを確認します。

MemcachedがTCP接続のみでIpv4をサポートするように構成されていることを確認したので、/etc/memcached.confを編集してUDP、Unixドメインソケット、またはIpv6接続のサポートを追MemcachedへのIpv6接続を有効にするには、nanoまたは任意のエディタで/etc/memcached.confファイルを開きます:

  • sudo nano /etc/memcached.conf

まず、ファイル内で次の行を見つけます。

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

この行は、MemcachedがローカルIpv4インターフェイスでリッスンするように設定されている場所です。 Ipv6サポートを追加するには、

/etc/memcachedのように、Ipv6ローカルループバックアドレス(::1)を含む行を追加します。conf
. . .-l 127.0.0.1-l ::1

を押してファイルを保存して閉じ、CTRL+Oを押してENTERを押して保存し、CTRL+Xを押してnanoを終了します。 次に、systemctlコマンドを使用してMemcachedを再起動します:

  • sudo systemctl restart memcached

これで、前のセクションのssコマンドを繰り返すことで、MemcachedがIpv6接続もリッスンしていることを確認できます:

  • sudo ss -plunt

次のような出力を受け取る必要があります:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26)) . . .tcp LISTEN 0 1024 :11211 :* users:(("memcached",pid=8889,fd=27))

出力の強調表示された部分は、MemcachedがローカルIpv6インターフェイス上のTCP接続をリッスンしていることを示しています。Ipv4サポートを無効にし、Ipv6接続のみをリッスンする場合は、/etc/memcached.confから-l 127.0.0.1行を削除し、systemctlコマンドを使用してサービスを再起動できます。

コマンドを使用して、ipv4サポートを無効にし、Ipv6接続のみをリッスンする場合は、/etc/memcached.confから-l 127.0.0.1行を削除し、systemctlコマンドを使用してサービスを再起動することに注意してください。MemcachedをUDPソケットと一緒に使用したい場合は、設定ファイル/etc/memcached.confを編集してUDPサポートを有効にできます。

UDPの設定

nanoまたは任意のエディタを使用して/etc/memcached.confを開き、ファイルの最後に次の行を追加します。

/etc/memcached。TCPサポートが必要ない場合は、-p 11211行を見つけて、それを-p 0に変更してTCP接続を無効にします。

ファイルの編集が完了したら、CTRL+Oを入力して保存し、CTRL+Xを入力して終了します。

次に、systemctlコマンドを使用してMemcachedサービスを再起動し、変更を適用します:

  • sudo systemctl restart memcached

Memcachedがss -pluntコマンドを再度使用してUDP接続をリッスンしていることを確認します:

  • sudo ss -plunt

TCPサポートを無効にし、Ipv6接続を有効にしている場合は、次のような出力を受け取る必要があります:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .udp UNCONN 0 0 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=28))udp UNCONN 0 0 :11211 :* users:(("memcached",pid=8889,fd=29)). . .

Ipv4接続のみを有効にしている場合と、TCP接続を有効にしたままにしている場合は、出力が異なる可能性があることに注意してください。

Unixドメインソケットの設定

UnixドメインソケットでMemcachedを使用する場合は、/etc/memcached.conf設定ファイルを編集してこのサポートを有効にすることができます。 Unixドメインソケットを使用するようにMemcachedを構成すると、MemcachedはTCPとUDPのサポートを無効にするため、ソケットサポートを有効にする前にアプリケーションがこれら

nanoまたは任意のエディタを使用して/etc/memcached.confを開き、ファイルの最後に次の行を追加します。

/etc/memcached。conf
. . .-s /var/run/memcached/memcached.sock-a 660

-aフラグは、ソケットのファイルに対する権限を決定します。 Memcachedに接続する必要があるユーザーがサーバー上のmemcacheグループの一部であることを確認します。

次に、systemctlコマンドを使用してMemcachedサービスを再起動し、変更を適用します:

  • sudo systemctl restart memcached

Memcachedがss -lnxコマンドを使用してUnixドメインソケット接続をリッスンしていることを確認します:

  • sudo ss -lnx | grep memcached

-xフラグは、ssの出力をソケットファイルを表示するように制限します。 次のような出力を受け取る必要があります:

Output
u_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0

Memcachedのネットワーク設定を構成したので、このチュートリアルの次のステップであるMemcachedへの認証用のSASLの追加に進むことができます。Memcachedサービスに認証されたユーザーを追加するには、Simple Authentication And Security Layer(SASL)を使用できます。 まず、サーバーにSASLのサポートを追加し、次に認証資格情報を使用してユーザーを構成します。 すべてが整ったら、Memcachedの設定ファイル内でSASLを有効にし、すべてが正常に動作していることを確認できます。Saslサポートの追加を開始するには、saslユーザーデータベース用の管理プログラムを含むパッケージsasl2-binをインストールする必要があります。

認証済みユーザーの追加

このツールを使用すると、認証されたユーザーまたはユーザーを作成できます。 次のコマンドを実行してインストールします:

  • sudo apt install sasl2-bin

次に、mkdirコマンドを使用して、MemcachedがSASL構成設定をチェックするディレクトリとファイルを作成します:

  • sudo mkdir -p /etc/sasl2

ここで、nanoまたはお好みのエディタを使用してSASL設定ファイルを作成します:

  • sudo nano /etc/sasl2/memcached.conf

次の行を追加します。

/etc/sasl2/memcached。conf
log_level: 5mech_list: plainsasldb_path: /etc/sasl2/memcached-sasldb2

ロギングレベルを指定することに加えて、mech_listplainに設定され、Memcachedに独自のパスワードファイルを使用し、平文パスワードを確認するように指示します。 追加した最後の行には、次に作成するユーザーデータベースファイルへのパスを指定します。 終了したら、ファイルを保存して閉じます。

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

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

最後に、次のchownコマンドを使用して、memcacheユーザーとグループの所有権をSASLデータベースに付与します:

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

これで、Memcachedが認証に使用できるSASL構成が整ったことになります。 次のセクションでは、最初にMemcachedがデフォルト設定で実行されていることを確認してから、それを再構成し、SASL認証で動作していることを確認します。

Saslサポートの構成

最初にmemcstatコマンドを使用してMemcachedインスタンスの接続をテストできます。 このチェックは、Saslとユーザー認証が有効になる前にMemcachedが実行され、正しく構成されていることを確認するのに役立ちます。 設定ファイルに変更を加えた後、別の出力をチェックするためにコマンドを再度実行します。

memcstatコマンドを使用してMemcachedが稼働していることを確認するには、次のように入力します:

  • memcstat --servers="127.0.0.1"

Ipv6を使用している場合は、Ipv4127.0.0.1アドレスの代わりに::1を使用します。 Unixドメインソケットを使用している場合は、--servers=/var/run/memcached/memached.sockのように、ipアドレスの代わりにソケットへのパスを使用します。

memcstatコマンドを実行してMemcachedに正常に接続すると、次のような出力が表示されます:

Output
Server: 127.0.0.1 (11211) pid: 2299875 uptime: 2020 time: 1632404590 version: 1.5.22 . . .

メモ:UdpをサポートしてMemcachedを使用している場合、memcstatコマンドはUDPポートに接続できません。 接続を確認するには、次のnetcatコマンドを使用します:

  • nc -u 127.0.0.1 11211 -vz

Memcachedが応答している場合は、次のような出力を受け取る必要があります:

Output
Connection to 127.0.0.1 11211 port succeeded!

Ipv6およびUDPでMemcachedを使用している場合、コマンドは次のようになります:

  • nc -6 -u ::1 11211 -vz

これで、SASLの有効化に進むことができます。 これを行うには、-Sパラメータを/etc/memcached.confに追加します。 ファイルをnanoまたはお好みのエディタで再度開きます:

  • sudo nano /etc/memcached.conf

ファイルの最後に、

/etc/memcachedを追加します。conf
. . .-S

次に、-vvオプションを見つけてコメントを解除すると、/var/log/memcachedに詳細な出力が提供されます。 コメントされていない行は、

/etc/memcachedのようになります。conf
. . .-vv

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

次のsystemctlコマンドを使用してMemcachedサービスを再起動します:

  • sudo systemctl restart memcached

次に、Memcachedのjournalctlログをチェックして、SASLサポートが有効になっていることを確認します:

  • sudo journalctl -u memcached |grep SASL

SASLサポートが初期化されていることを示す、次のような出力行を受け取る必要があります:

Output
Sep 23 17:00:55 memcached systemd-memcached-wrapper: Initialized SASL.

これで、Memcachedへの接続を再度確認できます。 SASLのサポートが所定の位置にあり、初期化されている場合、次のmemcstatコマンドは有効な認証資格情報なしで失敗するはずです:

  • memcstat --servers="127.0.0.1"

コマンドは出力を生成すべきではありません。 次のシェルコマンドを入力して、その状態を確認します:

  • echo $?

$? 最後に終了したコマンドの終了コードを常に返します。 通常、0以外のものはプロセスの失敗を示します。 この場合、memcstatコマンドが失敗したことを示す1の終了ステータスを受け取る必要があります。

もう一度memcstatを実行すると、今回はユーザー名とパスワードで認証プロセスが機能したかどうかを確認します。 別の資格情報を使用している場合は、sammyとyour_password`値の代わりに資格情報を置き換えて、次のコマンドを実行します:

  • 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はローカルループバック(127.0.0.1)インターフェイスでリッスンするよ ただし、他のサーバーからのアクセスを許可する必要がある場合があります。 この場合、Memcachedをプライベートネットワークインターフェイスにバインドするように構成設定を調整できます。

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

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

構成設定を調整する前に、memcachedサーバーに接続できるマシンを制限するファイアウォールルールを設定するこ まず、Memcachedへの接続に使用するマシンのプライベートIPアドレスを記録する必要があります。 プライベートIPアドレス(またはアドレス)を取得したら、明示的なファイアウォールルールを追加して、マシンがMemcachedにアクセスできるようにします。

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

  • sudo ufw allow from client_system_private_IP/32 to any port 11211

複数のシステムがプライベートネットワーク経由でMemcachedにアクセスしている場合は、上記のルールをテンプレートとして使用して、各マシンにufwルールを追加

UFWファイアウォールの詳細については、ufw essentialsガイドを参照してください。

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

プライベートネットワークインターフェイスへのMemcachedのバインド

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

まず、次のipコマンドを使用してMemcachedサーバーのプライベートネットワークインターフェイスを見つけます

  • ip -brief address show

サーバーのネットワーク構成によっては、出力が次の例と異な:

Output
lo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 203.0.113.1/20 10.10.0.5/16 2001:DB8::1/64 fe80::7ced:9ff:fe52:4695/64eth1 UP 10.136.32.212/16 fe80::2cee:92ff:fe21:8bc4/64

この例では、ネットワークインターフェイスはeth0およびeth1の名前で識別されます。 eth0行の強調表示されたIpv4アドレスは、サーバーのパブリックIPアドレスです。

eth1行の強調表示されている10.136.32.212アドレスはサーバのプライベートIpv4アドレスで、fe80::2cee:92ff:fe21:8bc4アドレスはIpv6プライベートアドレスです。

IPアドレスは異なりますが、RFC1918仕様に基づいて、常に次の範囲内にあります):

  • 10.0.0.0 10.255.255.255へ(10/8))
  • 172.16.0.0172.31.255.255(172.16/12)
  • 192.168.0.0192.168.255.255(192.168/16)

サーバーのプライベートIPアドレスを見つけたら、nanoまたはお好みのエディタを使用して/etc/memcached.confファイルを再度開きます:

  • sudo nano /etc/memcached.conf

以前にチェックまたは変更した-l 127.0.0.1行を見つけ、サーバーのプライベートネットワーキングインターフェイス

/etc/memcachedに一致するようにアドレスを変更します。conf
. . .-l memcached_servers_private_IP. . .

Memcachedに複数のアドレスをリッスンさせたい場合は、-l memcached_servers_private_IP形式を使用して、Ipv4またはIpv6のいずれかのアドレスごとに別の同様の行を追加します。

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

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

  • sudo systemctl restart memcached

変更を確認するには、ssで新しい設定を確認してください:

  • sudo ss -plunt
Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process. . .tcp LISTEN 0 1024 10.137.0.2:11211 0.0.0.0:* users:(("memcached",pid=8991,fd=27)). . .

外部クライアントからの接続をテストして、引き続きサービスに到達できることを確認します。 また、承認されていないクライアントからのアクセスを確認して(ユーザーとパスワードなしで接続してみてください)、SASL認証が期待どおりに機能している また、接続が許可されていない別のサーバーからMemcachedに接続して、作成したファイアウォールルールが有効であることを確認することをお勧めします。

結論

このチュートリアルでは、Ipv4、Ipv6、TCP、UDP、およびUnixドメインソケットを使用してMemcachedを構成する方法を説明しました。 また、Sasl認証を有効にしてMemcachedサーバーを保護する方法も学習しました。 最後に、Memcachedをローカルまたはプライベートネットワークインターフェイスにバインドする方法と、memcachedへのアクセスを制限するためのファイアウォールルール

Memcachedの詳細については、プロジェクトのドキュメントを参照してください。

Write a Comment

メールアドレスが公開されることはありません。