2014-01-29 2 views
4

TCP 포트를 비활성화하는 방법은 무엇입니까?MongoDB TCP 포트를 비활성화하는 방법은 무엇입니까?

유닉스 소켓 만 구성하십시오.

로컬 사용자를 격리합니다.

+1

:

여기에 코드를 참조하십시오. 다른 액세스를 차단하려면 방화벽을 사용하십시오. – WiredPrairie

+3

유닉스 소켓에서도 작동합니다. – user3188101

+0

Stackoverflow는 개발자를위한 교환 사이트입니다. 그러나 이것은 구성 및 관리에 대한 질문입니다. 이러한 질문은 http://dba.stackexchange.com에서 훨씬 잘 맞습니다. – Philipp

답변

1

여기에 신경을 써야한다는 것을 이해할 수 있습니다. MongoDB는 클러스터 된 시스템에서 상호 작용하도록 설계되어 있으므로 TCP 네트워킹이 해당 디자인의 일부입니다. 즉, 로컬 액세스에 사용할 수있는 유닉스 도메인 소켓 연결이 기본적으로 있습니다.

'--bind_ip'구성 옵션을 사용하여 루프백 ('127.0.0.1') 또는 사용하려는 인터페이스에만 바인딩 할 수 있습니다. 기본적으로 mongod는 사용 가능한 모든 인터페이스에 바인딩됩니다. 시작 옵션의 전체 목록을 보려면 manual page을보고 필요한 항목을 결정하십시오.

다른 보안을 위해 방화벽 규칙을 참조 할 수 있습니다.

1

이것은 적어도 5 년 된 버그입니다. 내가 발견 한 유일한 문제는 WONTFIX 및 RTFM으로 끝났지 만이 문제는 2.4와 관련하여 여기에서 다소 문제와 관련이 있습니다 : https://jira.mongodb.org/browse/SERVER-9383.

IPV4 IP 주소가 127.0.0.1 또는 0.0.0.0이 아니면 MongoDB는 유닉스 도메인 소켓 생성을 거부합니다. 하나의 인터페이스에서 실행하거나 비활성화 할 수 있습니다 (이유없는 이유로). 나에게 이것은 MongoDB 코드의 품질을 반영한 것이다.

나는 2011 년까지 코드를 추적했으며 실수로 2 개의 mongodb 프로세스가 동일한 소켓 파일을 만들지 못하도록 막아주는 해킹이라고 믿습니다. 192.168.1.1:27017 및 192.168.1.2:27017에서 하나의 인스턴스를 실행 한 경우 /tmp/mongod-27017.sock에서 동일한 소켓 파일을 만들려고합니다. 10gen에 아무도 그 수표가 왜 있는지에 대한 단서가 없기 때문에 아무도 2011 년 이후에 그것을 고쳤습니다. EADDRINUSE 때문에 127.0.0.1:27017이 이미 사용 중인지 확인하는 것은 쉽지만 그 것을 확인하는 것은 어렵습니다. 소켓 파일이 오래되었거나 다른 프로세스가 소켓 파일을 만든 경우. 왜 그들이 소켓 파일의 이름을 다르게 지정하지 않았는지 나는 잘 모르겠습니다. 그것은 단지 TCP를 통해 작동 https://github.com/mongodb/mongo/blob/r2.2.4/src/mongo/util/net/listen.cpp#L91

if (useUnixSockets && (sa.getAddr() == "127.0.0.1" || sa.getAddr() == "0.0.0.0")) // only IPv4 
       out.push_back(SockAddr(makeUnixSockPath(port).c_str(), port)); 
관련 문제