몇주전 서버에 올려두었던 redis가 해킹 당해서 채굴에 이용되고 있던 것을 알게되었다. 금방 알게 되어 빨리 조치할 수 있었지만 꽤나 오싹했던 경험이었기 때문에 재발을 막고자 환경설정 과정을 공유한다.
~환경~
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install redis-server
redis-cli
set, get를 이용해 저장, 조회가 가능한 간단한 구조다.
set [key] [value] # 저장
get [key] # 조회
get keys * # 전체 키 조회
테스트용으로 값 저장해두고 그냥 나가버리면 날아간다.
그걸 처음에 몰라서 자꾸 데이터가 날아가는 줄 알고 헤맸다..# 변경 사항 저장하고 서버 stop shutdown save # 변경 사항 저장 없이 서버 stop shutdown nosave
여기서 암호를 꼭 설정하자. 안 하면 해킹 당해서 채굴용으로 쓰일지도 모른다..
redis.conf로 먼저 들어간다.
sudo vi /etc/redis/redis.conf
다음을 설정할 것이다.
- redis 비밀번호
- redis 서버에 접속할 수 있는 ip
- redis가 사용할 수 있는 최대 메모리
- 메모리가 가득찬 경우 데이터 교체 우선순위를 결정하는 알고리즘
검색 기능을 사용해서 해당 부분을 찾자.
# requirepass foobared
주석을 해제하고 foobared
를 원하는 비밀번호로 바꿔 적어주면 된다.
검색을 이용해 해당 부분을 찾자.
# bind 127.0.0.1 ::1
주석을 해제하고 bind 뒷부분을 자신이 원하는 ip 주소로 바꿔주면 된다.
다음처럼 여러개의 ip에 대해서 열어줄 수도 있다.
bind 127.0.9.1 ::1
bind 0.0.0.0
검색을 이용해 해당 부분을 찾자.
# maxmemory <bytes>
주석을 해제하고 <bytes>
부분에 maxmemory에 1gb, 500kb와 같이 원하는 최대 메모리 크기를 적어준다.
검색을 이용해 해당 부분을 찾자.
# maxmemory-policy noeviction
noeviction 부분을 자신이 원하는 알고리즘명으로 바꾸면 되는데, 적용가능한 알고리즘은 다음과 같다.
출처 : https://redis.io/docs/reference/eviction/
설정이 끝났다! :wq로 저장하고 나가면 된다.
redis는 인메모리 데이터베이스이다. 따라서 백그라운드에서도 실행중이도록 systemctl 명령어를 사용해줘야 한다.
sudo systemctl start redis-server #실행
sudo systemctl restart redis-server #재실행
redis는 디폴트로 6379번 포트를 사용한다. 자신이 사용하는 인스턴스에 대해서 설정해주도록 하자.
GCP의 경우 VPC 네트워크 > 방화벽에서 설정해주면 된다!
필자는 스프링에서 redis를 사용하고 있기 때문에 application.yml에도 설정을 추가해주었다.
spring:
redis:
port: 6379
host: [서버 고정ip]
password : [비밀번호]
비밀번호가 노출되지 않도록 .gitignore에 잘 추가해두자.