Redis는 기본 설치 상태에서 인증 없이 누구나 접속할 수 있습니다. 인터넷에 노출된 Redis는 데이터 탈취는 물론 서버 전체가 침해될 수 있습니다. 2016년부터 이어지는 Redis 랜섬웨어 피해가 그 증거입니다.
보안 취약 여부 확인
# 외부에서 접속 테스트 (서버 IP 사용)
redis-cli -h 서버IP ping
# PONG이 반환되면 외부 노출 상태
# 현재 설정 확인
redis-cli CONFIG GET bind
redis-cli CONFIG GET requirepass
1. bind 설정으로 인터페이스 제한
/etc/redis/redis.conf (또는 /etc/redis.conf):
# 로컬호스트에서만 접속 허용
bind 127.0.0.1 -::1
# 특정 IP에서도 허용할 경우
# bind 127.0.0.1 192.168.1.100
2. requirepass로 인증 설정
# 강력한 비밀번호 설정 (최소 32자 권장)
requirepass 랜덤하고강력한비밀번호
# 비밀번호 생성 예시
# openssl rand -base64 32
# 인증 후 명령 실행
redis-cli -a 비밀번호 ping
# 또는 접속 후 인증
redis-cli
> AUTH 비밀번호
> PING
3. 위험 명령어 비활성화
다음 명령어들은 공격자가 악용할 수 있어 비활성화 또는 이름 변경이 필요합니다:
# redis.conf에서 위험 명령어 비활성화
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
rename-command KEYS "*" # 프로덕션에서 성능 문제도 있음
rename-command SHUTDOWN SHUTDOWN_SAFE_NAME
# 또는 다른 이름으로 변경 (관리자만 알게)
rename-command CONFIG "SECRET_CONFIG_CMD_abc123"
4. 방화벽으로 포트 차단
# Redis 포트(6379)를 로컬 및 특정 IP에서만 허용
sudo ufw deny 6379
sudo ufw allow from 127.0.0.1 to any port 6379
# 애플리케이션 서버가 별도 서버인 경우
sudo ufw allow from 10.0.0.5 to any port 6379
5. protected-mode 확인
Redis 3.2 이상에서 외부 접속 시 보호 모드가 기본 활성화되어 있습니다:
# bind 설정이나 requirepass 없이 외부에서 접근하면 오류 반환
protected-mode yes
6. TLS 암호화 연결 (Redis 6 이상)
# redis.conf
port 0 # 일반 포트 비활성화
tls-port 6380 # TLS 포트 활성화
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt
tls-auth-clients yes
# TLS로 접속
redis-cli -h 127.0.0.1 -p 6380 \
--tls \
--cert /etc/redis/tls/client.crt \
--key /etc/redis/tls/client.key \
--cacert /etc/redis/tls/ca.crt
7. 로그 설정
# redis.conf
loglevel notice
logfile /var/log/redis/redis-server.log
# 접속 시도 모니터링
sudo tail -f /var/log/redis/redis-server.log
8. 실행 사용자 제한
# Redis를 redis 전용 계정으로 실행 (기본값이지만 확인)
cat /etc/systemd/system/redis.service | grep User
# User=redis
# redis 사용자는 /data 이외의 디렉터리 접근 불가하게
9. 설정 적용 및 검증
# 설정 파일 문법 검사
redis-server /etc/redis/redis.conf --test-memory 1
# Redis 재시작
sudo systemctl restart redis
# 외부에서 접속 테스트 (차단 확인)
redis-cli -h 서버IP ping
# Could not connect to Redis at 서버IP:6379: Connection refused
보안 점검 체크리스트
# 외부 인터페이스에 바인드되어 있는지 확인
redis-cli CONFIG GET bind
# 인증 설정 확인
redis-cli -a 비밀번호 CONFIG GET requirepass
# 리슨 중인 포트 확인
sudo ss -tlnp | grep redis
# 127.0.0.1:6379만 표시되어야 함
# 방화벽 규칙 확인
sudo ufw status | grep 6379
Redis는 캐시, 세션, 큐 등 핵심 역할을 하는 경우가 많습니다. 외부 노출만 차단해도 대부분의 공격을 예방할 수 있으므로, 기본 보안 설정을 반드시 적용하세요.