Como configurar o acesso remoto ao MongoDB no Ubuntu 20.04

Uma versão anterior deste tutorial foi escrita por Melissa Anderson.

Introdução

O MongoDB, também conhecido como Mongo, é um banco de dados de documentos de código aberto usado comumente em aplicações Web modernas. Por padrão, ele só permite conexões que se originam no mesmo servidor onde ele está instalado. Se você quiser gerenciar o MongoDB remotamente ou conectá-lo a um servidor de aplicações separado, há algumas alterações que você precisaria fazer na configuração padrão.

Neste tutorial, você irá configurar uma instalação do MongoDB para permitir o acesso de forma segura a partir de um computador remoto confiável. Para fazer isso, você atualizará suas regras de firewall para fornecer o acesso remoto à porta em que o MongoDB está escutando conexões e então atualizará o arquivo de configuração para alterar a configuração de vinculação de IP. Em seguida, como um passo final, você irá testar se sua máquina remota é capaz de fazer a conexão com seu banco de dados com sucesso.

Pré-requisitos

Para completar este tutorial, será necessário:

  • Um servidor executando o Ubuntu 20.04. Cada servidor deverá ter um non-root user administrativo e um firewall configurado com o UFW. Configure isso seguindo o nosso guia de configuração inicial de servidor para o Ubuntu 20.04.
  • O MongoDB instalado no servidor. Este tutorial assume que você tenha o MongoDB 4.4 ou mais recente instalado. Instale essa versão seguindo nosso tutorial How To Install MongoDB on Ubuntu 20.04.
  • Um segundo computador a partir do qual você acessará sua instância do MongoDB. Para simplificar, este tutorial presume que esta máquina é outro servidor Ubuntu 20.04, com um usuário administrativo não root e um firewall UFW configurado seguindo nosso guia de configuração inicial de servidor para o Ubuntu 20.04. No entanto, os Passos 1 e 2, que descrevem o procedimento real para habilitar conectividade remota ao servidor de banco de dados, funcionarão independentemente do sistema operacional que a máquina remota estiver executando.

Por fim, embora isso não seja necessário para completar este tutorial, recomendamos fortemente que você proteja sua instalação do MongoDB criando uma conta de usuário administrativa para o banco de dados e habilitando a autenticação. Para fazer isso, siga nosso tutorial How To Secure MongoDB on Ubuntu 20.04.

Passo 2 — Ajustando o Firewall

Supondo que você tenha seguido os pré-requisitos do tutorial de configuração inicial do servidor e habilitado um firewall UFW em seu servidor, sua instalação do MongoDB estará inacessível a partir da internet. Se pretende usar o servidor MongoDB apenas localmente com aplicativos funcionando no mesmo servidor, esta é a configuração recomendada e segura. No entanto, se você quer se conectar ao seu servidor MongoDB a partir de um local remoto, você tem que permitir conexões de entrada na porta em que o banco de dados está escutando, adicionando uma nova regra no UFW.

Comece verificando qual porta a instalação do seu MongoDB está escutando com o comando lsof. Este comando normalmente retorna uma lista com todos os arquivos abertos em um sistema, mas quando combinado com a opção -i, ele lista apenas arquivos ou fluxos de dados relacionados à rede.

O comando a seguir irá redirecionar a saída produzida pelo lsof -i para um comando grep que procura por uma string chamada mongo:

  • sudo lsof -i | grep mongo

Esta saída de exemplo mostra que o MongoDB está escutando conexões em sua porta padrão, 27017:

Outputmongod    82221         mongodb   11u  IPv4 913411      0t0  TCP localhost:27017 (LISTEN) 

Na maioria dos casos, o MongoDB deve ser acessado apenas por certos locais confiáveis, como outro servidor que hospeda uma aplicação. Uma maneira de configurar isso é executar o comando a seguir no servidor MongoDB, que abre o acesso na porta padrão do MongoDB enquanto permite explicitamente apenas o endereço IP do outro servidor confiável.

Execute o comando a seguir, certificando-se de alterar o trusted_server_ip para o endereço IP da máquina remota confiável que você usará para acessar sua instância do MongoDB:

Nota: se a saída do comando anterior mostrou que sua instalação do MongoDB está escutando em uma porta fora do padrão, use esse número de porta no lugar de 27017 neste comando.

  • sudo ufw allow from trusted_server_ip to any port 27017

No futuro, se você quiser acessar o MongoDB a partir de outra máquina, execute esse comando novamente com o endereço IP da nova máquina no lugar de trusted_server_ip.

Verifique a mudança nas configurações do firewall com o ufw:

  • sudo ufw status

A saída mostrará que o tráfego para a porta 27017 a partir do servidor remoto está agora permitido:

OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere 27017                      ALLOW       trusted_server_ip OpenSSH (v6)               ALLOW       Anywhere (v6) 

Você pode encontrar configurações de firewall mais avançadas para restringir o acesso a serviços em Conceitos básicos do UFW: regras e comandos comuns do firewall.

Em seguida, você vinculará o MongoDB ao endereço IP público do servidor para que você possa acessá-lo a partir da máquina remota.

Passo 2 — Configurando um bindIP público

Neste ponto, mesmo que a porta esteja aberta, o MongoDB está atualmente vinculado a 127.0.0.1, a interface de rede de loopback local. Isso significa que o MongoDB só é capaz de aceitar conexões que se originam no servidor onde ele está instalado.

Para permitir conexões remotas, você deve editar o arquivo de configuração do MongoDB — /etc/mongod.conf — para vincular o MongoDB adicionalmente ao endereço IP roteável publicamente do seu servidor. Desta forma, sua instalação do MongoDB será capaz de ouvir conexões feitas para seu servidor MongoDB a partir de máquinas remotas.

Abra o arquivo de configuração do MongoDB em seu editor de texto preferido. O exemplo a seguir usa o nano:

  • sudo nano /etc/mongod.conf

Encontre a seção network interfaces, e então o valor bindIp:

/etc/mongod.conf

. . . # network interfaces net:   port: 27017   bindIp: 127.0.0.1  . . . 

Acrescente uma vírgula a esta linha seguida pelo endereço IP público do seu servidor MongoDB:

/etc/mongod.conf

. . . # network interfaces net:   port: 27017   bindIp: 127.0.0.1,mongodb_server_ip  . . . 

Salve e feche o arquivo. Se você usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

Em seguida, reinicie o MongoDB para colocar essa alteração em vigor:

  • sudo systemctl restart mongod

Depois disso, sua instalação do MongoDB aceitará conexões remotas a partir de quaisquer máquinas que você tenha permitido acessar a porta 27017. Como um passo final, verifique se o servidor remoto confiável que você permitiu através do firewall Passo 1 pode chegar à instância do MongoDB em execução em seu servidor.

Passo 3 — Testando a conectividade remota

Agora que você configurou a instalação do MongoDB para ouvir conexões que se originam em seu endereço IP roteável publicamente e concedeu o acesso à máquina remota através do firewall do seu servidor à porta padrão do Mongo, verifique se a máquina remota é capaz de se conectar.

Nota: conforme mencionado na seção de pré-requisitos, este tutorial assume que a máquina remota é outro servidor executando o Ubuntu 20.04. O procedimento para habilitar conexões remotas descrito nos Passos 1 e 2 deve funcionar independentemente do sistema operacional que a máquina remota executa, mas os métodos de teste descritos neste passo não funcionam universalmente entre os sistemas operacionais.

Uma maneira de testar se o servidor remoto confiável é capaz de se conectar à instância do MongoDB é usar o comando nc.nc, abreviatura para netcat, é um utilitário usado para estabelecer conexões de rede com TCP ou UDP. Ele é útil para testar casos como esse, pois ele permite especificar tanto um endereço IP quanto um número de porta.

Primeiro, faça login no servidor confiável usando o SSH:

Depois, execute o comando nc a seguir, que inclui a opção -z. Isso limita o nc a varrer apenas um daemon escutando no servidor de destino, sem enviar nenhum dado. Lembre-se do tutorial de pré-requisitos de instalação que o MongoDB está sendo executado como um daemon de serviço, tornando esta opção útil para testar a conectividade. Ele também inclui a opção v que aumenta a verbosidade do comando, fazendo com que o netcat retorne alguma saída que de outra forma não aconteceria.

Execute o comando nc a seguir a partir do servidor remoto confiável, certificando-se de substituir mongodb_server_ip pelo endereço IP do servidor em que você instalou o MongoDB:

  • nc -zv mongodb_server_ip 27017

Se o servidor confiável puder acessar o daemon do MongoDB, sua saída indicará que a conexão foi bem sucedida:

OutputConnection to mongodb_server_ip 27017 port [tcp/*] succeeded! 

Supondo que você tenha uma versão compatível do shell mongo instalada no servidor remoto, você pode neste ponto se conectar diretamente à instância do MongoDB instalada no servidor host.

Uma maneira de se conectar é com uma string de conexão URI, como esta:

  • mongo "mongodb://mongo_server_ip:27017"

Nota: se você seguiu o tutorial recomendado How To Secure MongoDB on Ubuntu 20.04, você terá fechado o acesso ao banco de dados a usuários não autenticados. Neste caso, você precisará usar uma URI que especifique um nome de usuário válido, como esta:

O shell lhe pedirá automaticamente para inserir a senha do usuário.

Com isso, você confirmou que o servidor MongoDB pode aceitar conexões do servidor confiável.

Conclusão

Agora é possível acessar a instalação do MongoDB a partir de um servidor remoto. Neste ponto, você pode gerenciar seu banco de dados Mongo remotamente a partir do servidor confiável. Alternativamente, você poderia configurar uma aplicação para ser executada no servidor confiável e usar o banco de dados remotamente.

Se você não configurou um usuário administrativo e habilitou a autenticação, qualquer um que tenha acesso ao servidor remoto também pode acessar a instalação do MongoDB. Se você ainda não fez isso, recomendamos fortemente que você siga nosso guia How To Secure MongoDB on Ubuntu 20.04 para adicionar um usuário administrativo e bloquear ainda mais as coisas.