Hướng dẫn cài đặt và bảo vệ Memcached trên CentOS 7

3 năm trước

 

Giới thiệu

Nhiều hệ thống bộ nhớ đệm  như là Memcached có thể tối ưu hóa khả năng hoạt động của hệ cơ sở dữ liệu phụ trợ bằng việc lưu trữ thông tin vào trong bộ nhớ một cách tạm thời, giữ lại những tài liệu thường hay truy cập hoặc những tài liệu gần đây. Vì lẽ đó, chúng có thể giảm thiểu được kha khá những yêu cầu truy cập trực tiếp tới hệ cơ sở dữ liệu.

Vì nhiều hệ thống như Memcached có thể ngăn chặn tốt khả năng tấn công từ bên ngoài nếu như được cấu hình một cách chính xác, nên việc bảo mật các server Memcached là rất quan trọng. Trong phần này, chúng tôi sẽ hướng dẫn cho bạn làm thế nào để bảo vệ server Memcached bằng cách kết nối chương trình cài đặt tới giao diện mạng cục bộ hoặc riêng tư và tạo người dùng ủy quyền cho Memcached của bạn.

 

Yêu cầu căn bản

Giả sử server của bạn đã có một người dùng sudo và một firewall rồi, ta cần cài thêm:

 

Cài đặt Memcached từ kho lưu trữ

Nếu bạn chưa cài Memcached thì bạn có thể cài từ kho lưu trữ của CentOS 7, nhưng phải đảm bảo rằng các gói đã được update:

sudo yum update 

Tiến hành cài đặt:

sudo yum install memcached 

Cài thêm libmemcached, một thư viện cung cấp rất nhiều công cụ hữu ích phục vụ cho Memcached:

sudo yum install libmemcached 

Giờ ta sẽ chuyển sang thiết lập cấu hình bảo mật Memcached.

 

Thiết lập cấu hình bảo mật Memcached

Để đảm bảo rằng Memcached đang hoạt động trên giao diện cục bộ phiên bản 127.0.0.1 thì chúng ta sẽ chỉnh sửa các OPTIONS trên file cấu hình nằm ở địa chỉ /etc/sysconfig/memcached . Thêm nữa ta sẽ vô hiệu hóa công cụ UDP để bảo vệ máy chủ khỏi bị tấn công từ bên ngoài.

Mở mục /etc/sysconfig/memcached với vi:

sudo vi /etc/sysconfig/memcached 

Tải các OPTIONS :

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

Việc kết nối tới giao diện mạng cục bộ sẽ hạn chế lưu lượng truy cập tới khách hàng trong cùng một hệ thống. Ta sẽ thêm chỉ số -l 127.0.0.1vào các OPTIONS. Điều này có thể sẽ gây ra vấn đề trong một vài hoàn cảnh nhất định, nhưng nó lại rất hiệu quả trong quá trình bảo mật ứng dụng.

Vì giao thức UDP hiệu quả hơn TCP trong việc ngăn chặn các khả năng tấn công từ bên ngoài nên chúng ta cũng sẽ vô hiệu hóa công cụ UDP. Ta sẽ thêm thông số -U 0 vào mục OPTIONS. File sẽ trông như thế này:

/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 hoàn thành.

Khởi động lại Memcached để lưu thay đổi:

sudo systemctl restart memcached 

Để xác minh Memcached hiện đã nằm trong giao diện cục bộ hay chưa và có hoạt động khi kết nối TCP hay không thì chạy lệnh sau:

sudo netstat -plunt 

Kết quả hiển thị:

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

Xác nhận rằng memcached nằm trong địa chỉ 127.0.0.1 và chỉ hoạt động với TCP.

 

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

Để thêm người dùng ủy quyền cho Memcached thì bạn cần sử dụng SALS (Simple Authentication and Security Layer) , đây là một framework tách đôi quy chuẩn xác thực từ các giao thức ứng dụng, chúng ta sẽ sử dụng framework đó trong file cấu hình Memcached của mình và sau đó thêm người dùng với nhãn quyền xác thực.

Cấu hình SASL 

Đầu tiên ta phải kết nối Memcached với câu lệnh memstat. Điều này giúp ta hình thành SASL và việc xác thực người dùng sẽ đi vào hoạt động sau khi thay đổi file cấu hình

Để check memcached có hoạt động hay không, gõ lệnh:

memstat --servers="127.0.0.1" 

Kết quả hiển thị:

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

Giờ sẽ hữu hiệu hóa SASL. Tìm thông số -S trong OPTIONS ở mục /etc/sysconfig/memcached

sudo vi /etc/sysconfig/memcached 

Thêm cả hai thông số -S và -vv vào mục OPTIONS .Thông số -vv sẽ tạo đầu ra ở mục  /var/log/memcached, để ta dễ dàng sửa lỗi:

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

Lưu và đóng file.

Khởi động lại Memcached :

sudo systemctl restart memcached 

Xem chi tiết để xem SASL đã hoạt động hay chưa:

sudo journalctl -u memcached 

Kết quả hiển thị như sau, ngụ ý SASL đã được khởi tạo:

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

Ta sẽ check kết nối lại một lần nữa vì SASL dù đã được khởi tạo nhưng có thể sẽ báo lỗi do chưa xác thực:

memstat --servers="127.0.0.1" 

Để check trạng thái hoạt động , chạy lệnh sau:

echo $? 

$? sẽ trả về giá trị code của lệnh cuối. Thường thì tất cả những thông tin khác giá trị 0 đều có nghĩa là thao tác thất bại. Trong trường hợp này, giá trị chúng ta thấy sẽ là 1, ngụ ý lệnh memstat đã thất bại.

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

Bây giờ chúng ta sẽ download 2 gói để thao tác với thư viện Cyrus SASL Library và cơ chế xác thực của nó, bao gồm các plugin hỗ trợ công cụ xác thực PLAIN. Đó là các gói  cyrus-sasl-devel và cyrus-sasl-plaincho phép ta tạo và xác thực người dùng:

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

Tạo địa chỉ và file mà Memcached có thể kiểm tra cấu hình SASL :

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

Thêm cấu hình file SASL dưới đây:

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

Ta sẽ cài đặt  mech_list giá trị plain, lệnh cho Memcached sử dụng chính file mật khẩu của nó để xác minh mật khẩu bản rõ. Chúng ta sẽ xác định đường dẫn tới file cơ sở dữ liệu người dùng mà ta sẽ tạo sau đó. Giờ thì lưu và đóng file.

 Giờ thì ta sẽ tạo hệ cơ sở dữ liệu SASL với nhãn quyền người dùng. Sử dụng lệnh saslpasswd2 để tạo đường vào mới cho người dùng trong hệ cơ sở dữ liệu với thông số  -c  , người dùng sẽ tạm thời xuất hiện ở đây với tên “sammy”, bạn có thể đổi tên người dùng. Sử dụng thông số -f có thể xác định đường dẫn tới hệ cơ sở dữ liệu ở địa chỉ /etc/sasl2/memcached.conf 

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

Cuối cùng nếu chúng ta muốn cho quyền sở hữu người dùng trên hệ cơ sở dữ liệu SASL  thì nhập lệnh

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

Khởi động lại Memcached:

sudo systemctl restart memcached 

Chạy lại  memstat  một lần nữa để xác nhận quá trình xác thực đã hoạt động hay chưa. Lúc này ta sẽ chạy chương trình với nhãn quyền xác thực

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

Kết quả hiển thị:

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

Lúc này chương trình đã cài đặt thành công và người dùng được xác thực.

 

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

Chúng ta đã khái quát cách để cấu hình Memcached hoạt động trên giao diện cục bộ để có thể tránh khả năng tấn công từ bên ngoài.  Có nhiều trường hợp bạn cần cho phép truy cập từ các server khác. Trong trường hợp này cần điều chỉnh cấu hình để kết nối Memcached với giao diện mạng riêng tư.

Giới hạn truy cập IP với công cụ Firewalls

Trước khi điều chỉnh cấu hình cần cài đặt quy chuẩn firewall để hạn chế truy cập tới server  Memcached. Nếu bạn đã cài đặt những yêu cầu cơ bản như bên trên và cài đặt FirewallD trên server rồi và bạn không muốn kết nối Memcached từ các server khác thì bạn có thể bỏ qua bước này. Memcached chuẩn của bạn sẽ hoạt động ở địa chỉ 127.0.0.1 dựa vào các OPTIONS mà chúng ta định nghĩa lúc đầu, và bạn không cần phải lo ngại về lưu lượng truy cập đầu vào nữa. Còn nếu bạn muốn kết nối với các máy chủ khác thì cần phải thay đổi cài đặt firewall sử dụng lệnh firewall-cmd

Thêm vùng Memcached vào firewalld :

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

Xác định cổng cần mở, mặc định là 11211 :

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

Tiếp đến là xác định địa chỉ IP riêng tư của khách hàng cho phép truy cập Memcached.Cách xác định địa chỉ IP riêng tư của khách hàng như sau:

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

Tải lại firewall để lưu thay đổi:

sudo firewall-cmd --reload 

 Các gói địa chỉ IP khách hàng mà bạn có bây giờ sẽ được xử lý theo quy chuẩn như trong vùng Memcached chuyên dụng. còn các kết nối khác sẽ được xử lý ở vùng public mặc định.

Tiếp đến chúng ta cần thay đổi cấu hình căn bản cho Memcached, bằng việc liên kết tới giao diện mạng riêng tư của máy chủ.

Liên kết Memcached tới giao diện mạng riêng tư

Bước đầu tiên là ta cần điều chỉnh các OPTIONS mà chúng ta cài trước đó.

Mở mục /etc/sysconfig/memcached :

sudo vi /etc/sysconfig/memcached 

Trong OPTIONS , chỉnh -l 127.0.0.1 để tương thích với IP riêng tư của server  Memcached :

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

Lưu và đóng file khi hoàn thành.

Khởi động lại Memcached :

sudo systemctl restart memcached 

Check lại bằng lệnh netstat để xác nhận thay đổi:

sudo netstat -plunt 
OutputActive 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ừ bên ngoài để đảm bảo chương trình chạy đúng như cài đặt. Nếu kiểm tra khả năng truy cập từ nguồn khách hàng không xác thực thì càng tốt để đảm bảo rằng quy chuẩn firewall của bạn đang hoạt động rất hiệu quả.

 

Kết luận

Trong phần này chúng tôi đã khái quát cách bảo vệ server Memcached của bạn qua việc cài đặt cấu hình cho nó để để liên kết với giao diện mạng cục bộ hoặc riêng tư  bằng cách hữu hiệu hóa công cụ xác thực SASL .