Ubuntu18.04にMemcachedをインストールして保護する方法
このチュートリアルの以前のバージョンは、KathleenJuellによって作成されました。
序章
Memcachedなどのメモリオブジェクトキャッシングシステムは、情報をメモリに一時的に保存し、頻繁にまたは最近要求されたレコードを保持することで、バックエンドデータベースのパフォーマンスを最適化できます。 このようにして、データベースへの直接リクエストの数を減らします。
このガイドでは、Memcachedサーバーをインストールして構成する方法を学習します。 また、Simple Authentication and Security Layer(SASL)を使用してMemcachedを保護するために認証を追加する方法についても学習します。 最後に、Memcachedをローカルまたはプライベートネットワークインターフェイスにバインドして、認証されたユーザーが信頼できるネットワークでのみアクセスできるようにする方法を学習します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- sudo非rootユーザーとファイアウォールが有効になっている1台のUbuntu18.04サーバー。 これを設定するには、 Ubuntu18.04を使用したサーバーの初期設定チュートリアルに従うことができます。
これらの前提条件が整っていると、Memcachedサーバーをインストールして保護する準備が整います。
または、インタラクティブ端末を使用してブラウザにMemcachedをインストールして設定する実験を行う場合は、下のインタラクティブ端末の起動!ボタンをクリックして開始してください。
ステップ1—Memcachedをインストールする
サーバーにMemcachedをまだインストールしていない場合は、公式のUbuntuリポジトリからインストールできます。 まず、次のコマンドを使用して、ローカルパッケージインデックスが更新されていることを確認します。
- sudo apt update
次に、公式パッケージを次のようにインストールします。
- sudo apt install memcached
インストールすることもできます libmemcached-tools
、これは、Memcachedサーバーの調査、テスト、および管理に使用できるさまざまなツールを含むパッケージです。 次のコマンドを使用して、パッケージをサーバーに追加します。
- sudo apt install libmemcached-tools
これで、Memcachedが、接続をテストできるツールとともに、サーバーにサービスとしてインストールされます。 これで、構成設定の保護に進むことができます。
手順2— Memcachedネットワーク設定の構成(オプション)
MemcachedサーバーがTCPを使用したローカルIPv4接続のみをサポートする必要がある場合は、このセクションをスキップして、このチュートリアルのステップ3に進むことができます。 それ以外の場合、UDPソケット、Unixドメインソケットを使用するようにMemcachedを構成するか、IPv6接続のサポートを追加する場合は、チュートリアルのこのセクションの関連する手順に進みます。
まず、MemcachedインスタンスがローカルIPv4ループバックインターフェースでリッスンしていることを確認します 127.0.0.1
. UbuntuとDebianに同梱されているMemcachedの現在のバージョンには -l
ローカルインターフェースに設定された構成パラメーター。これは、Memcachedが実行されているサーバーからの接続のみを受け入れるように構成されていることを意味します。
Memcachedが現在ローカルIPv4にバインドされていることを確認します 127.0.0.1
インターフェイスを使用し、TCP接続のみをリッスンします。 ss
指図:
- sudo ss -plunt
さまざまなフラグが変更されます ss
次の方法で出力します。
-p
ソケットを使用しているプロセスの名前を追加します-l
他のシステムに接続されたソケットも含めるのではなく、出力をリスニングソケットのみに制限します-u
出力にUDPベースのソケットが含まれます-n
人間が読める形式の名前と値の代わりに、出力に数値を表示します-t
出力にTCPベースのソケットが含まれます
次のような出力を受け取るはずです。
OutputNetid 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
IPv4ループバックにバインドされています 127.0.0.1
TCPプロトコルのみを使用するアドレス。
MemcachedがTCP接続のみでIPv4をサポートするように構成されていることを確認したので、編集できます /etc/memcached.conf
UDP、Unixドメインソケット、またはIPv6接続のサポートを追加します。
IPv6の構成
MemcachedへのIPv6接続を有効にするには、 /etc/memcached.conf
とファイル nano
またはお好みの編集者:
- sudo nano /etc/memcached.conf
まず、ファイル内で次の行を見つけます。
. . .
-l 127.0.0.1
この行は、MemcachedがローカルIPv4インターフェイスでリッスンするように構成されている場所です。 IPv6サポートを追加するには、次のようにIPv6ローカルループバックアドレス( :: 1 )を含む行を追加します。
. . .
-l 127.0.0.1
-l ::1
を押してファイルを保存して閉じます CTRL+O
それから ENTER
保存してから CTRL+X
出る nano
. 次に、を使用してMemcachedを再起動します systemctl
指図:
- sudo systemctl restart memcached
これで、MemcachedがIPv6接続もリッスンしていることを確認できます。 ss
前のセクションのコマンド:
- sudo ss -plunt
次のような出力を受け取るはずです。
OutputNetid 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 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=27))
出力の強調表示された部分は、MemcachedがローカルIPv6インターフェイスでTCP接続をリッスンしていることを示しています。
IPv4サポートを無効にし、IPv6接続のみをリッスンする場合は、 -l 127.0.0.1
からの行 /etc/memcached.conf
を使用してサービスを再起動します systemctl
指図。
UDPの構成
UDPソケットでMemcachedを使用する場合は、UDPサポートを編集して有効にすることができます。 /etc/memcached.conf
構成ファイル。
開ける /etc/memcached.conf
を使用して nano
またはお好みのエディタを使用して、ファイルの最後に次の行を追加します。
. . .
-U 11211
TCPサポートが必要ない場合は、 -p 11211
行とそれをに変更します -p 0
TCP接続を無効にします。
ファイルの編集が完了したら、次のように入力してファイルを保存して閉じます CTRL+O
保存してから CTRL+X
出る。
次に、Memcachedサービスを再起動します systemctl
変更を適用するコマンド:
- sudo systemctl restart memcached
MemcachedがUDP接続をリッスンしていることを確認します ss -plunt
もう一度コマンド:
- sudo ss -plunt
TCPサポートを無効にし、IPv6接続を有効にしている場合は、次のような出力を受け取る必要があります。
[secondary_label 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 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=29))
. . .
IPv4接続のみを有効にしている場合、およびTCP接続を有効のままにしている場合は、出力が異なる場合があることに注意してください。
Unixドメインソケットの構成
UnixドメインソケットでMemcachedを使用する場合は、編集することでこのサポートを有効にできます。 /etc/memcached.conf
構成ファイル。 Unixドメインソケットを使用するようにMemcachedを構成する場合、MemcachedはTCPおよびUDPサポートを無効にするため、ソケットサポートを有効にする前に、アプリケーションがこれらのプロトコルを使用して接続する必要がないことを確認してください。
開ける /etc/memcached.conf
を使用して nano
またはお好みのエディタを使用して、ファイルの最後に次の行を追加します。
. . .
-s /var/run/memcached/memcached.sock
-a 660
The -a
フラグは、ソケットのファイルに対する権限を決定します。 Memcachedに接続する必要のあるユーザーが memcache
サーバー上のグループ。それ以外の場合は、ソケットにアクセスしようとしたときにアクセス許可が拒否されたというメッセージを受け取ります。
次に、Memcachedサービスを再起動します systemctl
変更を適用するコマンド:
- sudo systemctl restart memcached
MemcachedがUnixドメインソケット接続をリッスンしていることを確認します ss -lnx
指図:
- sudo ss -lnx | grep memcached
The -x
フラグはの出力を制限します ss
ソケットファイルを表示します。 次のような出力を受け取るはずです。
Outputu_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0
Memcachedのネットワーク設定を構成したので、このチュートリアルの次のステップに進むことができます。これは、認証用のSASLをMemcachedに追加することです。
ステップ3—許可ユーザーの追加
認証されたユーザーをMemcachedサービスに追加するには、認証手順をアプリケーションプロトコルから切り離すフレームワークであるSimple Authentication and Security Layer(SASL)を使用できます。 最初にサーバーにSASLのサポートを追加し、次に認証資格情報を使用してユーザーを構成します。 すべてが整ったら、Memcachedの構成ファイル内でSASLを有効にして、すべてが正しく機能していることを確認できます。
認証されたユーザーの追加
SASLサポートの追加を開始するには、 sasl2-bin
パッケージ。SASLユーザーデータベースの管理プログラムが含まれています。 このツールを使用すると、認証された1人または複数のユーザーを作成できます。 次のコマンドを実行してインストールします。
- sudo apt install sasl2-bin
次に、MemcachedがSASL構成設定を確認するディレクトリとファイルを作成します。 mkdir
指図:
- sudo mkdir -p /etc/sasl2
次に、を使用してSASL構成ファイルを作成します。 nano
またはお好みの編集者:
- sudo nano /etc/sasl2/memcached.conf
次の行を追加します。
log_level: 5
mech_list: plain
sasldb_path: /etc/sasl2/memcached-sasldb2
ロギングレベルを指定することに加えて、 mech_list
に設定されています plain
、Memcachedに、独自のパスワードファイルを使用し、プレーンテキストのパスワードを確認する必要があることを通知します。 追加した最後の行は、次に作成するユーザーデータベースファイルへのパスを指定します。 終了したら、ファイルを保存して閉じます。
次に、ユーザー資格情報を使用してSASLデータベースを作成します。 を使用します saslpasswd2
とのコマンド -c
SASLデータベースに新しいユーザーエントリを作成するためのフラグ。 ここでのユーザーはsammyになりますが、この名前を自分のユーザーに置き換えることができます。 The -f
flagは、データベースへのパスを指定します。これは、設定したパスになります。 /etc/sasl2/memcached.conf
:
- sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
最後に、 memcacheユーザーとグループにSASLデータベースの所有権を次のように付与します chown
指図:
- sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
これで、Memcachedが認証に使用できるSASL構成が設定されました。 次のセクションでは、最初にMemcachedがデフォルト設定で実行されていることを確認してから、再構成してSASL認証で機能していることを確認します。
SASLサポートの構成
最初に、Memcachedインスタンスとの接続をテストできます。 memcstat
指図。 このチェックは、SASLとユーザー認証を有効にする前に、Memcachedが実行され、正しく構成されていることを確認するのに役立ちます。 構成ファイルに変更を加えた後、コマンドを再度実行して、別の出力を確認します。
Memcachedが稼働していることを確認するには、 memcstat
コマンドを入力するには、次のように入力します。
- memcstat --servers="127.0.0.1"
IPv6を使用している場合は、 ::1
IPv4の代わりに 127.0.0.1
住所。 Unixドメインソケットを使用している場合は、たとえば、IPアドレスの代わりにソケットへのパスを使用します --servers=/var/run/memcached/memached.sock
.
あなたが実行すると memcstat
コマンドを実行してMemcachedに正常に接続すると、次のような出力が表示されます。
OutputServer: 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が応答している場合は、次のような出力を受け取る必要があります。
OutputConnection to 127.0.0.1 11211 port [udp/*] succeeded!
IPv6およびUDPでMemcachedを使用している場合、コマンドは次のようになります。
- nc -6 -u ::1 11211 -vz
これで、SASLの有効化に進むことができます。 これを行うには、を追加します -S
パラメータから /etc/memcached.conf
. でファイルを開く nano
またはあなたの好みの編集者:
- sudo nano /etc/memcached.conf
ファイルの最後に、以下を追加します。
. . .
-S
次に、を見つけてコメントを外します -vv
オプション。詳細な出力をに提供します。 /var/log/memcached
. コメントされていない行は次のようになります。
. . .
-vv
ファイルを保存して閉じます。
次に、以下を使用してMemcachedサービスを再起動します systemctl
指図:
- sudo systemctl restart memcached
次に、 journalctl
Memcachedのログを記録して、SASLサポートが有効になっていることを確認します。
- sudo journalctl -u memcached |grep SASL
SASLサポートが初期化されたことを示す次のような出力行を受け取るはずです。
OutputSep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL.
これで、Memcachedへの接続を再度確認できます。 SASLサポートが適切に設定され、初期化されている場合、次のようになります。 memcstat
コマンドは、有効な認証クレデンシャルがないと失敗するはずです。
- memcstat --servers="127.0.0.1"
コマンドは出力を生成しないはずです。 次のシェルコマンドを入力して、ステータスを確認します。
- echo $?
$?
終了した最後のコマンドの終了コードを常に返します。 通常、それ以外のもの 0
プロセスの失敗を示します。 この場合、次の終了ステータスを受け取る必要があります。 1
、これは、 memcstat
コマンドが失敗しました。
ランニング memcstat
繰り返しになりますが、今回はユーザー名とパスワードを使用して、認証プロセスが機能したかどうかを確認します。 の代わりにクレデンシャルを使用して次のコマンドを実行します sammy
異なる資格情報を使用した場合は、 your_password `の値:
- memcstat --servers="127.0.0.1" --username=sammy --password=your_password
次のような出力を受け取るはずです。
OutputServer: 127.0.0.1 (11211)
pid: 3831
uptime: 9
time: 1520028517
version: 1.4.25
. . .
これで、Memcachedサービスが構成され、SASLサポートとユーザー認証を使用して実行されます。
ステップ4—プライベートネットワーク経由のアクセスを許可する(オプション)
デフォルトでは、Memcachedはローカルループバックでリッスンするようにのみ構成されています(127.0.0.1
)インターフェース。Memcachedインターフェースを外部の第三者への露出から保護します。 ただし、他のサーバーからのアクセスを許可する必要がある場合があります。 この場合、Memcachedをプライベートネットワークインターフェースにバインドするように構成設定を調整できます。
注:このセクションでは、 UFW を使用してファイアウォール設定を構成する方法について説明しますが、DigitalOceanクラウドファイアウォールを使用してこれらの設定を作成することもできます。 DigitalOceanクラウドファイアウォールの設定の詳細については、DigitalOceanCloudファイアウォールの概要を参照してください。 特定のマシンへの着信トラフィックを制限する方法の詳細については、タグとサーバー名を使用したファイアウォールルールの適用に関するこのチュートリアルのセクションと、ファイアウォールタグの説明を確認してください。
ファイアウォールによる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ファイアウォールの詳細を確認できます。
これらの変更を適切に行うと、サーバーのプライベートネットワークインターフェイスにバインドするようにMemcachedサービスを調整できます。
Memcachedをプライベートネットワークインターフェイスにバインドする
ファイアウォールが設置されたので、Memcached構成を調整して、代わりにサーバーのプライベートネットワークインターフェイスにバインドできます。 127.0.0.1
.
まず、以下を使用してMemcachedサーバーのプライベートネットワークインターフェイスを見つけます ip
指図
- ip -brief address show
サーバーのネットワーク構成によっては、出力が次の例と異なる場合があります。
Outputlo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 203.0.113.1/20 10.10.0.5/16 2001:DB8::1/64 fe80::7ced:9ff:fe52:4695/64
eth1 UP 10.136.32.212/16 fe80::2cee:92ff:fe21:8bc4/64
この例では、ネットワークインターフェイスは eth0
と eth1
名前。 で強調表示されているIPv4アドレス eth0
lineはサーバーのパブリックIPアドレスです。
強調表示 10.136.32.212
上のアドレス eth1
lineはサーバーのプライベートIPv4アドレスであり、 fe80::2cee:92ff:fe21:8bc4
addressはIPv6プライベートアドレスです。 IPアドレスは異なりますが、 RFC 1918仕様)に基づいて、常に次の範囲内に収まります。
10.0.0.0
に10.255.255.255
(10/8プレフィックス)172.16.0.0
に172.31.255.255
(172.16 / 12プレフィックス)192.168.0.0
に192.168.255.255
(192.168 / 16プレフィックス)
サーバーのプライベートIPアドレスを見つけたら、 /etc/memcached.conf
再度使用してファイル nano
またはお好みの編集者:
- sudo nano /etc/memcached.conf
を見つける -l 127.0.0.1
以前にチェックまたは変更した行、およびサーバーのプライベートネットワークインターフェイスに一致するようにアドレスを変更します。
. . .
-l memcached_servers_private_IP
. . .
Memcachedで複数のアドレスをリッスンする場合は、アドレスごとに、IPv4またはIPv6のいずれかを使用して同様の行をもう1つ追加します。 -l memcached_servers_private_IP
フォーマット。
終了したら、ファイルを保存して閉じます。
次に、Memcachedサービスを再起動します。
- sudo systemctl restart memcached
新しい設定を確認してください ss
変更を確認するには:
- sudo ss -plunt
OutputNetid 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の詳細については、プロジェクトのドキュメントをご覧ください。