- vừa được xem lúc

Phần 3: Bảo mật cho redis. (redis security)

0 0 12

Người đăng: Dương Anh Tuấn

Theo Viblo Asia

Seri Redis của chúng ta gồm những phần sau:

Phần 1: Cài đặt redis cơ bản + Turning redis.
Phần 2: Lệnh quản trị redis cơ bản
Phần 3: Bảo mật cho redis. (redis security)
Phần 4: Access List Redis (tính năng mới ở bản 6)
Phần 5: Các mô hình Redis replication
Phần 6: Cài đặt Redis Master-Salve
Phần 7: Cài đặt Redis Setinel
Phần 8: Cài đặt Redis Cluster
Phần 9: SAVE/BGSAVE, data dump redis, backup, restore, di chuyển từ redis đơn sang cluster.
Phần 10: Data type trong Redis, một vài ví dụ sử dụng (String/hash/sort/list/queue/pub-sub....).
Phần 11: Một số lỗi thường gặp khi quản trị hệ thống Redis.
Phần 12: Continue...

Phần 3: Bảo mật cho redis. (redis security)

Trên thế giới, có rất nhiều vụ redis phơi port ra ngoài bị chiếm quyền điều khiển để cài miner, hoặc xóa sạch dữ liệu redis, thay đổi dữ liệu để trục lợi. Vì vậy ta luôn sẵn tinh thần bảo mật cho redis:

1. Thay đổi Port

Thay đổi port để tránh bị scan tấn công:

[_@.com ~]# /etc/init.d/redis_6379 stop
[_@.com ~]# cat /opt/redis/conf/6379.conf | grep 'port 6379'
port 6379
[_@.com ~]# cat /etc/init.d/redis_6379 | grep REDISPORT
REDISPORT="6379" # VD ta đổi thành port 6800, cần đổi ở trong file config và file khởi động.
[_@.com ~]# vi /opt/redis/conf/6379.conf port 6800
[_@.com ~]# vi /etc/init.d/redis_6379
REDISPORT="6800" #Kiểm tra:
[_@.com ~]# ps aux | grep redis | grep server
root 97040 0.1 0.1 165072 3032 ? Ssl 13:09 0:00 /usr/local/bin/redis-server 127.0.0.1:6800
[_@.com ~]# redis-cli -h 127.0.0.1 -p 6800 INFO

2. Chặn firewall

  • Nếu bạn chạy app và redis chung 1 server, giữ nguyên bind 127.0.0.1, Port redis chỉ lắng nghe nội bộ nên khá an toàn.
  • Trường hợp App và redis nằm ở riêng 2 server khác nhau, ta để bind 0.0.0.0 nhưng chú ý Chặn Firewall hoặc chặn network ở mạng nội bộ DMZ.

Cách public port redis như sau:

[_@.com ~]# cat /opt/redis/conf/6379.conf | grep bind | grep -v '#'
bind 127.0.0.1 -::1
Sửa thành bind 0.0.0.0 . Và chú ý về Firewall, chặn không cho bên ngoài tấn công.

3. Đặt mật khẩu cho redis

Có 2 cách đặt mật khẩu, bản redis 6 ra tính năng mới ra ACL, mình khuyến khích các bạn dùng ACL này về sau. Các phần tiếp theo tôi sẽ hướng dẫn các bạn sử dụng thành thạo ACL.

[_@.com conf]# redis-cli -p 6800
127.0.0.1:6800> ACL SETUSER default on >matkhau ~* &* _@.com
OK
127.0.0.1:6800> CONFIG REWRITE
OK
[_@.com conf]# redis-cli --user default --pass matkhau -p 6800 INFO
Ta kiểm tra config sẽ có thêm 1 dòng sau:
[_@.com conf]# cat /opt/redis/conf/6379.conf | grep 'user default'
user default on #6445e373d7fcde106bfcb897ee8f0bb28589bd7797f54f1ef4e5d5447cfbd011 ~* &* _@.com Sửa lại init file, nếu không sửa bạn sẽ không bật tắt đc redis bằng init/systemd:
[_@.com conf]# vi /etc/init.d/redis_6379 | grep cli
CLIEXEC="/usr/local/bin/redis-cli --user default --pass matkhau" 

Cách 2: Không sử dụng ACL (không khuyến khích về sau, dùng cho các thư viện code cũ, bạn phải đảm bảo trong config đang không dùng ACL)

[_@.com conf]# cat /opt/redis/conf/6379.conf | grep 'user default'
user default on #64xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe5d5447cfbd011 ~* &* _@.com
Nếu có dòng này, bạn hãy comment # lại. Vì nếu ACL cách 1 đã có, thì cách 2 ở dưới bị vô hiệu. Sửa config như sau: [_@.com conf]# vi /opt/redis/conf/6379.conf
requirepass "matkhau" Kiểm tra:
[_@.com conf]# redis-cli -p 6800 -a matkhau INFO Sửa init file: [_@.com conf]# vi /etc/init.d/redis_6379 | grep cli
CLIEXEC="/usr/local/bin/redis-cli -a matkhau" 

4. Xóa những lệnh nguy hiểm

Liệt kê những lệnh nguy hiểm (chỉ dành cho quản lý redis, không dành cho role dev, app):

127.0.0.1:6379> ACL CAT dangerous 1) "replconf" 2) "restore" 3) "cluster" 4) "pfdebug" 5) "bgrewriteaof" 6) "latency" 7) "acl" 8) "swapdb" 9) "info"
10) "replicaof"
11) "migrate"
12) "flushall"
13) "flushdb"
14) "lastsave"
15) "keys"
16) "save"
17) "config"
18) "pfselftest"
19) "restore-asking"
20) "slaveof"
21) "sync"
22) "failover"
23) "debug"
24) "slowlog"
25) "role"
26) "module"
27) "psync"
28) "sort"
29) "client"
30) "monitor"
31) "bgsave"
32) "shutdown"

Thay command nguy hiểm xóa hết dữ liệu hoặc làm giảm hiệu năng redis. Ta sửa config như sau:

[_@.com conf]# tail /opt/redis/conf/6379.conf
rename-command FLUSHALL XOAHETDATA
rename-command FLUSHDB XOADATADBHIENTAI
[_@.com conf]# redis-cli -p 6800
127.0.0.1:6800> flushall
(error) ERR unknown command `flushall`, with args beginning with: > OK , đã xóa lệnh flushall 

5 Không cho redis chạy quyền root.

Với hệ thống dùng Systemd ta thêm User và Group=redis như sau:

[_@.com ~]# adduser redis --no-create-home
[_@.com ~]# vi /etc/systemd/system/redis.service
[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
Wants=network-online.target
After=network-online.target [Service]
ExecStart=/usr/local/bin/redis-server /opt/redis/conf/6379.conf --supervised systemd --daemonize no
ExecStop=/usr/local/bin/redis-cli SHUTDOWN
#ExecStop=/usr/local/bin/redis-cli --user default --pass matkhau SHUTDOWN
LimitNOFILE=10032
User=redis
Group=redis [Install]
WantedBy=multi-user.target 

Với hệ thống dùng init file ta chạy thẳng start bằng user redis.

[_@.com ~]# /etc/init.d/redis_6379 stop
[_@.com ~]# adduser redis --no-create-home
[_@.com ~]# chown -R redis.root /opt/redis
[_@.com ~]# chown redis.redis /etc/init.d/redis_6379
[_@.com ~]# su - redis
-bash-4.2$ /etc/init.d/redis_6379 start
Starting Redis server..
-bash-4.2$ ps aux | grep redis
redis 85679 0.3 0.1 162512 3216 ? Ssl 08:47 0:00 /usr/local/bin/redis-server 0.0.0.0:6379

Ngoài ra , để bảo mật redis còn có các đề nghị sau đây:

  • Phân quyền chạy và đọc file tối thiểu (file chạy là 750, file log, config là 640)
  • Đặt lịch Backup log, config, dump
  • Bật TLS giữa client và redis-server.

Phần sau, tôi sẽ hướng dẫn bạn một cách khác là dùng ACL để khóa các command nguy hiểm này

Bình luận

Bài viết tương tự

- vừa được xem lúc

Caching đại pháp 2: Cache thế nào cho hợp lý?

Caching rất dễ. Mình không nói đùa đâu, caching rất là dễ. Ai cũng có thể làm được chỉ sau 10 phút đọc tutorial. Nó cũng giống như việc đứa trẻ lên 3 đã có thể cầm bút để vẽ vậy.

0 0 126

- vừa được xem lúc

Caching đại pháp 1: Nấc thang lên level của developer

Bí quyết thành công trong việc đáp ứng hệ thống triệu user của những công ty lớn (và cả công ty nhỏ). Tại sao caching lại là kỹ thuật tối quan trọng để phù phép ứng dụng rùa bò của chúng ta thành siêu phẩm vạn người mê.

0 0 82

- vừa được xem lúc

Cache dữ liệu Nodejs với Redis

Một tí gọi là lý thuyết để anh em tham khảo. Cache là gì. Lợi ích của việc cache data. .

0 0 111

- vừa được xem lúc

Nguyên tắc hoạt động của redis server

Sự ra đời của Redis. . Câu chuyện bắt đầu khi tác giả của Redis, Salvatore Sanfilippo. (nickname: antirez), cố gắng làm những công việc gần như là không.

0 0 97

- vừa được xem lúc

Viết ứng dụng chat realtime với Laravel, VueJS, Redis và Socket.IO, Laravel Echo

Xin chào tất cả các bạn, đây là một trong những bài post đầu tiên của mình. Sau bao năm toàn đi đọc các blog tích luỹ được chút kiến thức của các cao nhân trên mạng.

0 0 918

- vừa được xem lúc

Tìm hiểu tổng quan về Redis

1. Lời mở đầu.

0 0 368