Information Security ˗ˋˏ ♡ ˎˊ˗

OS/Database

[DBMS] Redis 정의 및 설치방법, 보안관점

토오쓰 2021. 11. 10. 17:18

https://t-okk.tistory.com/161

 

[DBMS] NoSQL 정의 및 특징

정의 No Only SQL 기존 관계형 DBMS가 갖고 있는 특징뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때 사용, 특정 서버에

t-okk.tistory.com

 

1. Redis란 무엇인가

정의

  • Remote + Dictionary + Server
  • Memory DB+NoSQL DB
  • In-Memory Database(Cache): Database보다 빠른 Memory에 더 자주 접근하고 덜 자주 바뀌는 데이터를 저장
  •  보편적인 메모리 기반의 Key-Value 형태인 데이터 관리
  •  시스템, 비 관계형 데이터베이스

 

특징

  • 자바 자료구조와 유사한 영속적인 자료구조를 제공한다.
  • 성능은 서버에 따라 다르나 초당 2만-10만 회 수행한다.
  • 데이터베이스로 사용될 수 있으며, cache로도 사용될 수 있는 기술이다.
    • Cache: 나중에 요청 결과를 미리 저장했다가 빠르게 서비스해주는 것을 의미
  • 여러 대의 서버 구성이 가능하다.
  • 페이스북, 인스타그램, 네이버 LINE 서비스 , StackOverflow 등 대형 서비스 업체들이 사용자들의 대규모 메시지를 실시간으로 처리하기 위하여 사용하고 있다.

 

장점

  • 리스트, 배열 데이터를 처리하는데 유용하며, 리스트 형 데이터 입력/삭제가 MySQL보다 훨씬 빠르다.
  • 영속적인 데이터 보존이 가능하다.
  • 단순한 구조의 데이터 모델인 key-value기반이기 때문에 쿼리를 따로 할 필요 없이 결과를 바로 가져올 수 있다
  • 디스크에 데이터 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
  • 다양한 API 지원한다.

 

Data Type

Strings 기본적인 데이터형
Key에 하나의 데이터 저장
문자열 뿐만 아니라 이진 데이터 저장 가능
Set <Key> <Value>
Lists 배열, 링크드 리스트
Sets 정렬되지 않은 집합형
한 Key에 중복된 데이터는 존재X
Hashes 객체를 나타내는데 사용하는 타입
필드명, 필드값의 연속으로 이루어짐
(Sorted) sets Sets의 각 요소마다 Score 실수 값(숫자) 존재
한 Key에 중복된 데이터는 존재 X

 

Redis 구성하는 방법

  • Read 분산과 데이터 이중화를 위한 Master/Slave 구조
    • Master 노드: 쓰기/읽기를 전부 수행, Slave는 읽기만 가능
  • Replication: Master에 있는 데이터를 복제해서 Slave로 옮기는 작업이다.

2. 설치(In Ubuntu)

1) apt-get 업데이트

$ sudo apt-get update
$ sudo apt-get upgrade

 

2) 아래의 명령어로 설치

$ sudo apt-get install redis-server

 

3) 버전 확인

$ redis-server --version

 

 

4) redis.conf 파일에서 Redis가 사용할 수 있는 최대 메모리 사용량과 최대 사용 메모리를 초과 시 데이터 삭제 방법 정의하기

$ sudo nano /etc/redis/redis.conf

 

 

5) 설정 파일에서 maxmemory와 maxmemory-policy를 찾아서 다음과 같이 바꾼다.

최대 사용 메모리양: 1G

최대 사용 메모리를 초과할 시 가장 오래된 데이터 지우고 메모리 확보하여 가장 최근에 저장된 데이터 사용으로 설정

maxmemory 1g
maxmemory-policy allkeys-lru

 

6) 설정이 적용되도록 Redis를 재시작한다.

$ sudo systemctl restart redis-server.service

 

7) Redis의 기본포트는 6379이다. Redis가 6379 포트를 쓰고 있는지 확인한다.

$ netstat -nlpt | grep 6379

 

8) Redis 서버 접속

$ redis-cli

 

9) set을 사용해서 key - value로 데이터 입력

set [key] [value]

 

10) get [key]로 데이터 값을 찾아온다.

get [key]

 

11) 저장된 key 검색

keys *검색어*

 

12) 전체 key 조회

keys *


3. 보안관점

1) 인증 패스워드 설정

cat /etc/redis/redis.conf | grep -i requirepass

방법: 주석 해제하여 인증 패스워드 설정

 

 

2) 인가된 IP만 접근할 수 있도록 Binding 설정

cat /etc/redis/redis.conf | grep -i bind

방법: 필요한 IP를 bind에 등록하여 사용한다.

 

 

3) Slave 읽기 권한만 설정

cat /etc/redis/redis.conf | grep -i slave-read-only

cat /etc/redis/redis.conf | grep -i slave-read-only (redis 5.X 이상)

방법: yes로 설정, Default 설정이 yes이다.

 

 

4) rename-command CONFIG 설정

공유되는 환경에서는 위험한 command 이름을 변경할 수 있기 때문에 안전한 command를 사용하도록 해야 한다.

CONFIG가 빈칸이거나 이름을 변경하여 사용하고 있는 경우 안전하다.

cat /etc/redis/redis.conf | grep –i rename-command

방법: 주석으로 되어있는 경우, 설정이 안 되어있는 것이다. 주석 해제하기

"" 의미: CONFIG 명령을 사용할 수 없도록 설정

어려운 문자열 의미: CONFIG 명령을 예측하기 어려운 문자열로 변경한 것

 

 

5) 권한 설정

5-1) 데이터 디렉터리 권한 설정

데이터 디렉터리의 Other 권한이 부여되어 있는지 확인한다.

cat /etc/redis/redis.conf | grep -v "^#" | grep "^dir"

방법: 권한 750으로 변경

 

 

5-2) 설정 파일 권한 설정

설정파일이 소유자에게만 권한이 설정되어 있는지 확인한다.

ls -al /etc/redis/redis.conf

방법: 소유자(redis)에게만 권한 설정 부여

 

 

6) 로그 활성화

로그를 정기적으로 살펴보면서 침입 유무를 파악하기 위해서 로그를 활성화시켜야 한다.

slowlog-log-slower-than: 슬로우 로그 쿼리 수행 시간, Default은 10000

 

 

https://codingmania.tistory.com/18

https://velog.io/@ayoung0073/database-redis

 

설치

https://hayden-archive.tistory.com/429