Cài đặt Memcached trên Ubuntu 20.04 - Install Memcached on Ubuntu 20.04

Trong hướng dẫn này, bạn sẽ tìm hiểu cách install và định cấu hình máy chủ Memcached trên Ubuntu 20.04. Bạn cũng sẽ tìm hiểu cách thêm xác thực để bảo mật Memcached bằng Lớp xác thực và bảo mật đơn giản (SASL). Cuối cùng, bạn sẽ tìm hiểu cách liên kết Memcached với giao diện mạng cục bộ hoặc riêng tư để đảm bảo rằng nó chỉ có thể được truy cập trên các mạng đáng tin cậy bởi những người dùng đã được xác thực.

Các hệ thống bộ nhớ đệm đối tượng bộ nhớ như Memcached có thể tối ưu hóa hiệu suất cơ sở dữ liệu phụ trợ bằng cách lưu trữ tạm thời thông tin trong bộ nhớ, giữ lại các bản ghi được yêu cầu thường xuyên hoặc gần đây. Bằng cách này, họ giảm số lượng yêu cầu trực tiếp tới cơ sở dữ liệu của bạn.

Chuẩn bị trước khi cài đặt

Để làm theo hướng dẫn install Memcached trên Ubuntu 20.04, bạn sẽ cần:

  • Một máy chủ Ubuntu 20.04 có người dùng không phải root sudo và đã bật tường lửa. 

Bước 1: Install Memcached

Nếu bạn chưa cài đặt Memcached trên máy chủ, bạn có thể cài đặt nó từ kho lưu trữ chính thức của Ubuntu. Trước tiên, hãy đảm bảo rằng chỉ mục gói cục bộ của bạn được cập nhật bằng lệnh sau:

sudo apt update

Tiếp theo, cài đặt gói chính thức như sau:

sudo apt install memcached

Bạn cũng có thể cài đặt libmemcached-tools, đây là gói chứa nhiều công cụ khác nhac sử dụng để kiểm tra, thử nghiệm và quản lý máy chủ Memcached. Thêm gói vào máy chủ của bạn bằng lệnh sau:

sudo apt install libmemcached-tool

Memcached bây giờ sẽ được cài đặt như một dịch vụ trên máy chủ của bạn, cùng với các công cụ cho phép bạn kiểm tra khả năng kết nối của nó.

Để khởi động Memcached, chạy lệnh systemctl sau:

sudo systemctl start memcached

Bây giờ bạn chuyển sang bảo mật các cài đặt cấu hình của nó.

Bước 2: Định cấu hình cài đặt mạng Memcached (tùy chọn)

Nếu máy chủ Memcached của bạn chỉ cần hỗ trợ các kết nối IPv4 cục bộ bằng TCP thì bạn có thể bỏ qua phần này và tiếp tục đến Bước 3 trong hướng dẫn này. Mặt khác, nếu bạn muốn định cấu hình Memcached để sử dụng ổ cắm UDP, Ổ cắm tên miền Unix hoặc thêm hỗ trợ cho kết nối IPv6 thì tiến hành các bước có liên quan trong phần hướng dẫn này.

Trước tiên, đảm bảo rằng phiên bản Memcached của bạn đang lắng nghe trên giao diện loopback IPv4 cục bộ 127.0.0.1. Phiên bản hiện tại của Memcached đi kèm với Ubuntu và Debian có tham số cấu hình -l được đặt thành giao diện cục bộ, có nghĩa là nó được cấu hình để chỉ chấp nhận các kết nối từ máy chủ nơi Memcached đang chạy.

Xác minh rằng Memcached hiện được liên kết với giao diện IPv4 127.0.0.1 cục bộ và chỉ lắng nghe các kết nối TCP bằng cách sử dụng lệnh ss:

sudo ss -plunt

Các cờ khác nhau sẽ thay đổi đầu ra ss theo các cách sau:

  • -p thêm tên của tiến trình đang sử dụng ổ cắm
  • -l chỉ giới hạn đầu ra ở các ổ cắm nghe, trái ngược với việc bao gồm các ổ cắm được kết nối với các hệ thống khác
  • -u bao gồm các ổ cắm dựa trên UDP ở đầu ra
  • -n hiển thị các giá trị số ở đầu ra thay vì tên và giá trị mà con người có thể đọc được
  • -t bao gồm các ổ cắm dựa trên TCP ở đầu ra

Bạn sẽ nhận được đầu ra như sau:

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)) . . .

Đầu ra này xác nhận rằng memcached được liên kết với địa chỉ IPv4 loopback 127.0.0.1 chỉ bằng giao thức TCP.

Bây giờ bạn đã xác nhận rằng Memcached được định cấu hình để chỉ hỗ trợ IPv4 với các kết nối TCP, bạn có thể chỉnh sửa /etc/memcached.conf để thêm hỗ trợ cho UDP, ổ cắm miền Unix hoặc kết nối IPv6.

Cấu hình IPv6

Để bật kết nối IPv6 với Memcached, hãy mở tệp /etc/memcached.conf bằng nano hoặc trình chỉnh sửa ưa thích của bạn:

sudo nano /etc/memcached.conf

Đầu tiên, tìm dòng sau trong tệp: /etc/memcached.conf

. . .
-l 127.0.0.1

Dòng này là nơi Memcached được cấu hình để nghe trên giao diện IPv4 cục bộ. Để thêm hỗ trợ IPv6, hãy thêm một dòng chứa địa chỉ loopback cục bộ IPv6 (::1) như thế này: /etc/memcached.conf

. . .
-l 127.0.0.1
-l ::1

Lưu và đóng tệp bằng cách nhấn CTRL O rồi ENTER để lưu, sau đó CTRL X để thoát nano. Sau đó khởi động lại Memcached bằng lệnh systemctl:

sudo systemctl restart memcached

Bây giờ bạn có thể xác minh rằng Memcached cũng đang lắng nghe các kết nối IPv6 bằng cách lặp lại lệnh ss từ phần trước:

sudo ss -plunt

Bạn sẽ nhận được đầu ra như sau:

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 [::1]:11211 [::]:* users:(("memcached",pid=8889,fd=27))

Các phần được tô sáng của đầu ra cho biết Memcached hiện đang lắng nghe các kết nối TCP trên giao diện IPv6 cục bộ.

Lưu ý rằng nếu bạn muốn tắt hỗ trợ IPv4 và chỉ lắng nghe các kết nối IPv6, bạn có thể xóa dòng -l 127.0.0.1 khỏi /etc/memcached.conf và khởi động lại dịch vụ bằng lệnh systemctl.

Định cấu hình UDP

Nếu bạn muốn sử dụng Memcached với ổ cắm UDP, bạn có thể bật hỗ trợ UDP bằng cách chỉnh sửa tệp cấu hình /etc/memcached.conf.

Mở /etc/memcached.conf bằng nano hoặc trình chỉnh sửa ưa thích của bạn, sau đó thêm dòng sau vào cuối tệp: 

. . .
-U 11211

Nếu bạn không cần hỗ trợ TCP, hãy tìm dòng -p 11211 và đổi thành -p 0 để tắt kết nối TCP.

Khi bạn chỉnh sửa xong tệp, hãy lưu và đóng tệp bằng cách nhập CTRL O để lưu, sau đó nhập CTRL X để thoát.

Tiếp theo, khởi động lại dịch vụ Memcached của bạn bằng lệnh systemctl để áp dụng các thay đổi của bạn:

sudo systemctl restart memcached

Xác minh rằng Memcached đang lắng nghe các kết nối UDP bằng cách sử dụng lại lệnh ss -plunt:

sudo ss -plunt

Nếu bạn đã tắt hỗ trợ TCP và đã bật kết nối IPv6, thì bạn sẽ nhận được đầu ra như sau:

[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))
. . .

Lưu ý rằng đầu ra của bạn có thể khác nếu bạn chỉ bật kết nối IPv4 và nếu bạn vẫn bật kết nối TCP.

Định cấu hình Unix Domain Socket

Nếu bạn muốn sử dụng Memcached với Ổ cắm tên miền Unix, bạn có thể kích hoạt hỗ trợ này bằng cách chỉnh sửa tệp cấu hình /etc/memcached.conf. Lưu ý rằng nếu bạn định cấu hình Memcached để sử dụng Ổ cắm miền Unix, Memcached sẽ tắt hỗ trợ TCP và UDP, vì vậy hãy đảm bảo rằng ứng dụng của bạn không cần kết nối bằng các giao thức đó trước khi bật hỗ trợ ổ cắm.

Mở /etc/memcached.conf bằng nano hoặc trình chỉnh sửa ưa thích của bạn, sau đó thêm các dòng sau vào cuối tệp: 

. . .
-s /var/run/memcached/memcached.sock
-a 660

Cờ -a xác định các quyền trên tệp của socket. Đảm bảo rằng người dùng cần kết nối với Memcached là một phần của nhóm memcache trên máy chủ của bạn, nếu không, họ sẽ nhận được thông báo từ chối quyền khi cố gắng truy cập ổ cắm.

Tiếp theo, khởi động lại dịch vụ Memcached của bạn bằng lệnh systemctl để áp dụng các thay đổi của bạn:

sudo systemctl restart memcached

Xác minh rằng Memcached đang lắng nghe các kết nối Unix Domain Socket bằng lệnh ss -lnx:

sudo ss -lnx | grep memcached

Cờ -x giới hạn đầu ra của ss để hiển thị các tệp socket. Bạn sẽ nhận được đầu ra như sau:

Output

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

Bây giờ bạn đã định cấu hình cài đặt mạng của Memcached, bạn có thể tiến hành bước tiếp theo trong hướng dẫn này, đó là thêm SASL để xác thực vào Memcached.

Bước 3: Thêm người dùng được ủy quyền

Để thêm người dùng được xác thực vào dịch vụ Memcached của bạn, bạn có thể sử dụng Lớp bảo mật và xác thực đơn giản (SASL), đây là một khung tách rời các thủ tục xác thực khỏi các giao thức ứng dụng. Trước tiên, bạn sẽ thêm hỗ trợ cho SASL vào máy chủ của mình, sau đó, bạn sẽ định cấu hình người dùng bằng thông tin đăng nhập xác thực. Với mọi thứ đã sẵn sàng, bạn có thể kích hoạt SASL trong tệp cấu hình của Memcached và xác nhận mọi thứ đang hoạt động bình thường.

Thêm người dùng được xác thực

Để bắt đầu thêm hỗ trợ SASL, bạn cần cài đặt gói sasl2-bin, gói này chứa các chương trình quản trị cho cơ sở dữ liệu người dùng SASL. Công cụ này sẽ cho phép bạn tạo một hoặc nhiều người dùng đã được xác thực. Chạy lệnh sau để cài đặt nó:

sudo apt install sasl2-bin

Tiếp theo, tạo thư mục và tệp mà Memcached sẽ kiểm tra cài đặt cấu hình SASL của nó bằng lệnh mkdir:

sudo mkdir -p /etc/sasl2

Bây giờ hãy tạo tệp cấu hình SASL bằng nano hoặc trình chỉnh sửa ưa thích của bạn:

sudo nano /etc/sasl2/memcached.conf

Thêm các dòng sau: /etc/sasl2/memcached.conf

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

Ngoài việc chỉ định mức ghi nhật ký, mech_list được đặt ở mức đơn giản, điều này cho Memcached biết rằng nó nên sử dụng tệp mật khẩu riêng và xác minh mật khẩu văn bản gốc. Dòng cuối cùng mà bạn đã thêm chỉ định đường dẫn đến tệp cơ sở dữ liệu người dùng mà bạn sẽ tạo tiếp theo. Lưu và đóng tập tin khi bạn hoàn tất.

Bây giờ bạn sẽ tạo cơ sở dữ liệu SASL với thông tin xác thực của người dùng. Bạn sẽ sử dụng lệnh saslpasswd2 với cờ -c để tạo mục nhập người dùng mới trong cơ sở dữ liệu SASL. Người dùng sẽ là sammy ở đây, nhưng bạn có thể thay thế tên này bằng tên người dùng của riêng bạn. Cờ -f chỉ định đường dẫn đến cơ sở dữ liệu, đây sẽ là đường dẫn bạn đặt trong /etc/sasl2/memcached.conf:

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

Cuối cùng, cấp cho người dùng memcache và nhóm quyền sở hữu cơ sở dữ liệu SASL bằng lệnh chown sau:

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

Bây giờ bạn đã có sẵn cấu hình SASL mà Memcached có thể sử dụng để xác thực. Trong phần tiếp theo, trước tiên bạn sẽ xác nhận rằng Memcached đang chạy với cài đặt mặc định, sau đó định cấu hình lại và xác minh rằng Memcached đang hoạt động với xác thực SASL.

Định cấu hình hỗ trợ SASL

Trước tiên, chúng ta có thể kiểm tra khả năng kết nối của phiên bản Memcached bằng lệnh memcstat. Việc kiểm tra này sẽ giúp chúng tôi xác định rằng Memcached đang chạy và được định cấu hình chính xác trước khi bật SASL và xác thực người dùng. Sau khi chúng tôi thực hiện các thay đổi đối với tệp cấu hình của mình, chúng tôi sẽ chạy lại lệnh để kiểm tra đầu ra khác.

Để kiểm tra xem Memcached có hoạt động hay không bằng lệnh memcstat, hãy gõ lệnh sau:

memcstat --servers="127.0.0.1"

Nếu bạn đang sử dụng IPv6, hãy thay thế ::1 thay cho địa chỉ IPv4 127.0.0.1. Nếu bạn đang sử dụng Ổ cắm miền Unix, hãy sử dụng đường dẫn đến socket thay cho địa chỉ IP, ví dụ --servers=/var/run/memcached/memached.sock.

Khi bạn chạy lệnh memcstat và kết nối với Memcached thành công, bạn sẽ nhận được kết quả như sau:

Output

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

Lưu ý: Nếu bạn đang sử dụng Memcached có hỗ trợ UDP thì lệnh memcstat sẽ không thể kết nối với cổng UDP. Bạn có thể sử dụng lệnh netcat sau để xác minh kết nối:

nc -u 127.0.0.1 11211 -vz

Nếu Memcached phản hồi, bạn sẽ nhận được kết quả như sau:

Output

Connection to 127.0.0.1 11211 port [udp/*] succeeded!

Nếu bạn đang sử dụng Memcached với IPv6 và UDP, lệnh sẽ như sau:

nc -6 -u ::1 11211 -vz

Bây giờ bạn có thể chuyển sang kích hoạt SASL. Để làm như vậy, hãy thêm tham số -S vào /etc/memcached.conf. Mở lại tệp bằng nano hoặc trình chỉnh sửa ưa thích của bạn:

sudo nano /etc/memcached.conf

Ở dưới cùng của tập tin, thêm vào như sau: /etc/memcached.conf

. . .
-S

Tiếp theo, tìm và bỏ ghi chú tùy chọn -vv, tùy chọn này sẽ cung cấp đầu ra chi tiết cho /var/log/memcached. Dòng không ghi chú sẽ trông như thế này: 

. . .
-vv

Lưu và đóng tập tin.

Bây giờ hãy khởi động lại dịch vụ Memcached bằng lệnh systemctl sau:

sudo systemctl restart memcached

Tiếp theo, hãy kiểm tra nhật ký cho Memcached để đảm bảo rằng hỗ trợ SASL đã được bật:

sudo journalctl -u memcached |grep SASL

Bạn sẽ nhận được dòng đầu ra như sau, cho biết hỗ trợ SASL đã được khởi tạo:

Output

Sep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL.

Bây giờ bạn có thể kiểm tra lại kết nối với Memcached. Với hỗ trợ SASL tại chỗ và được khởi chạy, lệnh memcstat sau đây sẽ không thành công nếu không có thông tin xác thực hợp lệ:

memcstat --servers="127.0.0.1"

Lệnh không tạo ra đầu ra. Nhập lệnh shell sau để kiểm tra trạng thái của nó:

echo $?

$? sẽ luôn trả về mã thoát của lệnh cuối cùng đã thoát. Thông thường, bất kỳ giá trị nào ngoài 0 đều cho biết quy trình có lỗi. Trong trường hợp này, bạn sẽ nhận được trạng thái thoát là 1, điều này cho biết lệnh memcstat không thành công.

Chạy lại memcstat, lần này với tên người dùng và mật khẩu sẽ xác nhận xem quá trình xác thực có hoạt động hay không. Chạy lệnh sau với thông tin xác thực của bạn được thay thế thay cho giá trị sammyyour_password` nếu bạn sử dụng thông tin xác thực khác:

memcstat --servers="127.0.0.1" --username=sammy --password=your_password

Bạn sẽ nhận được đầu ra như sau:

Output

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

Dịch vụ Memcached của bạn hiện đã được định cấu hình và chạy với hỗ trợ SASL và xác thực người dùng.

Bước 4: Cho phép truy cập qua mạng riêng (Tùy chọn)

Theo mặc định, Memcached chỉ được cấu hình để nghe trên giao diện loopback cục bộ (127.0.0.1), giúp bảo vệ giao diện Memcached khỏi bị lộ bởi các bên bên ngoài. Tuy nhiên, có thể có những trường hợp bạn cần cho phép truy cập từ các máy chủ khác. Trong trường hợp này, bạn có thể điều chỉnh cài đặt cấu hình của mình để liên kết Memcached với giao diện mạng riêng.

Hạn chế truy cập IP với tường lửa

Trước khi bạn điều chỉnh cài đặt cấu hình của mình, bạn nên thiết lập các quy tắc tường lửa để giới hạn các máy có thể kết nối với máy chủ Memcached của bạn. Trước tiên, bạn cần ghi lại địa chỉ IP riêng của bất kỳ máy nào mà bạn muốn sử dụng để kết nối với Memcached. Sau khi có (hoặc nhiều địa chỉ) địa chỉ IP riêng, bạn sẽ thêm quy tắc tường lửa rõ ràng để cho phép máy truy cập Memcached.

Nếu đang sử dụng tường lửa UFW, bạn có thể giới hạn quyền truy cập vào phiên bản Memcached của mình bằng cách nhập thông tin sau trên máy chủ Memcached:

sudo ufw allow from client_system_private_IP/32 to any port 11211

Nếu có nhiều hệ thống đang truy cập Memcached qua mạng riêng, hãy nhớ thêm các quy tắc ufw bổ sung cho mỗi máy bằng cách sử dụng quy tắc trên làm mẫu.

Với những thay đổi này, bạn có thể điều chỉnh dịch vụ Memcached để liên kết với giao diện mạng riêng của máy chủ.

Liên kết Memcaches với giao diện mạng riêng

Giờ thì tường lửa của bạn đã sẵn sàng, bạn có thể điều chỉnh cấu hình Memcached để liên kết với giao diện mạng riêng của máy chủ thay vì 127.0.0.1.

Đầu tiên, tìm giao diện mạng riêng cho máy chủ Memcached của bạn bằng lệnh ip sau

ip -brief address show

Tùy thuộc vào cấu hình mạng của máy chủ của bạn, đầu ra có thể khác với ví dụ sau:

Output

lo 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

Trong ví dụ này, giao diện mạng được xác định bằng tên eth0eth1. Các địa chỉ IPv4 được tô sáng trên dòng eth0 là địa chỉ IP công cộng cho máy chủ.

Địa chỉ 10.136.32.212 được đánh dấu trên dòng eth1 là địa chỉ IPv4 riêng cho máy chủ và địa chỉ fe80::2cee:92ff:fe21:8bc4 là địa chỉ IPv6 riêng. Địa chỉ IP của bạn sẽ khác nhau nhưng sẽ luôn nằm trong các phạm vi sau dựa trên thông số kỹ thuật RFC 1918):

  • 10.0.0.0 đến 10.255.255.255 (tiền tố 10/8)
  • 172.16.0.0 đến 172.31.255.255 (tiền tố 172.16/12)
  • 192.168.0.0 đến 192.168.255.255 (tiền tố 192.168/16)

Khi bạn đã tìm thấy các địa chỉ IP riêng của máy chủ, hãy mở lại tệp /etc/memcached.conf bằng nano hoặc trình chỉnh sửa ưa thích của bạn:

sudo nano /etc/memcached.conf

Tìm dòng -l 127.0.0.1 mà bạn đã kiểm tra hoặc sửa đổi trước đó và thay đổi địa chỉ để khớp với giao diện mạng riêng của máy chủ của bạn: /etc/memcached.conf

. . .
-l memcached_servers_private_IP
. . .

Nếu bạn muốn Memcached nghe trên nhiều địa chỉ, hãy thêm một dòng tương tự khác cho mỗi địa chỉ, IPv4 hoặc IPv6 bằng định dạng -l memcached_servers_private_IP.

Lưu và đóng tập tin khi bạn hoàn tất.

Tiếp theo, khởi động lại dịch vụ Memcached:

sudo systemctl restart memcached

Kiểm tra cài đặt mới của bạn với ss để xác nhận thay đổi:

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)) . . .

Kiểm tra kết nối từ máy khách bên ngoài của bạn để đảm bảo rằng bạn vẫn có thể truy cập dịch vụ. Bạn cũng nên kiểm tra quyền truy cập từ một ứng dụng khách không được ủy quyền (thử kết nối mà không cần người dùng và mật khẩu) để đảm bảo rằng xác thực SASL của bạn đang hoạt động như mong đợi. Bạn cũng nên thử kết nối với Memcached từ một máy chủ khác không được phép kết nối để xác minh rằng các quy tắc tường lửa bạn đã tạo có hiệu quả.

Trong hướng dẫn này, bạn đã khám phá cách định cấu hình Memcached với IPv4, IPv6, TCP, UDP và Unix Domain Sockets. Bạn cũng đã tìm hiểu cách bảo mật máy chủ Memcached của mình bằng cách bật xác thực SASL. Cuối cùng, bạn đã biết cách liên kết Memcached với giao diện mạng cục bộ hoặc riêng tư của mình và cách định cấu hình quy tắc tường lửa để hạn chế quyền truy cập vào Memcached. Mong rằng bài install Memcached trên Ubuntu 20.04 hữu ích với bạn.

Mọi người cũng tìm kiếm: memcached ubuntu, install memcached ubuntu 20.04