Redis parameter BIND

레디스 서버 교육 신청 레디스 정기점검/기술지원
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 답글이 올라오면 이메일로 알려드리겠습니다.