Redis parameter BIND

Redis Server Course Redis Technical Support Redis Enterprise Server

Redis BIND

바인드(bind) 파라미터는 레디스 버전 1.0부터 있었으나, 주석(comment) 처리되어 있어 서버에 있는 모든 IP에서 접속을 허용했다.   3.2.0부터 보호모드(protected-mode) 파라미터 등장과 함께 바인드(bind) 파라미터의 주석이 사라졌고 디폴트로 IP 127.0.0.1이 적용되었다.   즉, 서버 내부에서만 접속이 허용되고 외부에서 접속하려면 redis.conf 파일에 외부로부터 접속할 수 있는 IP를 bind에 등록하도록 했다.  클라이언트 IP를 등록하는 것이 아니고, 레디스 서버가 설치된 서버에 여러 개의 IP 중 레디스 서버가 사용할(listen/accept)할 것을 등록한다. 즉, ifconfig로 나오는 IP 중에서 bind에 등록하는 것이다.
아마도 살바토르 개인적으로는 이런 조치를 취하고 싶지 않았겠지만, 보안 사고들이 많이 발생하고 보안 강화 요구가 많아지면서 이런 조치들을 취하고 있는 것이다.
이것은 보안의 한 요소이다.   bind 파라미터는 서버에 있는 사용 가능한 네트워크 인터페이스(network interface) IP를 redis.conf bind 파라미터에 등록해서 해당 IP로 접속하는 클라이언트만 받아들이는 기능이다.

이 문서는 버전 3.2.2를 기준으로 만들었다.


TCP/IP 통신

TCP/IP 통신에서 서버 프로그램은 자기가 청취(listen) 하고자 하는 IP와 port를 설정하고 그 IP와 port로 오는 클라이언트의 요청을 받아들인다.   여기서 IP는 서버에서 사용 가능한(network interfaces available on the Server) IP로 ifconfig 리눅스 명령으로 볼 수 있다.   포트는 서버 포트(예, 6379)이다.
서버 측 TCP/IP 통신 순서는 socket() -> bind(IP, Port) -> listen(IP, Port)이다.   서버와 클라이언트의 통신 함수 사용 순서는 아래 그림과 같다.

tcpip flow

    그림 1   TCP/IP 통신 함수 사용 순서


레디스 서버 TCP/IP 통신 함수

레디스 서버가 시작할 때 initServer() 함수에서 anet.c 와 networking.c에 있는 함수들을 호출해서 socket(), bind(), listen(), accept()를 차례대로 수행한다.

redis server tcpip networking flow

    그림 2   레디스 서버 TCP/IP 통신 함수

참고로 redis-cli는 hiredis 라이브러리를 사용해서 레디스 서버에 접속한다.



BIND 설정


BIND 127.0.0.1

이것은 디폴트이고 127.0.0.1로 접속하는 클라이언트만 접속을 허용한다.   즉, 서버 내부에서만 접속을 허용하는 것이다.
내부 테스트 용


주석(comment)처리 또는 BIND 0.0.0.0

이것은 서버에 있는 사용 가능한 모든 IP로 접속을 허용한다.
낮은 단계의 보안


BIND 196.168.56.102 127.0.0.1

가능한 IP를 지정해서 사용한다.   제목에 IP는 예를 들은 것이다.  최대 16개까지 지정할 수 있다.
운영 단계의 보안


AWS(Amazon Web Services)

BIND 0.0.0.0을 사용하거나 ifconfig에서 조회되는 private-ip를 설정합니다.
BIND private-ip 127.0.0.1


정리

위 예에서처럼 가능한 IP를 지정해서 사용하세요.   보호모드(protected-mode)와의 관계는 보호모드(protected-mode) 설명을 참고하세요.
센티널의 sentinel.conf에는 bind 파라미터가 들어있지 않다.   추가로 입력해서 사용한다.


<< PROTECTED-MODE BIND BGREWRITEAOF >>

조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.