Hướng dẫn cài đặt và bảo vệ Memcached trên CentOS 7
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:
- Một máy chủ Cloud Server CentOS 7 của ViCloud.
- Thiết lập cấu hình ban đầu trên cloud server CentOS 7.
- Hướng dẫn tạo người dùng Sudo trên CentOS.
- Ứng dụng Firewalld.
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
:
. . .
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:
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ị:
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 . . .
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ị:
Output
Server: 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:
. . .
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-plain
cho 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:
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ị:
Output
Server: 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 :
. . .
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
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ừ 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 .