Hướng dẫn cách cài đặt và bảo mật Redis trên Ubuntu 20.04

nexsoft.vn 19/01/2024

Redis là một hệ thống cơ sở dữ liệu key-value được sử dụng rộng rãi trong các ứng dụng web hiện đại nhờ tính năng caching mạnh mẽ, nổi bật với độ linh hoạt cao, hiệu năng tốt và hỗ trợ nhiều ngôn ngữ khác nhau. Bài viết này sẽ hướng dẫn chi tiết cách cấu hình, cài đặt và bảo mật Redis trên Ubuntu 20.04.

Điều kiện để cài đặt và bảo mật Redis trên Ubuntu 20.04

Trước khi bắt đầu cài đặt, bạn cần có quyền truy cập vào một server Ubuntu 20.04, có user non-root với quyền sudo và tường lửa được cấu hình bằng ufw.

Bước 1 – Cài đặt và cấu hình Redis

Bạn sẽ sử dụng bộ quản ký package APT để cài đặt redis từ repo của Ubuntu. Đầu tiên hãy cập nhật cache local apt bằng lệnh sau: (tại thời điểm viết bài, phiên bản mặc định trong kho lưu trữ là 5.0.7)

Sau đó cài đặt Redis:

Lệnh này sẽ download và cài đặt Redis cũng như các dependency của nó. Tiếp theo, cần thay đổi một số cấu hình trong file config của Redis đươc tạo tự động trong quá trình cài đặt.

Mở file bằng text editor:

Bên trong file, hãy tìm directive supervised. Directive này cho phép khai báo một hệ thống init (khởi tạo) để quản lý Redis như một dịch vụ, từ đó bạn có thể kiểm soát các hoạt động của nó tốt hơn. Theo mặc định thì directive supervised được đặt thành no. Vì hệ điều hành Ubuntu sử dụng hệ thống systemd nên hãy đổi thành systemd như dưới đây:

Sau đó lưu rồi đóng lại file. Cuối cùng là restart lại dịch vụ Redis để áp dụng các thay đổi mới trong file cấu hình:

Bước 2 – Kiểm tra Redis

Sau khi cài đặt và cấu hình xong, hãy thử kiểm tra xem Redis có đang hoạt động chính xác hay không trước khi thay đổi thêm các cấu hình.

Sử dụng lệnh dưới đây để xem Redis có đang chạy không:

Nếu dịch vụ đang chạy và không có lỗi gì thì output sẽ có dạng như dưới đây:

Nếu muốn khởi động Redis thủ công sau mỗi lần boot server thì bạn có thể chạy lệnh dưới đây để thiết lập:

Để kiểm tra xem Redis có đang hoạt động bình thường hay không, hãy kết nối đến server bằng client command-line của Redis:

Sau đó kiểm tra khả năng kết nối bằng lệnh ping:

Nếu output là PONG thì bạn có thể đảm bảo rằng kết nối vẫn đang hoạt động. Tiếp theo, kiểm tra xem bạn có khả năng thiết lập các key hay không:

Output thường sẽ là OK. Sau đó bạn có thể lấy giá trị bằng lệnh:

Nếu mọi thứ vẫn hoạt động bình thường thì bạn sẽ nhận lại được giá trị vừa lưu trữ:

Sau đó thoát khỏi Redis prompt để quay lại shell:

Cuối cùng, bạn cần kiểm tra xem Redis có thể giữ lại dữ liệu sau khi dừng hay bị restart hay không. Hãy thử restart một instance Redis bằng lệnh sau:

Sau đó kết nối với client command-line;

Xác thực xem giá trị kiểm thử có còn không:

Bây giờ bạn có thể về lại shell sau khi hoàn tất:

Đến hết bước này, bạn đã cài đặt và có đầy đủ các chức năng cơ bản của Redis để sử dụng. Tuy nhiên một số cấu hình mặc định của Redis không đủ an toàn và có khả năng bị các hacker khai thác để tấn công vào server. Do đó, các bước sau của bài viết sẽ tập trung vào các phương pháp giảm thiểu những lỗ hổng bảo mật trong các cấu hình này. Bạn có thể bỏ qua nếu không có nhu cầu bảo mật thêm cho hệ thống vì bây giờ Redis đã hoàn toàn sẵn sàng để sử dụng bình thường.

Ngoài ra, bạn cũng nên tham khảo thêm về cách cài đặt SSH Keys trên Ubuntu 20.04 để có thể để truy cập từ xa vào các máy chủ và được khuyến khích trong việc bảo vệ an ninh cho hệ thống của bạn.

Bước 3- Bind với localhost

Theo mặc định thì Redis chỉ có thể truy cập được từ localhost, tuy nhiên nếu thực hiện sai các bước cài đặt (hoặc làm theo hướng dẫn khác) thì có thể bạn đã vô tình cấu hình để cho phép mọi kết nối đến dịch vụ.

Mở file cấu hình Redis bằng nano:

Tìm dòng này rồi uncomment (bỏ dấu # ở phía trước):

Sau đó lưu rồi đóng file lại. Bây giờ hãy restart lại dịch vụ để áp dụng các thay đổi:

Kiểm tra xem thay đổi đã được áp dụng chưa bằng lệnh netstat như sau:

Nếu trên server chưa có lệnh netstat thì bạn có thể cài đặt bằng lệnh sau:

Dựa vào output trên, bạn có thể xác nhận rằng redis-server đã được bind với địa chỉ localhost (127.0.0.1). Nếu thấy địa chỉ khác trong cột này thì hãy thử thực hiện lại các thao tác ở trên rồi restart lại Redis.

Sau bước này, Redis vẫn chưa được thiết lập để yêu cầu user xác thực trước khi thực hiện thay đổi với cấu hình hay dữ liệu được lưu trữ. Do đó bạn cần bổ sung thêm một lớp xác thực bằng mật khẩu thông qua Redis client ở bước sau.

Bước 4 – Cấu hình mật khẩu Redis

Việc cấu hình mật khẩu Redis cho phép enable một tính năng bảo mật có sẵn của dịch vụ – lệnh auth, yêu cầu client xác thực khi truy cập cơ sở dữ liệu. Mật khẩu có thể được cấu hình trực tiếp trong file config của Redis /etc/redis/redis.conf:

Kéo xuống phần SECURITY rồi tìm directive # requirepass foobared, sau đó bỏ dấu # ở dòng đầu rồi đổi foobared thành mật khẩu tương ứng.

Theo như tài liệu của Redis thì dịch vụ này có tốc độ xử lý rất nhanh, vì vậy các hacker có thể thử đến 150 nghìn mật khẩu mỗi giây. Vì vậy bạn cần đặt một mật khẩu rất mạnh để đảm bảo an toàn cho hệ thống. Vietnix khuyên bạn nên sử dụng lệnh openssl để tạo một mật khẩu ngẫu nhiên, sau đó pipe output của lệnh này vào một lệnh openssl thứ hai:

Sau đó copy rồi paste vào phần directive requirepass như ở trên.

Sau khi thiết lập mật khẩu xong, lưu và đóng file lại rồi restart Redis:

Để kiểm tra xem phương thức xác thực mật khẩu đã hoạt động chưa, bạn có thể mở Redis client lên:

Sau đó nhập lệnh sau để thử đặt một key cho giá trị khi user vẫn chưa xác thực:

Hệ thống sẽ trả về lỗi:

Tiếp theo hãy thử xác thực bằng mật khẩu tong file config của Redis (thay mật khẩu tương ứng vào phần your_redis_password;

Bây giờ hệ thống sẽ trả về OK để báo đã xác thực thành công. Sau đó bạn có thể thoát khỏi client bằng lệnh quit.

Bước 5 – Đổi tên các lệnh nguy hiểm

Khi Redis được chạy bởi những người dùng chưa được xác thực thì một số lệnh nguy hiểm có thể được sử dụng để cấu hình lại, phá hủy hay xóa toàn bộ dữ liệu. Do đó một tính năng bảo mật khác được tích hợp trong dịch vụ là đổi tên hoặc disable các lệnh này.

Một số lệnh được xem là nguy hiểm gồm có: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, và DEBUG. Tất nhiên vẫn còn nhiều lệnh khác, nhưng việc xử lý những lệnh được liệt kê này sẽ cải thiện đáng kể khả năng bảo mật của hệ thống.

Mở file cấu hình để đổi tên hoặc disable lệnh:

Để vô hiệu hóa một lệnh, bạn chỉ cần đổi tên nó thành một chuỗi rỗng:

Tương tự, để đổi tên một lệnh bạn có thể đặt một tên khác vào trong chuỗi, nên chọn tên nào đó khó đoán nhưng vẫn dễ nhớ đối với bản thân bạn.

Sau đó lưu rồi đóng lại file. Bây giờ restart lai Redis để áp dụng các thay đổi:

Vào command line Redis để thử nghiệm các lệnh mới:

Sau đó dùng lệnh sau để xác thực:

Giả sử rằng bạn đã đổi tên lệnh CONFIG thành ASC12_CONFIG, bây giờ hãy thử dùng lệnh CONFIG như ban đầu:

Hệ thống sẽ trả về lỗi:

Bây giờ chạy lại với tên lệnh mới:

Bây giờ bạn có thể thoát khỏi redis-cli:

Lưu ý rằng việc đổi tên lệnh chỉ an toàn nếu lệnh đã được đổi tên không nằm trong file AOF, hoặc có trong file AOF nhưng chưa được chuyển đến các slave. Vì vậy thời điểm tốt nhất để đổi tên lệnh là khi bạn không sử dụng AOF, hoặc ngay sau khi cài đặt xong và trước khi deploy ứng dụng chạy trên Redis.

Ngoài ra nếu bạn đang tìm kiếm một máy chủ để cài đặt Redis thì VPS chính là giải pháp tối ưu dành cho bạn. Khi dùng VPS để cài Redis mang lại nhiều ưu điểm như: tăng tính bảo mật, tăng khả năng quản lý và điều khiển, tối ưu hóa hiệu suất và tốc độ truy xuất dữ liệu, cung cấp nhiều tính năng và module hỗ trợ.

Hiện tại, các gói VPS tốc độ cao tại Vietnix có cấu hình đa dạng, dễ dàng mở rộng theo nhu cầu sử dụng và hỗ trợ đa dạng hệ điều hành có thể giúp bạn cài đặt Redis hiệu quả.

Lời kết

Bài viết này đã hướng dẫn chi tiết cách cài đặt, cấu hình và bổ sung các tính năng bảo mật cho Redis. Trong đó cần lưu ý rằng tính năng quan trọng nhất cho Redis vẫn là tường lửa. Các phương pháp trong bài viết này chỉ chủ yếu ngăn chặn các trường hợp truy cập trái phép vào server khi chưa xác thực. Việc thiết lập và bảo mật cho Redis là một công việc quan trọng để đảm bảo tính ổn định, bảo mật và hiệu quả cho ứng dụng web của bạn. Nếu bạn có bất kỳ câu hỏi hoặc góp ý nào, hãy để lại bình luận phía dưới, Vietnix sẽ hỗ trợ bạn.