Linux에서 안전한 Redis 설치 수행하는 방법

Redis는 여러 가지 용도로 유용하며, 캐싱 중 하나입니다. Redis를 주 데이터 저장소로 사용하거나 데이터베이스 대체로도 사용할 수 있습니다. 그러나 안전한 Redis 설치를 어떻게 실행할까요? Redis 설치는 번거로울 수 있으며, 신경쓰지 않으면 많은 오류가 발생할 수 있습니다. 다행히도 이 튜토리얼이 여러분을 도와드릴 것입니다.

이 튜토리얼에서는 Linux 시스템에 안전하게 Redis를 설치하는 방법과 일반적인 실수를 피하는 몇 가지 팁을 배우게 됩니다.

계속해서 Redis 설치 오류를 해결하는 머리아픔을 피하십시오!

전제 조건

이 튜토리얼은 실습으로 진행됩니다. 따라오려면 다음을 준비하세요:

  • Ubuntu 20.04 LTS 머신 – 이 튜토리얼은 Ubuntu 20.04 LTS를 사용하지만 대부분의 Linux 배포판에서 비슷한 지침을 사용합니다.
  • 루트 권한 또는 sudo 권한이 있는 비루트 사용자

APT 패키지 관리자를 사용한 Redis 설치

Redis를 Ubuntu에 설치하는 몇 가지 방법이 있지만이 자습서에서는 Redis를 설치하기 위해 APT 패키지 관리자를 사용할 것입니다.

Redis는 C로 작성되어 있으므로 Redis를 소스 코드에서 직접 컴파일해야 합니다. 여러 종속성을 설치해야 하며 빌드 프로세스는 완벽하지 않을 수 있습니다.

소스에서 Redis를 컴파일하는 것은 권장되지 않지만 설치를 원하는 경우 설치를 사용자 정의할 수 있습니다. 소스 코드를 다운로드한 다음 수동으로 구성합니다.

터미널을 열고 아래의 apt update 명령을 실행하여 최신 패키지 목록을 확보하십시오.

sudo apt update -y
Updating the Linux system

이제 아래의 apt install 명령을 실행하여 시스템에 Redis를 설치하십시오.

아래 명령은 apt 패키지 관리자를 사용하여 Ubuntu 저장소에서 redis-server 패키지를 다운로드하고 설치하는 데 사용됩니다. -y 플래그는 설치 프로세스 중에 자동으로 프롬프트를 수락하도록 apt에 지시합니다.

sudo apt install redis-server -y
Installing Redis on your machine

Redis.conf 파일을 구성하여 Redis를 서비스로 실행

Redis를 방금 설치했지만 아직 사용할 준비가 되지 않았습니다. Redis를 사용하기 전에 먼저 redis.conf 파일을 구성해야 합니다.

설치한 Redis 패키지에 포함된 redis.conf 구성 파일은 기본적으로 /etc/redis/ 디렉터리에 저장됩니다. 이 파일에는 Redis의 모든 구성 옵션이 포함되어 있습니다.

.conf 파일 확장자는 논리적으로, 전통적인 패턴을 따릅니다. 많은 다른 프로그램들이 이와 같은 스타일을 사용합니다. 예를 들어, Apache 웹 서버는 주 구성 파일에 .conf 파일 확장자를 사용합니다.

1. 다음 systemctl 명령을 실행하여 redis-server 서비스를 stop합니다. Redis 서비스를 실행 중지하는 것은 Redis를 처음 사용할 때 권장되는 관행입니다.

sudo systemctl stop redis.service

2. 그 다음, 선호하는 텍스트 편집기에서 /etc/redis/redis.conf 파일을 엽니다.

supervised 지시문을 찾은 다음 아래와 같이 systemd로 설정하고 변경 사항을 저장합니다. 이렇게 하면 운영 체제에 Redis를 서비스로 실행하도록 지시합니다.

Setting up the systemd directive

3. 이제 Redis 서비스가 변경 사항을 아직 모르기 때문에 Redis 서비스 (redis.service)를 다시 시작하려면 아래의 systemctl restart 명령을 실행하십시오.

sudo systemctl restart redis.service

4. 마지막으로 Redis가 실행 중인지 확인하려면 아래의 systemctl status 명령을 실행하십시오.

sudo systemctl status redis.service

아래에서 보는 것처럼 출력에는 Redis 서비스가 실행 중임을 나타내는 내용이 표시됩니다.

Checking if Redis Service is Running

Redis 서버 기능이 올바르게 작동하는지 테스트하기

Redis 서비스를 구성하고 확인했지만, 이는 Redis 서버가 작동 중이라는 의미는 아닙니다. Redis 서버가 올바르게 작동하는지 테스트하는 방법은 무엇입니까? Redis 서버에 연결하여 명령을 보내서 서버가 응답하는지 확인합니다.

1. Redis 서버에 연결하려면 아래의 redis-cli 명령을 실행하십시오. redis-cli 는 Redis의 명령 줄 인터페이스로, 서버로 명령을 보내고 상태를 검사할 수 있습니다.

redis-cli

아래에서는 Redis 서버 프롬프트에 있다는 것을 알 수 있습니다 (127.0.0.1:6379>). redis-cli 명령은 기본적으로 127.0.0.1:6379에서 Redis 서버에 연결을 시도합니다.

Connecting to the Redis Server

2. 다음으로 Redis 서버에 연결 가능한지 확인하려면 아래의 ping 명령을 실행하십시오.

ping

서버가 PONG을 반환하여 Redis 서버에 연결 가능하며 서비스와 성공적으로 통신할 수 있음을 나타냅니다.

Pinging the Redis server

아마도 여전히 의심스러울 것입니다. 아래의 set 명령을 실행하세요. set 명령은 데이터베이스에 키-값 쌍을 설정하는 Redis 명령입니다.

set test "This is a test"

set 명령이 “OK”를 반환하는 것을 볼 수 있습니다. 이는 Redis 서비스가 올바르게 작동 중임을 나타냅니다. OK

Testing the Redis server

3. 아래의 exit 명령을 실행하여 redis-cli를 종료하세요. 이렇게 하면 Redis 서버에 대한 연결이 닫힙니다.

exit

Redis 서버를 로컬호스트에 바인딩

Redis 서버가 올바르게 작동하는 것을 방금 테스트했지만, 네트워크의 다른 장치에서도 접근할 수 있을 수 있습니다. 이 동작은 바람직하지 않으며, 일반적으로 Redis 서버를 모르는 사람들로부터 보호하고 싶을 것입니다.

Redis 서버를 localhost에 바인딩하면 Redis를 설치한 기기만 Redis 서버에 액세스할 수 있는 동작이 설정됩니다.

1. 텍스트 편집기에서 /etc/redis/redis.conf 파일을 엽니다.

2. bind 127.0.0.1 ::1이라고 쓰인 줄을 찾아서 줄의 맨 앞의 샵 기호(#)를 삭제하여 주석 처리를 해제하세요.

Uncommenting the bind 127.0.0.1 ::1 line

3. 이제 아래의 명령을 실행하여 redis-server 서비스를 다시 시작하세요.

sudo systemctl restart redis-server

4. 마지막으로 Redis 서버가 localhost에 바인딩되었는지 확인하기 위해 다음 명령을 실행하세요. netstat -lnp 명령은 모든 활성 네트워크 연결을 나열하고, grep redis 부분은 출력을 “redis”를 포함하는 줄로 필터링합니다.

-lnp는 로컬 이름 프로토콜(Local Name Protocol)을 나타내며, UNIX류 시스템에서 호스트 이름을 IP 주소로 변환하는 데 사용되는 네트워킹 프로토콜입니다.

sudo netstat -lnp | grep redis

아래에서 Redis 서버가 이제 로컬 호스트 인터페이스(127.0.0.1:6379)에서만 듣고 있다는 것을 볼 수 있습니다. 설정 파일의 변경을 반영하여, 활성 인터넷 연결(tcp)에는 이제 로컬 호스트 인터페이스만 나열되어 있습니다.

이제 네트워크의 다른 장치들은 Redis 서버에 연결할 수 없습니다.

Listing all active network connections

비밀번호로 Redis 서버 연결 보안 설정하기

현재 Redis는 사용자에게 암호화된 인증을 요구하도록 설정되어 있지 않습니다. Redis 서버의 IP 주소나 호스트 이름을 아는 사람은 누구나 이에 연결하여 데이터를 변경할 수 있습니다.

Redis 서버를 어떻게 보호하시겠습니까? Redis 서버에 연결할 때 사용자에게 인증을 요구하는 비밀번호를 설정하세요.

1. 텍스트 또는 코드 편집기에서 redis.conf 설정 파일을 다시 엽니다.

2. 다음으로 다음을 사용하여 강력한 비밀번호를 설정하세요.

  • SECURITY 섹션 아래의 requirepass foobared를 찾습니다.
  • 라인의 시작 부분에 있는 넘버 사인(#)을 삭제합니다.
  • foobared를 선택한 강력한 비밀번호로 대체하고 변경 사항을 저장합니다.
Providing a secure password

3. 다음 명령을 실행하여 Redis 서버를 다시 시작하고 연결합니다.

sudo systemctl restart redis-server
redis-cli

4. 이제 ping 명령을 실행하여 서버로부터 응답을 받는지 확인합니다.

ping

Below, 당신은 NOAUTH Authentication required이라는 오류 메시지를 볼 수 있습니다. 이 메시지는 원격으로 Redis 서버에 액세스하려면 인증 암호가 필요하다는 것을 나타냅니다.

Testing connection with the server

5. 아래의 auth 명령을 실행한 다음 암호를 입력하여 Redis 서버에 대한 연결을 인증하십시오.

auth Qae9p_fY:YjdtJ7k

성공적으로 인증되면 아래와 같이 OK 응답을받게 됩니다.

Authenticating Redis Server Connection

6. 마지막으로 ping 명령을 다시 실행하여 Redis 서버에 대한 연결이 성공적으로 인증되었는지 테스트하십시오.

ping

이제 연결을 인증한 후 아래와 같이 PONG 응답을받게됩니다. 이 시점에서 Redis 서버를 비밀번호로 성공적으로 보호했습니다.

Pinging the Redis server

Redis 서버를 보호하기 위해 위험한 명령 비활성화

Redis 서버에 대한 연결을 인증하는 비밀번호를 설정한다고 해서 100% 안전한 것은 아닙니다. 기본적으로 Redis에는 데이터베이스의 데이터를 변경할 수있게 하는 여러 위험한 명령이 포함되어 있습니다.

미인가된 사용자가 실행하면이 명령은 침입자가 Redis 데이터베이스의 데이터를 읽고 수정하거나 파괴하거나 심지어 삭제할 수 있게 합니다.

아래는 Redis 서버에 추가로 위험한 명령이 있을 수 있으므로 이 목록은 포괄적이지 않습니다:

FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF
BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL

Redis 서버를 더욱 안전하게 하려면 redis.conf 파일에서 이러한 위험한 명령을 다시 이름을 지어주십시오:

1. 텍스트 편집기에서 redis.conf 파일을 열고 Command renaming 섹션을 찾습니다.

다음 구문에 따라 명령어를 비활성화하기 위해 빈 문자열로 명령어의 이름을 변경하세요. 실제 명령어로 the-command를 대체하세요.

rename-command the-command ""

예를 들어, CONFIG 명령어를 비활성화하기 위해 CONFIG을 빈 문자열로 변경하고 변경 사항을 저장하세요. 쌍따옴표(“”)는 명령어를 비활성화하는 빈 문자열을 나타냅니다.

Renaming the CONFIG command

2. 텍스트 편집기에서 나가고 아래 명령어를 실행하여 Redis 서버를 재시작하세요.

sudo systemctl restart redis-server

3. 이제 Redis 서버에 연결하기 위해 다음 명령어를 실행하세요.

redis-cli
auth Qae9p_fY:YjdtJ7k

4. 마지막으로, config get 명령어를 실행하여 CONFIG 명령어가 비활성화되었는지 테스트하세요.

config get requirepass

CONFIG 명령어가 비활성화되었음을 나타내는 ERR unknown command config 응답을 받게 될 것입니다.

Checking the CONFIG command

config get requirepass 명령어가 실행되면, Redis 서버에 연결을 인증하기 위해 비밀번호를 요청합니다.

이제 Redis 서버를 보호하기 위해 위험한 Redis 명령어를 성공적으로 이름을 변경했습니다. 이제 redis.conf 파일에서 다른 위험한 명령어를 비활성화하세요.

방화벽을 사용하여 Redis 서버로의 차단 연결 요청

Redis 서버를 안전하게 보호하기 위해 방화벽을 설정하는 또 다른 방법입니다. 방화벽을 설정하려면 서버에서 실행 중인 각 서비스에 대해 필요한 포트만 허용해야 합니다.

예를 들어, 서버에서 Redis를 6379 포트에서 실행 중이라면 해당 포트만 열면 됩니다. 특정 IP 주소 또는 주소 범위에서 액세스를 허용해야 하는 경우 방화벽 규칙에 해당 주소를 추가할 수 있습니다.

방화벽을 설정하려면 먼저 방화벽 구성 도구를 설치해야 합니다. 이 예에서는 리눅스에서 일반적으로 사용되는 방화벽 구성 도구인 UFW를 사용합니다. 그러나 iptables와 같은 다른 도구를 사용하여 방화벽을 설정할 수도 있습니다.

1. 다음 명령을 실행하여 기기에 UFW를 설치합니다.

sudo apt install ufw -y

2. 그런 다음 아래 명령을 실행하여 UFW를 활성화합니다.

sudo ufw enable

아래에 표시된 메시지가 표시되면 ‘Y’를 입력하여 명령을 계속 실행합니다.

Enabling UFW

3. 아래 ufw 명령을 실행하여 Redis 서버의 포트 6379에서 (allow) 트래픽을 허용하는 규칙을 추가합니다. 의도된 사용자의 IP 주소로 11.22.33.44 IP 주소를 대체합니다.

sudo ufw allow from 11.22.33.44 to any port 6379
Adding a firewall rule to allow traffic on port 6379

4. 마지막으로 아래 명령을 실행하여 방화벽 규칙이 성공적으로 추가되었는지 확인합니다. 이 명령은 방화벽의 status를 확인합니다.

sudo ufw status

아래 출력에서 방화벽이 활성 상태이고 Redis에 대한 포트 6379의 트래픽을 IP 주소 11.22.33.44에서 허용하는 규칙이 있다는 것을 확인할 수 있습니다.

Checking the UFW rules

이제 IP 주소가 `11.22.33.44`인 사용자는 포트 `6379`를 통해 Redis에 연결할 수 있으며 비밀번호로 인증해야 합니다. 유사한 방식으로 다른 서비스를 위한 추가 포트를 추가할 수 있습니다.

결론

이 튜토리얼을 통해 위험한 명령어를 빈 문자열로 이름을 변경하고 방화벽을 설정함으로써 Redis 서버를 설치하고 보안을 강화하는 방법을 배웠습니다.

이 새로운 지식을 바탕으로, 서버를 불필요한 위험에 노출시키지 않고 Redis의 전체적인 이점을 즐길 수 있습니다.

더 배우고 싶으신가요? Kubernetes에서 Redis 서버를 보호하는 것부터 시작하는 것은 어떨까요?

Source:
https://adamtheautomator.com/redis-install/