티스토리 뷰
서버가 이상하다?!
최근에 만든 토이 프로젝트를 외부에서 접속해 보고 싶어서 스마트폰에서 접속을 시도했다.
화면을 제대로 나왔지만 서버에서 데이터를 제대로 가져오지 못 하는 것 같았다.
이 때까지만 해도 오라클 프리티어 인스턴스에 젠킨스 + 서버 + DB가 동시에 실행 중인 상태라 리소스 부족으로 DB가 비정상 종료 됐다고 생각했다.
해킹을 당했구나!!
예상대로 DB는 inactive 상태였다. DB를 다시 켰지만 데이터가 제대로 나오지 않았다.
DB에 직접 접속해서 DB를 열어 보았다. 내가 만든 DB는 없어지고 RESTORE_DATA_...의 DB가 생성되어 있었다.
내용을 조회해 보니 대략 "데이터를 복구하고 싶으면 0.08 BTC를 달라"는 내용의 글이 들어 있었다.
구축한지 며칠도 되지 않아서 이렇게 빨리 해커가 침입할 수 있다는 사실에 놀라웠다.
경험은 가장 훌륭한 스승이다.
해킹은 남 이야기 같았는데 이번 경험을 통해 함부로 포트를 개방해선 안 된다는 것을 경험을 통해 배웠다.
이 일을 당하고 나서 다시 생각났지만 난 이미 우아한 테크 캠프 Pro에서 어떻게 망을 구성해야 할지 배웠었다.
private 인스턴스에 DB를 구축하고 DB의 포트만 개방한 상태로 bastion 인스턴스를 통해서만 DB에 직접 접근할 수 있게 만들었어야 했다.
하지만 이 토이 프로젝트에서 저렇게 넉넉한 인프라는 불가능하고 현재 상황에서 시도한 내용을 기록한다.
개방을 최소화 하자
MySQL 설정은 나의 맥북에서 원격으로 DB에 접근하고 싶었기 때문에 어쩔 수 없이 모든 IP(0.0.0.0)로 허용했다.
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
하지만, 클라우드의 수신(인바운드) 그룹에서 localhost와 내 맥북 IP에서만 접속할 수 있게 설정했다.
참고로 맥북에서 맥북의 퍼블릭 IP를 조회하는 방법은 아래 명령어이고 수신 그룹에 XXX.XX.X.X/32 형식으로 등록할 수 있다.
curl ifconfig.me
마무리
토이 프로젝트고 데이터는 중요한 것이 아니어서 상관없었지만 조금만 방심해도 해킹을 당할 수 있다는 것을 알았다.
실무에서 직접 망을 구성하는 업무를 한 적이 없었고 강의를 통해 방법은 알았지만 경각심을 가지지 않았다.
이번 경험을 통해 보안에 대한 중요성을 느꼈다.
'Database' 카테고리의 다른 글
우아한테크캠프 Pro 5기 - Redis에 저장 중 LocalDateTime 데이터타입에서 SerializationException 발생 (5) | 2023.01.31 |
---|---|
역정규화(denormalization) (0) | 2022.06.27 |
정규화(normalization) (0) | 2022.06.25 |
리눅스에서 MariaDB 설치 및 기본 설정 (0) | 2021.03.31 |
윈도우에서 mariaDB 서버 on/off (0) | 2020.12.28 |