Cách Cài Đặt & Bảo Mật Redis Trên Ubuntu Chuẩn Production Cực Dễ A-Z
Cài đặt và bảo mật Redis trên Ubuntu là việc bạn bắt buộc phải làm trước khi đưa Redis vào chạy thực tế, vì Redis mặc định “tin tưởng” mọi client kết nối đến và không phân quyền truy cập. Bài viết sẽ đi theo từng bước chuẩn: cài Redis qua APT, cấu hình systemd, […]
Cài đặt và bảo mật Redis trên Ubuntu là việc bạn bắt buộc phải làm trước khi đưa Redis vào chạy thực tế, vì Redis mặc định “tin tưởng” mọi client kết nối đến và không phân quyền truy cập. Bài viết sẽ đi theo từng bước chuẩn: cài Redis qua APT, cấu hình systemd, kiểm tra hoạt động, gắn kết localhost, đặt mật khẩu cho đến đổi tên các lệnh nguy hiểm. Nếu chưa có máy chủ để thực hành, bạn có thể bắt đầu ngay với dịch vụ ThueVPSGiaRe.vn.
Redis là gì? Vì sao cài xong phải bảo mật ngay?
Redis là hệ quản trị dữ liệu key-value chạy trên RAM, nổi tiếng nhờ tốc độ xử lý cực nhanh, tính linh hoạt và khả năng hỗ trợ rộng rãi cho các ngôn ngữ lập trình; song vì Redis mặc định chấp nhận mọi kết nối mà không hỏi tên, nên ngay sau khi cài xong trên máy chủ Ubuntu, bạn phải gắn kết nó vào localhost, đặt mật khẩu và khóa các lệnh nguy hiểm trước khi chạy production.

Về bản chất, Redis lưu dữ liệu trong bộ nhớ, giúp truy xuất gần như tức thời, vì vậy nó thường được dùng làm cache, hàng đợi, lưu phiên đăng nhập hoặc nơi đếm số liệu thời gian thực. Nếu bạn chưa nắm nền tảng, hãy đọc qua bài tổng quan về Redis, công dụng và cách so sánh với các giải pháp khác, hoặc tìm hiểu nguyên lý caching hoạt động như thế nào để hiểu vì sao Redis thường đứng ngay trước database của ứng dụng. Trong nhiều trường hợp, người ta cũng cân nhắc Redis cạnh Memcached để chọn công cụ cache phù hợp với kiến trúc hệ thống của mình.
Chuẩn bị trước khi cài đặt Redis trên Ubuntu
Trước khi bắt đầu, hãy chắc chắn máy chủ của bạn thỏa mãn các điều kiện sau — đây là các yêu cầu nền tảng trong hướng dẫn gốc, giúp mọi lệnh phía sau chạy đúng như kỳ vọng:
- Một máy chủ Ubuntu: hướng dẫn gốc thực hiện trên Ubuntu 18.04, các bước cài đặt về cơ bản giữ nguyên trên các phiên bản Ubuntu mới hơn.
- Tài khoản non-root có quyền sudo: bạn không nên thao tác bằng root trực tiếp. Nếu chưa có, xem nhanh cách tạo user có quyền sudo trên Ubuntu chỉ với vài lệnh.
- Tường lửa đã được thiết lập: việc mở và chặn port cần được kiểm soát ngay từ đầu, bạn có thể tham khảo cách thiết lập tường lửa UFW trên Ubuntu trước khi cài dịch vụ nào.
- Truy cập được máy chủ: mọi thao tác dưới đây đều thực hiện qua giao diện dòng lệnh, nếu bạn mới dùng VPS lần đầu, xem trước hướng dẫn đăng nhập VPS Linux qua SSH để kết nối vào máy chủ.
Bước 1 — Cài đặt và cấu hình Redis trên Ubuntu
Trong bước này, bạn sẽ cài Redis từ kho phần mềm chính thức của Ubuntu, sau đó chỉnh sửa file cấu hình để dịch vụ Redis được quản lý bởi systemd — tức là Redis sẽ khởi động cùng máy chủ và có thể được điều khiển bằng các lệnh systemctl.
Cài đặt Redis từ kho phần mềm
Redis có sẵn trong kho mặc định của Ubuntu, vì vậy việc cài đặt rất đơn giản. Trước tiên, cập nhật danh sách gói, sau đó tiến hành cài Redis:
sudo apt update
sudo apt install redis-server
Quá trình tải và cài đặt sẽ chạy tự động. Sau khi hoàn tất, Redis đã sẵn sàng trên hệ thống, nhưng chưa tối ưu — bước tiếp theo là chỉnh cấu hình.
Cấu hình Redis chạy dưới sự quản lý của systemd
Mở file cấu hình của Redis bằng trình soạn thảo nano:
sudo nano /etc/redis/redis.conf
Bên trong file, tìm đến dòng khai báo supervised. Chỉ thị này quyết định hệ thống init nào sẽ quản lý tiến trình Redis dưới dạng dịch vụ. Mặc định, giá trị là no. Vì Ubuntu sử dụng systemd, hãy đổi thành systemd:
# supervised no
supervised systemd
Lưu file và đóng trình soạn thảo. Với thay đổi này, systemd sẽ giám sát Redis, tự động khởi động lại nếu dịch vụ gặp sự cố và khởi chạy Redis cùng hệ điều hành.
Khởi động lại và kiểm tra trạng thái dịch vụ
Khởi động lại dịch vụ Redis để cấu hình mới có hiệu lực, sau đó kiểm tra trạng thái:
sudo systemctl restart redis.service
sudo systemctl status redis
Nếu mọi thứ ổn, bạn sẽ thấy kết quả tương tự như sau — chú ý dòng Active: active (running) xác nhận Redis đang chạy bình thường:
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-06-27 18:48:52 UTC; 10s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 2421 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 2430 (redis-server)
Tasks: 4 (limit: 1152)
CGroup: /system.slice/redis-server.service
└─2430 /usr/bin/redis-server 127.0.0.1:6379
Bước 2 — Kiểm tra Redis hoạt động đúng sau khi cài
Trước khi tiến hành thay đổi cấu hình bảo mật, hãy xác nhận Redis đang hoạt động đúng. Bạn sẽ tương tác với máy chủ Redis bằng công cụ dòng lệnh redis-cli, thực hiện lưu và đọc dữ liệu, rồi khởi động lại Redis để kiểm tra dữ liệu có được giữ nguyên hay không.
Kết nối vào Redis đang chạy trên localhost ở cổng 6379:
redis-cli
Cửa sổ terminal sẽ chuyển thành prompt của Redis: 127.0.0.1:6379>. Gõ ping để kiểm tra kết nối — Redis sẽ trả lời PONG:
ping
PONG
Tiếp theo, thử lưu một key có giá trị để kiểm tra khả năng ghi:
set test "It's working!"
OK
Đọc lại giá trị vừa lưu:
"It's working!"
Khi cả hai thao tác ghi và đọc đều thành công, gõ exit để thoát giao diện Redis, sau đó khởi động lại dịch vụ:
sudo systemctl restart redis
Kết nối lại với Redis và kiểm tra key vừa tạo vẫn còn tồn tại sau khi restart:
redis-cli
127.0.0.1:6379> get test
"It's working!"
Nếu giá trị hiển thị đúng như trước khi restart, nghĩa là dữ liệu của bạn được lưu bền — một dấu hiệu tốt cho thấy Redis đang vận hành ổn định. Cuối cùng, thoát khỏi prompt Redis bằng lệnh exit.
Nếu bạn muốn kiểm tra thêm việc Redis có tự khởi động cùng máy chủ hay không, chạy lệnh sudo systemctl is-enabled redis — kết quả enabled cho biết dịch vụ đã được bật tự khởi động.
Bước 3 — Gắn kết Redis vào localhost
Theo mặc định sau cài đặt, Redis chỉ cho phép kết nối từ chính máy chủ đó (localhost, 127.0.0.1). Đây là cấu hình an toàn bạn nên giữ nguyên, trừ khi bạn thực sự hiểu mình đang làm gì.
Tuy nhiên trên nhiều VPS, do tự tay cài hoặc chỉnh sửa lung tung, Redis có thể bị mở ra để nghe từ mọi địa chỉ IP — một lỗ hổng bị tấn công rất phổ biến: kẻ xấu chỉ cần scan toàn dải port, tìm thấy cổng 6379 rồi gửi lệnh truy cập mà không cần mật khẩu. Nếu bạn nghi ngờ VPS đang bị scan hoặc xâm nhập, hãy đọc bài kiểm tra VPS có bị scan pass hay xâm nhập không để xử lý kịp thời.
Để kiểm tra, mở lại file cấu hình:
sudo nano /etc/redis/redis.conf
Tìm dòng bind và chắc chắn dòng dưới đây đang được bật (không bị đánh dấu # ở đầu):
bind 127.0.0.1 ::1
Nếu dòng này đúng như trên, Redis chỉ chấp nhận kết nối từ localhost. Lưu file, rồi khởi động lại dịch vụ để áp dụng:
sudo systemctl restart redis.service
Để xác nhận Redis thực sự chỉ lắng nghe trên localhost, dùng lệnh netstat. Nếu máy chủ chưa có công cụ này, cài gói net-tools trước:
sudo apt install net-tools
Chạy lệnh kiểm tra port mà Redis đang nghe. Nếu bạn chưa quen, cú pháp lệnh netstat được tổng hợp chi tiết trong bài lệnh netstat và cách dùng từng tham số:
sudo netstat -tnlp | grep redis
Kết quả mong đợi sẽ tương tự như sau:
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
Như vậy Redis chỉ lắng nghe tại 127.0.0.1:6379 và ::1:6379 (localhost, cả IPv4 và IPv6). Nếu không thấy dòng nào xuất hiện, hãy kiểm tra lại dòng bind trong file cấu hình rồi khởi động lại Redis.
Lưu ý quan trọng: nếu ứng dụng của bạn nằm trên máy khác và cần truy cập Redis từ xa, đừng vội đổi bind ra địa chỉ IP công khai — cách đúng đắn là dùng một kênh kết nối mã hóa như SSH tunnel hoặc VPN. Bạn có thể nắm khái niệm trước qua bài SSH là gì và cách kết nối an toàn.
Bước 4 — Đặt mật khẩu cho Redis
Redis cung cấp lớp bảo vệ bằng mật khẩu thông qua chỉ thị requirepass trong file cấu hình. Khi mật khẩu được đặt, bất kỳ client nào muốn thao tác đều phải xác thực bằng lệnh AUTH trước.
Một điểm cần biết: Redis xử lý mật khẩu cực kỳ nhanh, nhờ đó client có thể xác thực nhiều lần mỗi giây, nhưng điều này cũng có nghĩa mật khẩu dễ bị dò vét (brute-force) nếu quá ngắn. Vì vậy hãy đặt một mật khẩu thật dài và ngẫu nhiên thay vì mật khẩu dễ nhớ.

Tạo mật khẩu mạnh
Chạy lệnh sau để sinh một chuỗi ký tự ngẫu nhiên dài 60 ký tự:
openssl rand 60 | openssl base64 -A
Kết quả sẽ là một chuỗi đại loại như (đây chỉ là ví dụ minh họa, bạn phải dùng chuỗi do máy của bạn sinh ra):
RBOJ9cTNo3rHnbTMZwVzjAvYiuuJy5eRTKbthj9un2XPhmYFlgB6gsZ7hSDAMfdKDCHMvJIeCkE2DjX
Sao chép chuỗi này lại. Hãy chạy lệnh trên mỗi khi cần một mật khẩu mới — tuyệt đối không dùng mật khẩu mẫu trong bài viết.
Khai báo mật khẩu trong file cấu hình
Mở lại file cấu hình Redis:
sudo nano /etc/redis/redis.conf
Tìm chỉ thị requirepass. Mặc định dòng này bị chú thích và mang giá trị placeholder foobared. Hãy bỏ dấu # và thay bằng mật khẩu bạn vừa tạo:
requirepass RBOJ9cTNo3rHnbTMZwVzjAvYiuuJy5eRTKbthj9un2XPhmYFlgB6gsZ7hSDAMfdKDCHMvJIeCkE2DjX
Lưu file, khởi động lại dịch vụ:
sudo systemctl restart redis.service
Kiểm tra mật khẩu đã hoạt động
Kết nối lại Redis. Lúc này, ngay cả lệnh ping cũng bị từ chối:
redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
Xác thực bằng mật khẩu đã đặt:
127.0.0.1:6379> auth RBOJ9cTNo3rHnbTMZwVzjAvYiuuJy5eRTKbthj9un2XPhmYFlgB6gsZ7hSDAMfdKDCHMvJIeCkE2DjX
OK
127.0.0.1:6379> ping
PONG
Tiếp tục thử thao tác ghi và đọc sau khi xác thực thành công:
127.0.0.1:6379> set key1 10
OK
127.0.0.1:6379> get key1
"10"
Nếu bây giờ bạn thoát Redis rồi kết nối lại và chạy get key1, bạn sẽ nhận lỗi NOAUTH — nghĩa là mọi phiên kết nối mới đều phải xác thực lại. Đây chính là hành vi bảo mật mong muốn: mỗi phiên đều phải có mật khẩu thì mới thao tác được dữ liệu.
Bước 5 — Đổi tên hoặc vô hiệu hóa các lệnh nguy hiểm
Ngoài xác thực bằng mật khẩu, Redis còn cho phép bạn đổi tên hoặc vô hiệu hóa hoàn toàn một số lệnh. Lợi ích rất rõ ràng: kể cả khi kẻ xấu lọt được vào Redis, họ vẫn không thể chạy những lệnh nguy hiểm nhất để xóa sạch dữ liệu hay chỉnh cấu hình máy chủ.
Các lệnh thường bị coi là nguy hiểm trong môi trường production gồm FLUSHALL (xóa toàn bộ dữ liệu mọi database), CONFIG (xem và sửa cấu hình), cùng một số lệnh tác động mạnh khác. Việc khóa tất cả hay chỉ khóa một phần là quyết định tùy theo nhu cầu thực tế của ứng dụng — nếu bạn chưa từng dùng lệnh nào, vô hiệu hóa là lựa chọn hợp lý.
Cách đổi tên lệnh trong file cấu hình
Trong file /etc/redis/redis.conf, dùng chỉ thị rename-command. Nếu đặt tên mới là chuỗi rỗng "", lệnh đó bị vô hiệu hóa hoàn toàn. Ví dụ, khóa lệnh FLUSHALL:
rename-command FLUSHALL ""
Với lệnh bạn vẫn cần dùng nhưng muốn giấu đi (như CONFIG), hãy đổi tên thành một chuỗi dài, ngẫu nhiên và khó đoán — bạn có thể tạo bằng chính lệnh openssl ở Bước 4:
rename-command CONFIG RBOJ9cTNo3rHnbTMZwVzjAvYiuuJy5eRTKbthj9un2XPhmYFlgB6gsZ7hSDAMfdKDCHMvJIeCkE2DjX
Lưu file cấu hình và khởi động lại Redis:
sudo systemctl restart redis.service
Kiểm tra các lệnh đã bị đổi tên
Kết nối lại Redis và xác thực bằng mật khẩu như Bước 4, sau đó thử lần lượt:
redis-cli
127.0.0.1:6379> auth mật_khẩu_của_bạn
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> flushall
(error) ERR unknown command 'flushall'
127.0.0.1:6379> config get requirepass
(error) ERR unknown command 'config'
FLUSHALL đã bị xóa hoàn toàn, còn CONFIG đã bị đổi tên nên gọi bằng tên gốc sẽ không còn tồn tại. Để chạy CONFIG, bạn phải gọi bằng tên mới:
127.0.0.1:6379> auth RBOJ9cTNo3rHnbTMZwVzjAvYiuuJy5eRTKbthj9un2XPhmYFlgB6gsZ7hSDAMfdKDCHMvJIeCkE2DjX
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "mật_khẩu_bạn_đặt_ở_bước_4"
Hai lưu ý quan trọng: một là, hãy ghi lại các tên lệnh đã đổi ở nơi an toàn — Redis không có cơ chế mặc định nào liệt kê lại chúng cho bạn; hai là, nếu đổi tên CONFIG, ứng dụng hoặc các công cụ quản trị của bạn cũng phải dùng tên mới đó để tương tác, còn nếu không thì chỉ nên đổi khi thật sự cần thiết.
Checklist kiểm tra an toàn Redis trước khi lên Production
Trước khi đưa ứng dụng thực tế vào vận hành, bạn hãy đối chiếu với bảng tổng hợp các hạng mục kiểm tra kỹ thuật sau đây nhằm đảm bảo dịch vụ đã được bảo vệ đa tầng:
| Hạng mục | Giá trị đề xuất | Mục đích an toàn |
|---|---|---|
| Supervised | systemd |
Đảm bảo Ubuntu quản lý vòng đời tiến trình đồng bộ |
| Địa chỉ bind | 127.0.0.1 ::1 |
Chỉ mở kết nối nội bộ, cách ly hoàn toàn khỏi Internet |
| Mật khẩu xác thực | Chuỗi ngẫu nhiên dài (từ 50 ký tự trở lên) | Chống tấn công brute-force tốc độ cao |
| Đổi tên lệnh | Tắt FLUSHALL, đổi tên CONFIG |
Ngăn chặn xóa sạch database và can thiệp file máy chủ |
| Kế hoạch sao lưu | Sao lưu tệp dump.rdb định kỳ | Kết hợp cùng giải pháp sao lưu dữ liệu VPS định kỳ đề phòng sự cố phần cứng |
Câu hỏi thường gặp khi cài đặt và bảo mật Redis trên Ubuntu
Redis vừa cài xong có an toàn để dùng ngay không? Không. Redis mặc định tin tưởng mọi client kết nối đến, không có phân quyền. Bộ ba cấu hình trong bài — bind localhost, mật khẩu requirepass và đổi tên lệnh nguy hiểm — chính là lớp bảo vệ tối thiểu trước khi đưa Redis vào sử dụng thật.
Có nên mở port 6379 ra internet để truy cập từ xa? Không nên. Cách an toàn là giữ Redis nghe trên localhost và truy cập từ xa qua SSH tunnel hoặc VPN; nếu cần, bổ sung thêm tường lửa chỉ cho phép IP tin cậy kết nối.
Vô hiệu hóa hay đổi tên lệnh tốt hơn? Nếu bạn và ứng dụng không bao giờ dùng lệnh đó, vô hiệu hóa bằng chuỗi rỗng là gọn nhất. Nếu vẫn cần dùng thỉnh thoảng, đổi tên thành chuỗi dài ngẫu nhiên để chỉ mình bạn biết cách gọi.
Quên tên lệnh đã đổi thì làm sao? Mở lại file redis.conf, tìm các dòng rename-command để xem tên mới. Vì vậy hãy lưu sẵn danh sách này ở nơi an toàn ngay khi cấu hình.
Bảo mật Redis xong thì làm gì tiếp cho máy chủ? Redis chỉ là một mảnh ghép. Hãy nhìn tổng thể bằng quy trình bảo mật VPS 10 bước chống hacker để đảm bảo các dịch vụ khác trên máy chủ cũng được khóa chặt tương tự.
Tổng kết: Cài đặt và bảo mật Redis trên Ubuntu chưa bao giờ khó
Như vậy, cài đặt và bảo mật Redis trên Ubuntu chỉ gồm 5 bước chính: cài Redis qua APT và cấu hình supervised systemd, kiểm tra hoạt động bằng redis-cli, gắn kết vào localhost, đặt mật khẩu dài và ngẫu nhiên, cuối cùng là đổi tên hoặc vô hiệu hóa các lệnh như FLUSHALL và CONFIG. Ba lớp bảo vệ này xếp tầng lên nhau, giúp Redis an toàn ngay cả trong môi trường production.
| Lớp bảo vệ | Cấu hình liên quan | Tác dụng |
|---|---|---|
| Bind localhost | bind 127.0.0.1 ::1 |
Chỉ máy chủ mới kết nối được vào Redis |
| Mật khẩu | requirepass |
Bắt mọi phiên kết nối phải xác thực bằng AUTH |
| Đổi tên lệnh | rename-command |
Khóa hoặc giấu các lệnh xóa dữ liệu, sửa cấu hình |
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận và khả năng quản trị riêng.
Nội dung trên được biên soạn cho mục đích tham khảo kỹ thuật. Các câu lệnh, đường dẫn tệp tin và thông số cấu hình có thể có sự khác biệt tùy theo phiên bản phân phối Ubuntu, phiên bản Redis Server hoặc chính sách mạng của từng nhà cung cấp hạ tầng. Quản trị viên nên chủ động kiểm thử, tạo bản sao lưu dữ liệu đầy đủ và đánh giá rủi ro an toàn thông tin trước khi áp dụng trên môi trường thực tế (production).



