Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Configurar firewall do Linux iptables para MongoDB

Nesta página

  • Visão geral
  • Padrões
  • Alterar política padrão para DROP
  • Gerenciar e manter a configuração do iptables

Em sistemas Linux contemporâneos, o programa iptables fornece métodos para gerenciar os recursos de filtragem de netfilter ou de pacotes de rede do Linux Kernel. Essas regras de firewall possibilitam que os administradores controlem quais hosts podem se conectar ao sistema, e reduzem a exposição ao risco limitando os hosts que podem se conectar a um sistema.

Este documento descreve as configurações básicas de firewall para firewalls do iptables no Linux. Use estas abordagens como ponto de partida para sua organização com rede maior. Para obter uma visão geral e detalhada das práticas de segurança e do gerenciamento de riscos para o MongoDB, acesse Segurança.

As regras nas configurações do iptables são dispostas em cadeias, que descrevem o processo para filtrar e processar fluxos específicos de tráfego. As cadeias têm uma ordem e os pacotes devem passar pelas regras anteriores de uma cadeia para alcançar as regras posteriores. Este documento aborda apenas as duas cadeias a seguir:

INPUT
Controla todo o tráfego recebido.
OUTPUT
Controla todo o tráfego de saída.

Dadas as portas padrão de todos os processos MongoDB, você deve configurar as regras de rede que permitem somente comunicação exigida entre seu aplicativo e as instâncias apropriadas do mongod e mongos.

Esteja ciente que, por padrão, a política padrão do iptables é permitir todas as conexões e tráfego, a menos que explicitamente desabilitado. As alterações de configuração descritas neste documento criarão regras que permitem explicitamente o tráfego de endereços específicos e em portas específicas, usando uma política padrão que descarta todo o tráfego que não é explicitamente permitido. Depois de configurar adequadamente suas regras iptables para permitir apenas o tráfego que deseja permitir, você pode Alterar política padrão para DROP.

Esta seção contém vários padrões e exemplos para configurar o iptables para utilizar com sistemas do MongoDB. Se você tiver configurado portas diferentes usando a definição de configuração port, precisará modificar as regras de acordo.

Esse padrão é aplicável a todas as instâncias mongod em execução como instâncias autônomas ou como parte de um conjunto de réplicas.

O objetivo desse padrão é permitir explicitamente o tráfego para a instânciamongod do servidor de aplicativos. Nos seguintes exemplos, substitua <ip-address> pelo endereço IP do servidor do aplicativo:

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

A primeira regra permite todo o tráfego recebido de <ip-address> na porta 27017, o que permite que o servidor de aplicativos se conecte à instância mongod. A segunda regra permite que o tráfego de saída do mongod chegue ao servidor de aplicativos.

Observação

Opcional

Se você tiver somente um servidor de aplicativo, você poderá substituir o <ip-address> pelo próprio endereço IP, como: 198.51.100.55. Você também pode expressar isto utilizando a notação CIDR como 198.51.100.55/32. Se você quiser permitir um bloco maior de possíveis endereços IP, poderá permitir o tráfego de um /24 usando uma das seguintes especificações para o <ip-address>, conforme segue:

10.10.10.10/24
10.10.10.10/255.255.255.0

As instâncias mongos fornecem roteamento de queries para clusters fragmentados. Os clientes se conectam a instâncias mongos, que se comportam, do ponto de vista do cliente, como instâncias mongod. Por sua vez, o mongos conecta a todas as instâncias do mongod que são componentes do cluster fragmentado.

Utilize o mesmo comando iptables para permitir o tráfego para e a partir destas instâncias como você faria a partir das instâncias do mongod que são membros do conjunto de réplicas. Veja a configuração descrita na seção Tráfego de e para mongod Instâncias como exemplo.

Os servidores de configuração hospedam o banco de dados de configuração que armazena metadados para clusters fragmentados. Servidores de configuração escutam conexões na porta 27019. Como resultado, adicione as seguintes regras do iptables ao servidor de configuração para permitir a conexão de entrada e saída na porta 27019, para conexão com os outros servidores de configuração.

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27019 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27019 -m state --state ESTABLISHED -j ACCEPT

Substitua <ip-address> pelo espaço de endereço ou endereço de todos os mongod que fornecem servidores de configuração.

Adicionalmente, os servidores de configuração precisam permitir conexões de entrada de todas as instâncias do mongos no cluster e todas as instâncias do mongod no cluster. Adicione regras semelhantes às seguintes:

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27019 -m state --state NEW,ESTABLISHED -j ACCEPT

Substitua <ip-address> pelo endereço das instâncias do mongos e as instâncias do shard mongod.

Os servidores shard têm como padrão o número da porta 27018. Você deve configurar as seguintes regras do iptables para permitir o tráfego de e para cada shard:

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27018 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT

Substitua a especificação <ip-address> pelo endereço IP de todos os mongod. Isso permite que você possibilite o tráfego de entrada e saída entre todos os shards, incluindo os membros do conjunto de réplicas, para:

  • todas as mongod instâncias nos conjuntos de réplicas do fragmento.

  • todas as instâncias mongod em outros fragmentos. [1]

Além disso, os fragmentos precisam ser capazes de fazer conexões de saída para:

  • todas as mongod instâncias nos servidores de configuração.

Crie uma regra que se assemelha ao seguinte e substitua o <ip-address> pelo endereço dos servidores de configuração e as instâncias do mongos :

iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT
[1] Todos os fragmentos em um cluster precisam ser capazes de se comunicar com todos os outros fragmentos para facilitar o chunk e equilibrar as operações.

A ferramenta de diagnóstico mongostat , quando executada com o --discover , precisa acessar todos os componentes de um cluster, inclusive os servidores de configuração, os servidores de shards e as instâncias mongos .

Alterado na versão 3.6: MongoDB 3.6 remove a interface HTTP preterida e API REST para MongoDB.

A política padrão para iptables cadeias é permitir todo o tráfego. Depois de concluir todas as alterações de configuração iptables, você deve alterar a política padrão para DROP para que todo o tráfego que não for explicitamente permitido como acima não possa alcançar os componentes do sistema MongoDB. Emitir os seguintes comandos para alterar esta política:

iptables -P INPUT DROP
iptables -P OUTPUT DROP

Esta seção contém uma série de operações básicas para gerenciar e utilizar o iptables. Existem várias ferramentas de frontend que automatizam alguns aspectos da configuração do iptables, mas no núcleo todas as iptables frontend fornecem a mesma funcionalidade básica:

Por padrão, todas as regras do iptables são armazenadas somente na memória. Quando o sistema for reiniciado, suas regras de firewall voltarão aos padrões. Depois de testar um conjunto de regras e garantir que ele controla efetivamente o tráfego, você pode usar as seguintes operações para tornar o conjunto de regras persistente.

No Red Hat Enterprise Linux, Fedora Linux e distribuições relacionadas, você pode emitir o seguinte comando:

service iptables save

Em Debian, Ubuntu e distribuições relacionadas, você pode utilizar o seguinte comando para mover as regras do iptables para o arquivo /etc/iptables.conf:

iptables-save > /etc/iptables.conf

Execute a seguinte operação para restaurar as regras de rede:

iptables-restore < /etc/iptables.conf

Coloque este comando em seu arquivo rc.local ou no arquivo /etc/network/if-up.d/iptables com outras operações semelhantes.

Para listar todas as regras do iptables aplicadas atualmente, utilize a seguinte operação na shell do sistema.

iptables -L

Se você cometer um erro de configuração ao inserir as regras do iptables ou simplesmente precisar reverter para o conjunto de regras padrão, você poderá usar a seguinte operação na shell do sistema para liberar todas as regras:

iptables -F

Se você já tiver tornado suas regras de iptables persistentes, será necessário repetir o procedimento apropriado na seção Tornar todas as regras iptables persistentes .

← Vinculação IP