관리 메뉴

피터의 개발이야기

Docker를 사용하여 MongoDB 설치 및 iptime 외부접속 포트 설정 본문

DevOps

Docker를 사용하여 MongoDB 설치 및 iptime 외부접속 포트 설정

기록하는 백앤드개발자 2024. 1. 9. 17:53
반응형

ㅁ 들어가며

 MongoDB를 활용할 기회가 있어서 사용법을 공부하기 위해 Docker로 mongoDB를 생성하였다. 잠시 테스트용이라 빠르게 실행하는 방법으로 정리하였다.

 

update 24.1.10
ㄴ 빠르게 실행하면서 보안 설정을 1도 하지 않았는데... 하루도 안되어서 해킹당하네요. 마지막에 해킹당한 정황을 정리하였습니다.

 

ㅁ MongoDB Docker 이미지 다운로드

$ docker pull mongo
Using default tag: latest
latest: Pulling from library/mongo
005e2837585d: Pull complete
e60b3ed21100: Pull complete
81fcf60fea85: Pull complete
05da3aee34af: Pull complete
c0f2bf503f32: Pull complete
e7e4d672dd05: Pull complete
f1bc5c150557: Pull complete
3c174931be51: Pull complete
500987cab84a: Pull complete
Digest: sha256:d14158139a0bbc1741136d3eded7bef018a5980760a57f0014a1d4ac7677e4b1
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest

 

ㅁ MongoDB Docker 컨테이너 생성 및 실행

$ docker run --name mongodb-container -v ~/data:/data/db -d -p 27017:27017 mongo
b32b2da6d8d4f9af21ba427c4af7f3d3fdc9ef1ef592e41cd0dd4f029338175d

 

 

ㅁ MonoDB 생성 확인

$ docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS          PORTS                      NAMES
b32b2da6d8d4   mongo                          "docker-entrypoint.s…"   13 seconds ago   Up 12 seconds   0.0.0.0:27017->27017/tcp   mongodb-container
bd08535c1dda   productiveops/dokemon:latest   "/dokemon"               13 days ago      Up 13 days      0.0.0.0:9090->9090/tcp     dokemon
826d098fe478   nginx:latest                   "/docker-entrypoint.…"   4 weeks ago      Up 3 weeks      0.0.0.0:80->80/tcp         webserver

 

 

ㅁ IPTIME 포트포워드 설정

 ㅇ mongoDB의 외부 접속을 위해 IN-BOUND 포트 포워드를 설정하였다.

 

 

ㅁ Robo 3T - mongoDB Client로 접속 테스트

 ㅇ 사용한 Robo 3T 버젼정보

 

 ㅇ 테스트용으로 빠르게 실행기 때문에 다른 보안 사항은 패스

 ㅇ iptime에서 무료로 제공하는 서브도메인을 받아서 XXXX.iptime.org로 Address를 설정하고 접속한다.

 

 ㅇ 테스트로 goEun이라는 콜랙션을 만들어 test: test 데이터를 생성하였다.

 

 

ㅁ 해킹 상황

{
    "_id" : ObjectId("659d696aac68fdcf9b567b2d"),
    "content" : "All your data is backed up. You must pay 0.01 BTC to 164hyKPAoC5ecqkJ2ygeGoGFRcauWRLujV In 48 hours, your data will be publicly disclosed and deleted. (more information: go to http://iplis.ru/data1)After paying send mail to us: rambler+1oyt3c@onionmail.org and we will provide a link for you to download your data. Your DBCODE is: 1OYT3C"
}

 

 

ㅁ 조치방법

IPTIME 포트포워드 설정에서 설정한 inbound port를 다른 port로 변경하였다. 이렇게 하면 기본 포트로 mongoDB에 접속하려는 기본 프로토콜은 방어할 수 있게 된다. 최소한으로 inbound port는 변경하는 것이 좋을 것 같다.

 

 

ㅇ 컨테이너 데이터 삭제

ㄴ 컨테이너의 기동 시 로컬의 ~/data를 컨테이너의 /data/db에 마운트 해놓은 상태이다.

ㄴ 필요없는 데이터라 ~/data의 데이터를 초기화 하였다.

 

 

ㅇ 컨테이너 삭제 및 재설치

## 컨테이너 정지
$ docker stop mongodb-container
mongodb-container

## 컨테이너 삭제
$ docker rm mongodb-container
mongodb-container

## 컨테이너 재설치
$ docker run --name mongodb-container -v ~/data:/data/db -d -p 27017:27017 mongo
c30a2bfc022e314cac20b51be598fa0e02b600c573cd3b5cc4d6b996e4413702

## 컨테이너 확인
$ docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS          PORTS                      NAMES
c30a2bfc022e   mongo                          "docker-entrypoint.s…"   34 seconds ago   Up 34 seconds   0.0.0.0:27017->27017/tcp   mongodb-container

 ㄴ 삭제 후 설치한 그대로 다시 세팅하였다.

 ㄴ 걸리는 시간은 2분 정도였다.

 

ㅁ 함께 보면 좋은 사이트

몽고디비-쿼리-정리

 mongo docker hub

 

반응형
Comments