Cài đặt Memcached trên Ubuntu 22.04 - Install Memcached on Ubuntu 22.04
Với bài viết này, chúng ta sẽ thảo luận cách install và cấu hình máy chủ Memcached trên Ubuntu 22.04 một cách chi tiết. Bên cạnh đó, bạn cũng sẽ tìm hiểu cách tăng cường bảo mật cho Memcached bằng cách thêm xác thực sử dụng Lớp xác thực và phương thức bảo mật đơn giản (SASL). Cuối cùng, chúng ta sẽ khám phá cách liên kết Memcached với giao diện mạng, đảm bảo rằng việc truy cập chỉ có thể thực hiện từ các mạng đáng tin cậy và bởi những người dùng đã được xác thực.
Các hệ thống bộ nhớ đệm đối tượng như Memcached mang đến hiệu suất tối ưu cho các cơ sở dữ liệu phụ trợ. Chúng hoạt động bằng cách lưu trữ tạm thời thông tin quan trọng trong bộ nhớ, giữ lại các bản ghi thường xuyên hoặc mới nhất mà hệ thống thường truy cập. Điều này giúp giảm tải cho cơ sở dữ liệu chính và tăng cường hiệu suất tổng thể của hệ thống.
Chuẩn bị trước khi cài đặt
Để install Memcached trên Ubuntu 22.04 thành công, bạn cần:
- Một máy chủ Ubuntu 22.04 có người dùng không phải root sudo và đã bật tường lửa.
Tiến hành install Memcached trên Ubuntu 22.04
Bước 1: Cài đặt Memcached
Nếu bạn chưa cài đặt Memcached trên máy chủ của mình, 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 nhau mà bạn có thể sử dụng để kiểm tra, thử nghiệm và quản lý máy chủ Memcached của mình. Thêm gói vào máy chủ của bạn bằng lệnh sau:
sudo apt install libmemcached-tools
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, hãy chạy lệnh systemctl
sau:
sudo systemctl start memcached
Bây giờ bạn có thể chuyển sang bảo mật các cài đặt cấu hình của nó.
Bước 2: Cài đặt cấu hình Memcached Network (tùy chọn)
Nếu máy chủ Memcached của bạn chỉ cần hỗ trợ kết nối IPv4 cục bộ qua giao thức TCP, 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. Tuy nhiên, nếu bạn muốn 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, bạn nên thực hiện các bước liên quan trong phần này.
Trước hết, đảm bảo rằng phiên bản Memcached bạn đang sử dụng đang lắng nghe trên giao diện loopback IPv4 cục bộ, địa chỉ 127.0.0.1
. Phiên bản Memcached hiện tại đi kèm với Ubuntu và Debian thường có tham số cấu hình -l
được đặt thành giao diện cục bộ, điều này có nghĩa rằng nó 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 đang liên kết với giao diện IPv4 127.0.0.
1 và chỉ lắng nghe các kết nối TCP, sử dụng lệnh ss
:
sudo ss -plunt
Các cờ khác nhau sẽ thay đổi đầu ra của lệnh ss
theo các cách sau:
- Thêm tên tiến trình đang sử dụng ổ cắm: cờ
-p
. - Giới hạn đầu ra chỉ cho các ổ cắm nghe: cờ
-l
, ngược lại với việc bao gồm các ổ cắm kết nối đến hệ thống khác. - Bao gồm các ổ cắm UDP trong đầu ra: cờ
-u
. - Hiển thị các giá trị số trong đầu ra thay vì tên và giá trị có thể đọc được bởi con người, sử dụng: cờ
-n
. - Bao gồm các ổ cắm TCP trong đầu ra: cờ
-t
.
Bạn sẽ nhận đầu ra như sau:
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)) . . .
Đầ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.
Định cấu hình IPv6
Để bật kết nối IPv6 với Memcached, 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:
. . .
-l 127.0.0.1
-l ::1
Lưu và đóng tệp bằng CTRL O
và 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ạn xác minh 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
Đầu ra sẽ như sau:
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))
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 đó 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 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 ý: đầ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 Sockets
Nếu bạn muốn sử dụng Memcached với Unix Domain Sockets, bạn có thể bật tính năng này bằng cách chỉnh sửa tệp cấu hình tại đường dẫn /etc/memcached.conf
. Hãy nhớ rằng khi bạn cấu hình Memcached để sử dụng Unix Domain Sockets, chức năng hỗ trợ TCP và UDP sẽ bị tắt. Vì vậy, đảm bảo ứng dụng của bạn không sử dụng các giao thức này trước khi kích hoạt hỗ trợ.
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 ổ cắm. Đả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 Memcached đang lắng nghe các kết nối Unix Domain Sockets 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ị những tệp socket. Bạn sẽ nhận được đầu ra như sau:
Outputu_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ể áp dụng cách tiếp cận Lớp xác thực và xác thực đơn giản (SASL), một khung tách biệt các quá trình xác thực khỏi các giao thức ứng dụng. Để thực hiện điều này, bạn sẽ bắt đầu bằng việc kích hoạt hỗ trợ SASL trên máy chủ. Sau đó, cấu hình người dùng thông qua thông tin đăng nhập xác thực. Khi mọi thứ đã được chuẩn bị, bạn bật chế độ SASL trong tệp cấu hình Memcached và đảm bảo mọi thứ hoạt động bình thường.
Thêm 1 user đượ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 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:
log_level: 5
mech_list: plain
sasldb_path: /etc/sasl2/memcached-sasldb2
Ngoài việc xác định mức ghi nhật ký, việc đặt mech_list
ở mức plain
cung cấp cho Memcached thông tin rằng nó nên sử dụng tệp chứa mật khẩu và xác thực theo văn bản gốc. Dòng cuối cùng mà bạn vừa thêm chỉ định đường dẫn đến tệp cơ sở dữ liệu người dùng mà bạn sắp tạo. Sau khi hoàn tất, lưu lại và đóng tệp.
Bước tiếp theo là 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 tùy chọn -c
để tạo mục nhập người dùng mới trong cơ sở dữ liệu SASL. Ví dụ, người dùng ở đây có tên sammy, nhưng bạn có thể thay thế tên này bằng tên người dùng riêng của bạn. Tùy chọn -f
xác đị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
:
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 thực hiện các thay đổi đối với tệp cấu hình của mình, mình sẽ chạy lại lệnh để kiểm tra đầu ra khác.
Kiểm tra Memcached có hoạt động hay không bằng lệnh memcstat
:
memcstat --servers="127.0.0.1"
Nếu bạn đang sử dụng IPv6, thay ::1
cho địa chỉ IPv4 127.0.0.1
. Nếu bạn đang sử dụng Unix Domain Socket, 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:
OutputServer: 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 sử dụng lệnh netcat
để xác minh kết nối:
nc -u 127.0.0.1 11211 -vz
Nếu Memcached phản hồi, kết quả sẽ hiển thị như sau:
OutputConnection 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:
. . .
-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ý tạp chí 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:
OutputSep 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ị sammy
và your_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:
OutputServer: 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)
Mặc định, Memcached được cấu hình để chỉ lắng 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 việc bị lộ thông tin từ các bên bên ngoài. Tuy nhiên, trong một số trường hợp, bạn có thể cần cho phép truy cập từ các máy chủ khác. Trong tình huống này, bạn có thể điều chỉnh cài đặt cấu hình để kết nối 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, cần 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 memcached 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:
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
Trong ví dụ này, giao diện mạng được xác định bằng tên eth0
và eth1
. 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
đến10.255.255.255
(tiền tố 10/8)172.16.0.0
đến172.31.255.255
(tiền tố 172.16/12)192.168.0.0
đến192.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ỉ, 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
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)) . . .
Hãy kiểm tra kết nối từ các máy khách bên ngoài để đảm bảo rằng bạn vẫn có thể truy cập vào dịch vụ Memcached một cách bình thường. Bạn cũng nên thử kiểm tra quyền truy cập từ một ứng dụng khách không được ủy quyền, để đảm bảo rằng xác thực SASL đang hoạt động như dự kiến. Ngoài ra, hãy thử kết nối với Memcached từ một máy chủ không được phép kết nối để xác minh tính hiệu quả của các quy tắc tường lửa bạn đã thiết lập.
Trong hướng dẫn này, bạn đã tìm hiểu cách install Memcached trên Ubuntu 22.04 một cách chi tiết. Bạn cũng đã làm quen với cách bảo mật máy chủ Memcached bằng cách bật xác thực SASL. Cuối cùng, bạn đã học cách kết nối Memcached với giao diện mạng riêng hoặc cục bộ và cách định cấu hình các quy tắc tường lửa để hạn chế quyền truy cập vào Memcached.