Cách Cài đặt và bảo mật Memcached trên CentOS 7

3 năm trước

Cách cài đặt và bảo mật Memcached trên CentOS 7

Giới Thiệu 

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

Bởi vì các hệ thống như Memcached có thể góp phần vào việc phủ nhận các cuộc tấn công dịch vụ nếu cấu hình không đúng, nên nó rất quan trọng để bảo mật Các máy chủ Memcached của bạn. Trong hướng dẫn này, chúng tôi sẽ giới thiệu cách bảo vệ máy chủ Memcached  bằng cách ràng buộc cài đặt vào một giao diện mạng cục bộ hoặc riêng tư và tạo ra một người dùng được ủy quyền cho phiên bản Memcached của bạn.

Yêu cầu 

Hướng dẫn này giả định rằng bạn có một máy chủ được thiết lập với người dùng sudo không phải gốc và một firewall cơ bản. Nếu không , hãy thiết lập và cài đặt các phần sau:

  • Một máy chủ CentOS 7 .
  • FirewallD

Với các yêu cầu trên , bạn đã sẵn sàng để cài đặt và bảo mật máy chủ Memcached của bạn.

 

Cài đặt Memcached từ các nguồn chính thức 

Nếu không có sẵn Memcached đã được cài đặt trên máy chủ , bạn có thể cài đặt nó từ các nguồn CentOS chính thức . Trước tiên , hãy chắc chắn rằng chỉ thị góicục bộ đã được cập nhật : 

sudo yum update
  •  

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

sudo yum install memcached

Chúng ta cũng có thể cài đặt libmemcached, 1 thư viện cung cấp các công cụ để làm việc với máy chủ Memcached :

sudo yum install libmemcached

Memcached bây giờ sẽ được cài đặt như là 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 kết nối của nó. Bây giờ chúng ta có thể tiếp tục để đảm bảo cài đặt cấu hình của nó.

 

Bảo mật Cài đặt Cấu hình Memcached

Để đảm bảo rằng phiên bản Memcached dụ của chúng ta đang nghe trên giao diện cục bộ  127.0.0.1, chúng ta sẽ sửa đổi biến OPTIONS trong tập tin cấu hình đặt tại /etc/sysconfig/memcached. Chúng ta cũng sẽ vô hiệu hóa trình nghe UDP. Cả hai hành động này sẽ bảo vệ máy chủ  khỏi các cuộc tấn công từ chối dịch vụ.

Bạn có thể mở /etc/sysconfig/memcached cùng với vi:

sudo vi /etc/sysconfig/memcached

Tìm biến  OPTIONS , ban đầu trông như sau:

/etc/sysconfig/memcached
. . .
OPTIONS=""

Liên kết với giao diện mạng nội bộ sẽ hạn chế lưu lượng truy cập đến khách hàng trên cùng một máy. Chúng ta sẽ làm điều này bằng cách thêm -l 127.0.0.1 vào biến OPTIONS . Điều này có thể là hạn chế đối với một số môi trường nhất định, nhưng nó có thể tạo ra một điểm xuất phát tốt như là một biện pháp an ninh.

Bởi vì giao thức UDP hiệu quả hơn nhiều cho các cuộc tấn công từ chối dịch vụ so với TCP, chúng ta cũng có thể vô hiệu hóa trình nghe UDP. Để làm điều này, thêm tham số -U 0 vào biến OPTIONS . Tệp đầy đủ nhìn như sau :

/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0" 

Lưu và đóng file khi bạn làm xong.

Khởi động lại dịch vụ Memcached để áp dụng những thay đổi:

sudo systemctl restart memcached

Xác minh rằng Memcached hiện đang bị ràng buộc với giao diện cục bộ và chỉ lắng nghe các kết nối TCP bằng cách gõ:

sudo netstat -plunt

Bạn sẽ thấy kết quả sau :

 
Output
Active 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 2383/memcached. . .
 

Điều này xác nhận rằng memcached là ràng buộc với địa chỉ 127.0.0.1 mà chỉ sử dụng TCP.

 

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

Để thêm người dùng đã được chứng thực vào dịch vụ Memcached của bạn, bạn có thể sử dụng lớp Xác thực và An ninh đơn giản (SASL),cơ cấu làm mất đi các quy trình xác thực từ các giao thức ứng dụng. Chúng ta sẽ cho phép SASL trong tập tin cấu hình Memcached và sau đó chuyển sang thêm một người dùng xác thực.

Cấu hình Hỗ trợ SASL

Đầu tiên chúng ta có thể kiểm tra kết nối của phiên bản Memcached với lệnh  memstat Điều này sẽ giúp thiết lập rằng SASL và xác thực người dùng được kích hoạt sau khi thay đổi các tập tin cấu hình.

Để kiểm tra xem Memcached đã được kích hoạt và chạy chưa, gõ lệnh sau:

memstat --servers="127.0.0.1"

Bạn sẽ thấy kết quả như sau :

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

Bây giờ  ta có thể chuyển sang cho phép SASL. Đầu tiên, ta thêm tham số  -S vào biến OPTIONS trong /etc/sysconfig/memcached, mở file lần nữa :

sudo vi /etc/sysconfig/memcached

Ta thêm cả tham số -S và -vv vào biến OPTIONS . Tùy chọn -vv sẽ cung cấp đầu ra rườm rà đến /var/log/memcached, giúp gỡ dối . Thêm các tùy chọn này vào biến OPTIONS như sau:

/etc/sysconfig/memcached
. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -vv" 

Lưu và đóng file.

Khởi động lại dịch vụ Memcached:

sudo systemctl restart memcached

Tiếp theo, chúng ta có thể xem các bản ghi để đảm bảo rằng việc hỗ trợ SASL đã được kích hoạt:

sudo journalctl -u memcached

Bạn sẽ thấy dòng sau, chỉ ra rằng việc hỗ trợ SASL đã được khởi tạo:

 
Output
. . . 
Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL. 
. . .
 

Chúng ta có thể kiểm tra kết nối một lần nữa, nhưng vì SASL đã được khởi tạo, lệnh này sẽ thất bại nếu không có chứng thực:

memstat --servers="127.0.0.1"
  •  

Lệnh này không nên xuất ra. Chúng ta có thể gõ lệnh dưới đây để kiểm tra tình trạng của nó:

echo $?
  •  

$? sẽ quay lại mã thoát của lệnh cuối cùng đã thoát. Thông thường, bất cứ thứ gì ngoài  0  chỉ ra tiến trình thất bại. Trong trường hợp này, chúng ta sẽ thấy một trạng thái thoát là 1 cho biết lệnh memstat đã thất bại memstat .

Thêm Người dùng được Chứng thực

Bây giờ chúng ta có thể tải xuống hai gói cho phép  làm việc với thư viện Cyrus SASL và các cơ chế xác thực của nó, bao gồm các plugin hỗ trợ các lược đồ xác thực PLAIN. Đó là cyrus-sasl-devel và cyrus-sasl-plain, sẽ cho phép tạo và xác thực người dùng. Cài đặt gói bằng cách gõ:

sudo yum install cyrus-sasl-devel cyrus-sasl-plain

Tiếp theo, chúng ta sẽ tạo thư mục và tập tin mà Memcached sẽ kiểm tra các thiết lập cấu hình SASL của nó:

sudo mkdir -p /etc/sasl2
sudo vi /etc/sasl2/memcaced.conf

Thêm các tệp sau vào tệp tin cấu hình SASL:

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

Ngoài việc chỉ định mức đăng nhập , ta sẽ cài mech_list vào plain, mà nói với Memcached rằng nó nên sử dụng tập tin mật khẩu riêng của mình và xác minh một mật khẩu gốc. Ta cũng sẽ chỉ định đường dẫn tới tệp cơ sở dữ liệu người dùng mà ta sẽ tạo ra tiếp theo. Lưu và đóng tệp khi bạn hoàn tất.

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

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

Cuối cùng, cung cấp cho người dùng sở hữu memcached đối với cơ sở dữ liệu SAS:

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

Khởi động lại dịch vụ Memcached :

sudo systemctl restart memcached

Chạy lại memstat sẽ xác nhận xem quá trình xác thực có hiệu quả hay không .Lần này ta sẽ chạy nó với các chứng chỉ xác thực của ta:

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

Bạn sẽ thấy kết quả như sau:

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

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

Cho phép truy cập qua mạng riêng

Chúng tôi đã giới thiệu cách để cấu hình Memcached lắng nghe trên giao diện cục bộ, có thể ngăn chặn các cuộc tấn công từ chối dịch vụ bằng cách bảo vệ giao diện Memcached khỏi phơi nhiễm với bên ngoài. Tuy nhiên, có 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 để ràng buộc Memcached với giao diện mạng riêng.

Hạn chế quyền truy cập IP với Firewalls

Trước khi bạn điều chỉnh cài đặt cấu hình, bạn nên thiết lập các quy tắc Firewall để giới hạn các máy có thể kết nối với máy chủ Memcached của bạn. Nếu bạn đã làm theo các yêu cầu và cài đặt FirewallD trên máy chủ của bạn và không có kế hoạch kết nối với Memcached từ máy chủ khác thì bạn không cần phải điều chỉnh các quy tắc Firewall của mình. Ví dụ Memcached độc lập của bạn sẽ nghe 127.0.0.1, nhờ biến OPTIONS mà chúng ta đã định nghĩa trước đó, và do đó không có mối quan tâm về lưu lượng truy cập đến. Tuy nhiên,Nếu bạn có kế hoạch để cho phép truy cập vào máy chủ Memcached của bạn từ các máy chủ khác,  bạn sẽ cần phải thực hiện thay đổi cài đặt Firewall của bạn sử dụng lệnh firewall-cmd

Bắt đầu bằng cách thêm một vùng Memcached dành riêng cho chính sáchfirewalld :

sudo firewall-cmd --permanent --new-zone=memcached

Sau đó, chỉ định cổng nào bạn muốn mở. Memcached sử dụng cổng  11211 theo mặc định:

sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp

Tiếp theo, chỉ định các địa chỉ IP riêng tư cần được phép truy cập Memcached. Đối với điều này, bạn cần biết địa chỉ IP riêng của máy chủ khách hàng của mình:

sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP

Tải lại firewall để đảm bảo rằng các quy tắc mới có hiệu lực:

sudo firewall-cmd --reload

Các gói tin từ địa chỉ IP của khách hàng của bạn nên được xử lý theo các quy tắc trong vùng Memcached chuyên dụng. Tất cả các kết nối khác sẽ được xử lý bởi vùngpublic  theo mặc định.

Với những thay đổi này, chúng ta có thể tiếp tục thực hiện các thay đổi cấu hình cần thiết đối với dịch vụ Memcached , gắn nó với giao diện mạng riêng của máy chủ.

Liên kết  Memcached tới giao diện mạng cá nhân

Bước đầu tiên trong việc liên kết với giao diện mạng cá nhân của máy chủ sẽ thay đổi biến số  OPTIONS mà chúng ta đã đặt trước đó..

Chúng ta có thể mở lại/etc/sysconfig/memcached bằng cách gõ :

sudo vi /etc/sysconfig/memcached

Bên trong, tìm biến OPTIONS Bây giờ chúng ta có thể sửa đổi -l 127.0.0.1  để phản ánh địa chỉ IP riêng của Memcached:

/etc/sysconfig/memcached
. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

Lư và kết thúc file khi bạn làm xong .

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ớinetstat để xác nhận thay đổi:

sudo netstat -plunt
 
Output
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
. . . tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached 
. . .
 
 

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ể tiếp cận dịch vụ. Cũng nên kiểm tra quyền truy cập từ một khách hàng không được ủy quyền để đảm bảo rằng các quy tắc firewall của bạn có hiệu quả.

Kết luận

Trong hướng dẫn này chúng tôi đã giới thiệu cách bảo vệ máy chủ Memcached của bạn bằng cách cấu hình nó để liên kết với giao diện mạng cục bộ hoặc tư nhân của bạn và bằng cách cho phép xác thực SASL.