블로그로 돌아가기

Ubuntu 18.04에 Redis를 설치하고 보안을 설정하는 방법

Ubuntu 18.04에 Redis를 설치하고 보안을 설정하는 방법

Redis는 데이터베이스 서버, 캐시, 메시지 브로커로 사용할 수 있는 강력한 인메모리 키-값 저장소입니다. 빠른 성능, 유연성, 다양한 언어 지원으로 널리 알려져 있습니다. 무료 오픈 소스 소프트웨어이며 C 프로그래밍 언어로 작성되었습니다. 이 가이드에서는 Ubuntu 18.04에서 Redis를 설치하고 보안을 설정하는 방법을 알아봅니다.

사전 요구 사항

이 가이드를 따르려면 몇 가지 사항을 미리 준비해야 합니다. 먼저 Ubuntu 18.04 서버가 필요하며, 저희 튜토리얼을 따라 쉽게 설치할 수 있습니다. 또한 sudo 권한이 있는 non-root 사용자와 기본 방화벽이 구성되어 있어야 합니다. 이는 다음 가이드를 따라 설정할 수 있습니다: Linux sudoers 파일 구성Ubuntu 및 Debian 클라우드 서버에서 UFW 설정.

이제 시작해 보겠습니다!

Redis 설치하기

Redis는 공식 Ubuntu 리포지토리에서 직접 설치할 수 있습니다. 이것이 설치 및 구성하는 가장 간단한 방법입니다. 특별한 이유가 없다면 이 방법을 따르는 것을 권장합니다. Redis 소스 코드는 무료로 제공되므로 소스에서 직접 빌드할 수도 있습니다. 하지만 관리 및 업데이트가 더 번거롭기 때문에 권장하지 않습니다.

Ubuntu 리포지토리에서 Redis 설치

먼저 로컬 APT 패키지 캐시를 업데이트합니다:

다음으로, 아래 명령어를 사용하여 Redis를 설치합니다:

소스에서 Redis 설치

Ubuntu에는 기본적으로 빌드 도구와 필요한 라이브러리가 포함되어 있지 않습니다. 다음 명령어는 Redis 빌드에 필요한 모든 도구를 설치합니다:

Redis 빌드를 위한 두 가지 추가 종속성이 있습니다. 이러한 종속성은 TLS 지원, systemd 통합 등과 같은 추가 기능으로 Redis를 컴파일하는 데 필요합니다. TLS 지원을 포함하여 Redis를 컴파일하려면 “libssl-dev” 패키지를 설치하십시오. systemd 지원을 포함하여 Redis를 컴파일하려면 “libsystemd-dev” 패키지를 설치하십시오:

Redis 소스 코드는 GitHub에서 제공됩니다. Redis GitHub 페이지를 확인해 보세요. 다음으로 소스 코드를 가져옵니다:

Redis GitHub page

현재 활성 디렉토리를 Redis 소스 코드 디렉토리로 변경합니다:

그 후, make 도구를 실행하여 컴파일을 시작합니다. 추가 요소 없이 Redis를 컴파일합니다:

TLS 지원을 활성화하려면(“libssl-dev”가 설치되어 있다고 가정), 대신 다음 명령어를 사용하십시오:

systemd 지원을 활성화하려면(“libsystemd-dev”가 설치되어 있다고 가정), 다음 명령어를 사용하십시오:

다음으로 컴파일이 성공했는지 테스트합니다. 테스트를 실행하려면 추가 패키지 “tcl-dev” 및 관련 종속성이 필요할 수 있습니다:

마지막으로, 다음 명령어를 실행하여 Redis를 설치합니다:

Redis가 TLS를 사용하여 빌드된 경우, 서버 실행은 다음과 같은 방식으로 수행되어야 합니다:

Redis 구성하기

설치가 완료되면 Redis를 구성할 차례입니다. 텍스트 편집기에서 Redis 구성 파일을 열고 “supervised” 섹션으로 스크롤을 내립니다:

secure redis 1

“supervised” 값을 “systemd”로 변경합니다. 이렇게 하면 Redis 서비스가 시스템에 의해 관리됩니다. 변경 사항을 적용하려면 Redis 서비스를 재시작합니다:

Redis 테스트하기

Redis를 본격적으로 사용하기 전에 제대로 작동하는지 테스트하는 것이 좋습니다. 다음은 Redis 동작을 테스트하는 몇 가지 방법입니다. 첫 번째 단계는 Redis 서비스가 실행 중인지 확인하는 것입니다:

여기서 Redis는 이미 실행 중입니다. 기본적으로 Redis 서비스는 부팅 시 실행을 시작합니다. Redis 서비스를 수동으로 실행하려면 비활성화하십시오:

다음 테스트는 Redis 콘솔을 사용하여 확인하는 것입니다. Redis 명령줄 클라이언트를 실행합니다:

“ping” 명령을 실행합니다:

출력 결과는 서버에 대한 연결이 여전히 활성 상태임을 확인합니다. 다음 테스트는 키 설정을 허용하는지 확인하는 것입니다. 값이 “hello world”인 “temp” 키를 생성합니다:

“get” 명령을 사용하여 값을 검색합니다:

지금까지 모든 것이 정상적으로 작동한다면 Redis는 문제없이 키 값을 반환해야 합니다. Redis 명령줄 클라이언트를 닫습니다:

Redis command-line

마지막 테스트는 Redis가 중지되거나 재시작되더라도 데이터를 유지할 수 있는지 확인하는 것입니다. Redis 서비스를 재시작합니다:

위 명령을 실행하는 동안 오류가 발생하면 “systemctl enable redis-server” 명령을 사용하십시오:

Redis 명령줄 클라이언트를 실행하고 이전에 생성한 “temp” 키의 값을 검색합니다:

이것으로 Redis 테스트를 마칩니다. 이제 Redis 서버를 원하는 목적으로 사용할 준비가 되었습니다.

Redis 보안 설정

이 시점에서 Redis는 완전히 작동합니다. 그러나 일부 기본 구성은 최상의 보안을 제공하지 않습니다. 업데이트하지 않으면 악의적인 행위자가 이 기회를 이용하여 서버와 데이터에 액세스할 수 있습니다. 이 섹션에서는 이러한 취약점을 완화하는 방법을 보여줍니다. 이 단계는 선택 사항이지만 시스템 보안을 강화하기 위해 따르는 것을 강력히 권장합니다.

localhost에 바인딩

기본적으로 Redis는 localhost에서만 액세스할 수 있습니다. 그러나 원격 서버에 Redis를 구성한 경우 어디서나 연결할 수 있도록 구성을 업데이트해야 합니다. 하지만 이는 localhost에 바인딩하는 것만큼 안전하지 않을 수 있습니다. Redis를 localhost에 다시 바인딩하려면 텍스트 편집기에서 Redis 구성 파일을 엽니다:

아래로 스크롤하여 다음 항목을 찾습니다. 주석 처리되어 있지 않은지 확인하십시오:

Binding to localhost

파일을 저장하고 닫습니다. 그런 다음 변경 사항이 즉시 적용되도록 Redis 서비스를 재시작합니다:

변경 사항이 성공적으로 적용되었는지 확인합니다:

‘netstat: command not found’와 같은 오류가 발생하면 net-tools를 설치하는 명령인 “sudo apt-get install net-tools”를 사용하십시오. 출력 결과는 “redis-server”가 최근 변경 사항을 반영하여 localhost(127.0.0.1)에 성공적으로 바인딩되었음을 확인합니다. 다른 IP 주소(예: 0.0.0.0)가 있는 경우 구성 파일을 다시 확인하고 Redis 서버를 다시 시작하십시오.

Redis 비밀번호 구성

비밀번호를 구성하면 Redis의 내장 보안 기능인 – “AUTH” 명령을 사용할 수 있습니다. 클라이언트가 데이터베이스에 액세스하려면 인증을 받아야 합니다. 기본적으로 Redis에는 비밀번호가 구성되어 있지 않습니다. 비밀번호는 Redis 구성 파일에 선언해야 합니다. 텍스트 편집기에서 구성 파일을 엽니다:

그런 다음 아래로 스크롤하여 다음 줄의 주석을 해제합니다:

주석을 해제하면 “foobared”가 기본 비밀번호가 됩니다. 이를 원하는 비밀번호로 변경하십시오. Redis의 경우 비밀번호 강도는 매우 중요한 고려 사항입니다. Redis는 고성능 서버이므로 무차별 대입 공격(brute-force attacks)을 사용하여 악용하기가 더 쉬울 수 있습니다. 이것이 구성 파일에 다음과 같은 경고가 직접 포함되어 있는 이유입니다. 다음은 매우 강력한 무작위 비밀번호를 생성하는 간단한 예입니다. OpenSSL 명령을 사용하여 무작위 문자열을 생성합니다:

새 비밀번호를 설정한 후, 변경 사항을 적용하려면 Redis 서비스를 재시작하세요:

비밀번호가 성공적으로 적용되었는지 테스트할 차례입니다. Redis 명령줄 콘솔을 실행하세요:

그런 다음, 새 키를 설정해 보세요:

해당 작업에 대한 인증이 없으므로 Redis가 요청을 거부할 것입니다. 서버에서 작업을 수행하려면 먼저 사용자가 인증되어야 합니다. 다음 명령을 사용하여 사용자를 인증하세요:

비밀번호가 맞으면 Redis가 작업을 승인합니다. 이제 Redis가 서버 기능에 대한 액세스를 허용합니다:

이제 Redis 콘솔에서의 작업이 끝났습니다. 콘솔을 닫으셔도 됩니다:

위험한 명령의 이름 변경

Redis는 위험하다고 판단되는 특정 명령의 이름을 변경하거나 완전히 비활성화할 수 있도록 지원합니다. 이는 Redis의 또 다른 중요한 내장 보안 기능입니다. 왜 명령이 위험하다고 간주될까요? 권한이 없는 사용자가 이 명령을 실행하면 서버의 데이터를 재구성하거나 파괴하거나 지울 수 있기 때문입니다. 여러 위험한 Redis 명령을 비활성화하거나 이름을 변경하는 것이 일반적인 관행입니다. 명령의 보안 위협은 상황에 따라 다릅니다. 예를 들어, 다음 명령 중 일부는 정기적으로 필요할 수 있습니다. 이러한 경우 비활성화하는 것은 권장되지 않습니다. 이럴 때는 명령의 이름을 변경하는 것이 더 유용할 수 있습니다. 다음은 위험하다고 간주되는 명령의 간단한 목록입니다. 이는 Redis 서버의 보안을 강화하기 위한 좋은 출발점입니다:

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

명령의 이름을 변경하거나 비활성화하려면 Redis 설정 파일에 선언해야 합니다. Redis 설정 파일을 열고 다음 줄을 추가하세요. 여기서 “rename-command”는 명령의 이름을 빈 문자열로 변경하는 데 사용됩니다. 필요한 만큼 항목을 추가하세요:

마찬가지로, 명령의 이름을 다른 이름으로 변경할 수도 있습니다. 특정 상황에서는 이것이 더 많은 유연성을 제공할 수 있습니다:

rename-command

파일을 저장하고 편집기를 종료합니다. 변경 사항을 적용하려면 Redis 서비스를 재시작하세요:

변경 사항을 확인합니다. 다음으로 Redis 콘솔을 실행하고 액세스 권한을 인증하세요:

“CONFIG” 명령이 비활성화되었거나 이름이 변경되었다고 가정해 보겠습니다. 다음 “CONFIG” 명령을 사용해 보세요. 실패할 것입니다:

명령이 비활성화된 경우 다시 활성화할 때까지 액세스할 수 없습니다. 하지만 이름이 변경된 경우 새 별칭을 사용하세요:

command_4

결론

이 튜토리얼에서는 Redis 설치를 설치, 보안 설정, 구성 및 검증하는 방법을 설명했습니다. 또한 Redis의 내장 보안 기능을 사용하여 공격에 덜 취약하게 만드는 방법도 설명했습니다. 하지만 누군가 이미 서버에 로그인해 있다면 Redis 전용 보안 기능을 우회하는 것은 매우 쉽습니다. 이것이 Redis 서버에 대한 액세스를 보호하기 위해 방화벽을 갖추는 것이 중요한 이유입니다.

즐거운 컴퓨팅 되세요!

author

Hark Labs

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.