NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
19/04/2023
Lượt xem

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

19/04/2023
14 phút đọc
Lượt xem

Đánh giá

5/5 - (169 bình chọn)

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)

sudo apt update

Sau đó cài đặt Redis:

sudo apt install redis-server

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:

sudo nano /etc/redis/redis.conf

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:

. . .  # If you run Redis from upstart or systemd, Redis can interact with your # supervision tree. Options: #   supervised no      - no supervision interaction #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET #   supervised auto    - detect upstart or systemd method based on #                        UPSTART_JOB or NOTIFY_SOCKET environment variables # Note: these supervision methods only signal "process is ready." #       They do not enable continuous liveness pings back to your supervisor. supervised systemd  . . .

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:

sudo systemctl restart redis.service

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:

sudo systemctl status redis

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:

Output ● redis-server.service - Advanced key-value store      Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)      Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago        Docs: http://redis.io/documentation,              man:redis-server(1)     Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)    Main PID: 36561 (redis-server)       Tasks: 4 (limit: 2345)      Memory: 1.8M      CGroup: /system.slice/redis-server.service              └─36561 /usr/bin/redis-server 127.0.0.1:6379 . . .

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:

sudo systemctl disable redis

Để 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:

redis-cli

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

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:

set test "It's working!"

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

get test

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ữ:

Output "It's working!"

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

exit

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:

sudo systemctl restart redis

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

redis-cli

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

get test
Output "It's working!"

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

exit

Đế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:

sudo nano /etc/redis/redis.conf

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

bind 127.0.0.1 ::1

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:

sudo systemctl restart redis

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

sudo netstat -lnp | grep redis
Output tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      14222/redis-server   tcp6       0      0 ::1:6379                :::*                    LISTEN      14222/redis-server  

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

sudo apt install net-tools

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:

sudo nano /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:

openssl rand 60 | openssl base64 -A
Output RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

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

/etc/redis/redis.conf requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

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

sudo systemctl restart redis.service

Để 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:

redis-cli

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

set key1 10

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

Output (error) NOAUTH Authentication required.

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;

auth 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ó: FLUSHDBFLUSHALLKEYSPEXPIREDELCONFIGSHUTDOWNBGREWRITEAOFBGSAVESAVESPOPSREMRENAME, 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:

sudo nano  /etc/redis/redis.conf

Để 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:

. . . # It is also possible to completely kill a command by renaming it into # an empty string: # rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG "" . . .

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.

. . . # rename-command CONFIG "" rename-command SHUTDOWN SHUTDOWN_MENOT rename-command CONFIG ASC12_CONFIG . . .

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

sudo systemctl restart redis.service

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

redis-cli

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

auth your_redis_password
Output OK

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:

config get requirepass

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

Output (error) ERR unknown command `config`, with args beginning with: 

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

asc12_config get requirepass
Output 1) "requirepass" 2) "your_redis_password"

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

exit

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.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG