Ubuntu 20.04에서 MongoDB에 대한 원격 액세스 구성 방법

Ubuntu 20.04에서 MongoDB에 대한 원격 액세스 구성 방법

2022-06-01 last update

10 minutes reading Ubuntu 20.04 Security Databases Ubuntu Firewall MongoDB
이 강좌의 초기 버전은 Melissa Anderson으로 작성되었다.

소개


MongoDB은 문서를 위한 데이터베이스로 많은 현대 웹 응용 프로그램에 사용된다.기본적으로 설치되어 있는 동일한 서버에서만 연결할 수 있습니다.MongoDB를 원격으로 관리하거나 별도의 응용 프로그램 서버에 연결하려면 기본 설정을 변경해야 합니다.
이 강좌에서는 신뢰할 수 있는 원격 컴퓨터에서 안전하게 액세스할 수 있도록 MongoDB 설치를 구성합니다.이를 위해서는 원격 컴퓨터가 MongoDB가 연결 중인 포트에 액세스하고 IP 바인딩 설정을 변경하기 위해 구성 파일을 업데이트할 수 있도록 방화벽 규칙을 업데이트해야 합니다.그리고 마지막 단계로 원격 컴퓨터가 데이터베이스에 성공적으로 연결될 수 있는지 테스트합니다.

선결 조건


이 강좌를 완성하려면 다음이 필요합니다.
  • 에서 Ubuntu 20.04를 실행하는 서버입니다.이 서버에는 루트가 아닌 사용자 관리 및 UFW가 구성된 방화벽이 있어야 합니다.우리의 initial server setup guide for Ubuntu 20.04에 따라 설정합니다.
  • 서버에
  • MongoDB가 설치되어 있습니다.이 강좌는 MongoDB 4.4를 설치하거나 버전을 업데이트했다고 가정합니다.이 버전은 How To Install MongoDB on Ubuntu 20.04의 튜토리얼에 따라 설치할 수 있습니다.
  • 두 번째 컴퓨터로 MongoDB 인스턴스에 액세스할 수 있습니다.간단하게 말하자면, 이 강좌는 이 기계가 다른 Ubuntu 20.04 서버이며, 비root 관리 사용자와 initial server setup guide for Ubuntu 20.04에 따라 설정된 UFW 방화벽이 있다고 가정한다.그러나 1단계와 2단계는 데이터베이스 서버에서 원격 연결을 사용하는 실제 과정을 묘사하고 원격 컴퓨터가 어떤 운영체제를 실행하든지 모두 작용할 것이다.
  • 마지막으로 이 강좌를 완성할 필요는 없지만 데이터베이스에 사용자 계정을 관리하고 인증을 활성화함으로써 MongoDB 설치를 보호하는 것을 강력히 권장합니다.이를 위해, 우리의 강좌 How To Secure MongoDB on Ubuntu 20.04에 따라 조작해 주십시오.

    1단계 - 방화벽 조정


    필수 초기 서버 설치 강좌와 enabled a UFW firewall on your server을 따랐다면 MongoDB 설치는 인터넷에서 접근할 수 없습니다.MongoDB를 같은 서버에서 실행되는 응용 프로그램과 함께 로컬에서만 사용하려는 경우 권장되는 보안 설정입니다.그러나 원격 위치에서 MongoDB 서버에 연결하려면 새 UFW 규칙을 추가하여 데이터베이스에서 탐지 중인 포트에 대한 전송 연결을 허용해야 합니다.
    우선 lsof 명령을 사용하여 MongoDB가 수신 중인 포트를 설치하는지 확인합니다.이 명령은 일반적으로 시스템에서 열린 모든 파일의 목록을 포함하지만, -i 옵션과 결합하여 사용할 때, 네트워크와 관련된 파일이나 데이터 흐름만 표시합니다.
    다음 명령은 lsof -i에서 생성된 출력을 grep 명령으로 다시 지정합니다. 이 명령은 mongo이라는 문자열을 검색합니다.
    1. sudo lsof -i | grep mongo
    이 예제 출력은 MongoDB가 기본 포트 27017에서 스캔 연결을 하고 있음을 보여 줍니다.
    Output
    mongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)
    대부분의 경우 응용 프로그램을 호스팅하는 다른 서버나 원격 MongoDB 인스턴스를 관리하는 로컬 컴퓨터와 같은 신뢰할 수 있는 위치에서만 MongoDB를 액세스할 수 있습니다.이를 구성하는 방법 중 하나는 MongoDB 서버에서 다음 명령을 실행하는 것입니다. 이것은 MongoDB 기본 포트에 대한 접근을 열고 다른 신뢰할 수 있는 기기의 IP 주소만 명확하게 허용합니다.
    다음 명령을 실행하여 trusted_machine_ip을 MongoDB 인스턴스에 액세스하는 신뢰할 수 있는 원격 컴퓨터의 IP 주소로 변경합니다.
    참고 신뢰할 수 있는 시스템의 IP 주소를 확인하지 않으면 다음 curl 명령을 실행할 수 있습니다.이 웹 사이트 icanhazip.com을 방문하면 명령을 실행하는 컴퓨터의 IP 주소를 반환합니다.
    curl -4 icanhazip.com
    
    또한 이전 명령의 출력에 MongoDB 설치가 비기본 포트를 탐색하는 것으로 표시되면 이 명령에서 27017 대신 포트 번호를 사용합니다.
    1. sudo ufw allow from trusted_machine_ip to any port 27017
    나중에 다른 시스템에서 MongoDB에 액세스하려면 새 시스템의 IP 주소(trusted_machine_ip)를 사용하여 이 명령을 다시 실행하십시오.ufw을 사용하여 방화벽 설정의 변경 사항을 확인할 수 있습니다.
    1. sudo ufw status
    출력은 현재 원격 서버에서 포트 27017까지의 통신을 표시합니다.
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 27017 ALLOW trusted_machine_ip OpenSSH (v6) ALLOW Anywhere (v6)
    UFW Essentials: Common Firewall Rules and Commands에서 더 많은 접근 제한 서비스의 고급 방화벽 설정을 찾을 수 있습니다.
    그런 다음 원격 시스템에서 액세스할 수 있도록 MongoDB를 서버의 공용 IP 주소로 바인딩합니다.

    2단계 - 공용 bindIP 구성


    포트가 열려 있어도 MongoDB는 현재 로컬 루프백 네트워크 인터페이스 127.0.0.1에 바인딩되어 있습니다.이것은 MongoDB가 설치된 서버에서만 연결할 수 있다는 것을 의미합니다.
    원격 연결을 허용하려면 MongoDB 구성 파일 /etc/mongod.conf을 편집하여 신뢰할 수 있는 원격 컴퓨터가 액세스할 수 있는 IP 주소에 MongoDB를 추가로 연결해야 합니다.이렇게 하면 MongoDB 설치는 원격 기기에서 MongoDB 서버로의 연결을 탐지할 수 있습니다.
    기본 텍스트 편집기에서 MongoDB 구성 파일을 엽니다.다음 예제에서는 nano을 사용합니다.
    1. sudo nano /etc/mongod.conf
    network interfaces 바이트를 찾은 다음 bindIp 값을 찾습니다.
    /etc/mongod.형태
    . . .
    # network interfaces
    net:
      port: 27017
      bindIp: 127.0.0.1
    
    . . .
    
    행 뒤에 쉼표를 추가하고 MongoDB 서버의 공용 IP 주소를 따릅니다.
    /etc/mongod.형태
    . . .
    # network interfaces
    net:
      port: 27017
      bindIp: 127.0.0.1,mongodb_server_ip
    
    . . .
    
    이것은 신뢰할 수 있는 원격 컴퓨터의 IP 주소가 아니라 MongoDB가 설치된 서버의 IP 주소입니다.
    파일을 저장하고 닫습니다.nano을 사용한다면 CTRL + X, Y을 누르고 ENTER을 누르십시오.
    그런 다음 MongoDB를 다시 시작하여 변경 사항을 적용합니다.
    1. sudo systemctl restart mongod
    이후 MongoDB 설치는 포트 27017에 액세스할 수 있는 모든 기기의 원격 연결을 허용합니다.마지막 단계에서는 1단계에서 방화벽을 통과하는 신뢰할 수 있는 컴퓨터가 서버에서 실행되는 MongoDB 실례에 접근할 수 있는지 테스트할 수 있습니다.

    3단계 - 원격 접속 테스트


    이제 MongoDB 설치를 공유 가능한 라우팅 IP 주소에서 유래한 연결을 탐지하도록 구성하고 원격 컴퓨터가 서버 방화벽을 통해 Mongo 기본 포트에 액세스할 수 있는 권한을 부여하여 원격 컴퓨터가 연결할 수 있는지 테스트할 수 있습니다.
    참고: 필수 섹션에서 설명하는 바와 같이 이 강좌는 원격 컴퓨터가 Ubuntu 20.04를 실행하는 다른 서버라고 가정합니다.원격 컴퓨터가 어떤 운영체제를 실행하든지 간에 1단계와 2단계에서 개술한 원격 연결 활성화 과정은 모두 유효해야 하지만, 이 단계에서 기술한 테스트 방법은 모든 운영체제에서 통용되지 않는다.
    신뢰할 수 있는 컴퓨터가 MongoDB에 연결될 수 있는지 테스트하는 방법 중 하나는 nc 명령을 사용하는 것이다.nc은 넷캣의 줄임말로 TCP 또는 UDP 네트워크 연결을 위한 유틸리티입니다.이 테스트는 IP 주소와 포트 번호를 지정할 수 있기 때문에 이 테스트에 매우 유용합니다.
    먼저 SSH를 사용하여 신뢰할 수 있는 서버에 로그인합니다.
    1. ssh sammy@trusted_machine_ip
    nc 옵션을 포함하여 다음 -z 명령을 실행합니다.이것은 nc을 대상 서버의 탐지 수호 프로그램만 스캔하고 데이터를 보내지 않는 것으로 제한합니다.prerequisite installation tutorial을 돌이켜보면 MongoDB는 서비스 수호 프로그램으로 실행되었기 때문에 이 옵션은 연결성을 테스트하는 데 매우 유용하다.이것은 또한 v 옵션을 포함하는데, 이 옵션은 명령의 상세성을 증가시켜서, 넷캣이 원래 돌아오지 않았던 출력을 되돌려줍니다.
    신뢰할 수 있는 원격 서버에서 다음 nc 명령을 실행하여 mongodb_server_ip을 MongoDB가 설치된 서버의 IP 주소로 교체해야 합니다.
    1. nc -zv mongodb_server_ip 27017
    신뢰할 수 있는 서버가 MongoDB 데몬에 액세스할 수 있는 경우 내보내기가 성공적으로 연결되었음을 나타냅니다.
    Output
    Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!
    원격 서버에 호환 버전의 mongo 셸이 설치되어 있다고 가정하면 호스트 서버에 설치된 MongoDB 인스턴스에 직접 연결할 수 있습니다.
    다음과 같이 connection string URI을 사용하는 접속 방식입니다.
    1. mongo "mongodb://mongo_server_ip:27017"
    주의: 추천된 How To Secure MongoDB on Ubuntu 20.04 강좌를 따르면 인증되지 않은 사용자가 데이터베이스에 접근하는 것을 닫습니다.이 경우 다음과 같이 유효한 사용자 이름을 지정하는 URI를 사용해야 합니다.
    1. mongo "mongodb://username@mongo_server_ip:27017"
    셸에서 사용자 암호를 입력하라는 메시지가 자동으로 표시됩니다.
    이로써 MongoDB 서버가 신뢰할 수 있는 서버에서 연결할 수 있음을 확인했습니다.

    결론


    이제 원격 서버에서 MongoDB 설치에 액세스할 수 있습니다.신뢰할 수 있는 서버에서 MongoDB 데이터베이스를 원격으로 관리할 수 있습니다.또는 신뢰할 수 있는 서버에서 실행되고 데이터베이스를 원격으로 사용할 수 있도록 프로그램을 설정할 수 있습니다.
    관리 사용자를 구성하고 인증을 설정하지 않은 경우 원격 서버에 액세스할 수 있는 모든 사용자가 MongoDB 설치에 액세스할 수 있습니다.만약 당신이 아직 이렇게 하지 않았다면, 우리는 당신이 우리의 지침에 따라 How To Secure MongoDB on Ubuntu 20.04에 관리 사용자를 추가하고 더욱 잠그는 것을 강력히 건의합니다.