Configurar iptables
firewall Linux para sistemas autogerenciados
Nesta página
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 essas abordagens como ponto de partida para sua organização de rede maior. Para obter uma visão geral e detalhada das práticas de segurança e do gerenciamento de riscos para o MongoDB, consulte Segurança em implementações autogerenciadas.
Visão geral
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
.
Padrões
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.
Tráfego de e para mongod
Instâncias
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
Tráfego de e para mongos
Instâncias
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 nós do conjunto de réplicas. Tome como exemplo a configuração descrita na seção Tráfego de e para instâncias do mongod
.
Tráfego de e para um servidor de configuração MongoDB
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
.
Tráfego de e para um servidor de shard da MongoDB
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.
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. |
Fornece acesso para sistemas de monitoramento
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 fragmentos e as instâncias mongos
.
Alterar política padrão para DROP
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
Gerenciar e manter iptables
a configuração do
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:
Tornar todas iptables
as Regras Persistentes
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.
Listar todas as iptables
Regras
Para listar todas as regras do iptables
aplicadas atualmente, utilize a seguinte operação na shell do sistema.
iptables -L
Limpar todas as iptables
regras
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.