Manager, Developer Education
Uma versão anterior deste tutorial foi escrita por Melissa Anderson.
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.
Para completar este tutorial, será necessário:
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.
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.
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
:
. . .
# 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:
. . .
# 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.
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:
- ssh sammy@trusted_server_ip
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:
- mongo "mongodb://username@mongo_server_ip:27017"
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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!