文档菜单
文档首页
/
MongoDB 手册
/ / /

配置Linuxiptables防火墙,用于自管理部署

本页内容

  • 概述
  • 模式
  • 将默认策略改为DROP
  • 管理和维护iptables配置

在当代Linux系统上,iptables程序提供了管理Linux内核的netfilter或网络数据包过滤功能的方法。这些防火墙规则允许管理员控制哪些主机可以连接到系统,并通过限制可以连接到系统的主机来降低风险暴露。

本文档概述了Linux上iptables防火墙的基本防火墙配置。将这些方法作为您更大规模网络组织的一个起点。有关MongoDB的安全实践和风险管理详情,请参阅安全.

iptables配置中的规则分为链,描述了过滤和处理特定流量流的过程。链有一个顺序,数据包必须通过链中较早的规则才能到达较晚的规则。本文档仅涉及以下两个链

INPUT
控制所有传入流量。
OUTPUT
控制所有传出流量。

考虑到所有MongoDB进程的默认端口,您必须配置网络规则,以允许您的应用程序与适当的mongodmongos实例之间仅进行必要的通信。

请注意,默认情况下,iptables的默认策略是允许所有连接和流量,除非明确禁用。本文档中概述的配置更改将创建规则,明确允许来自特定地址和特定端口的流量,并使用默认策略拒绝所有未明确允许的流量。当您正确配置了iptables规则,只允许您希望允许的流量时,您可以将默认策略改为DROP

本节包含了一些配置iptables以与MongoDB部署一起使用的模式和示例。如果您使用port配置设置配置了不同的端口,则需要相应地修改规则。

此模式适用于所有作为独立实例或作为副本集一部分运行的mongod实例。

此模式的目的是显式允许流量从应用服务器到mongod实例。在以下示例中,将<ip-address>替换为应用服务器的IP地址

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

第一条规则允许来自<ip-address>的端口27017的所有传入流量,这允许应用服务器连接到mongod实例。第二条规则允许从mongod到应用服务器的流出流量。

注意

可选

如果您只有一个应用服务器,您可以将<ip-address>替换为其IP地址本身,例如:198.51.100.55。您也可以使用CIDR表示法表示为198.51.100.55/32。如果您想允许更大的IP地址块,您可以使用以下任一规范允许<ip-address>/24,如下所示

10.10.10.10/24
10.10.10.10/255.255.255.0

mongos 实例为 分片集群 提供查询路由。客户端连接到 mongos 实例,从客户端的角度来看,它们的行为类似于 mongod 实例。反过来,mongos 将连接到构成分片集群的所有 mongod 实例。

使用与副本集成员的 mongod 实例相同的 iptables 命令,允许这些实例的流量进入和流出。以 到和从 mongod 实例的流量 部分为例。

配置服务器托管存储分片集群元数据的 配置数据库。配置服务器监听端口 27019 上的连接。因此,向配置服务器添加以下 iptables 规则,以允许在端口 27019 上进行传入和传出连接,以便连接到其他配置服务器。

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

<ip-address> 替换为提供配置服务器的所有 mongod 的地址或地址空间。

此外,配置服务器需要允许来自集群中所有 mongos 实例和集群中所有 mongod 实例的入站连接。添加类似以下规则的规则:

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

<ip-address> 替换为 mongos 实例和分片 mongod 实例的地址。

分片服务器 默认端口为 27018。您必须配置以下 iptables 规则,以允许每个分片流量:

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

<ip-address> 规范替换为所有 mongod 的 IP 地址。这允许您允许所有分片之间(包括副本集成员)的入站和出站流量到

  • 分片副本集中的所有 mongod 实例。

  • 其他分片中的所有 mongod 实例。[1]

此外,分片需要能够向

  • 配置服务器中的所有 mongod 实例发起出站连接。

创建一个类似以下规则的规则,并将 <ip-address> 替换为配置服务器和 mongos 实例的地址

iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT
[1] 集群中的所有分片都需要能够与其他所有分片通信,以方便 数据块 和平衡操作。

诊断工具 mongostat 在使用 --discover 选项时,需要能够访问集群的所有组件,包括配置服务器、分片服务器以及 mongos 实例。

iptables 链的默认策略是允许所有流量。完成所有 iptables 配置更改后,您必须将默认策略更改为 DROP,以确保所有未明确允许的流量无法访问 MongoDB 部署的组件。请执行以下命令以更改此策略

iptables -P INPUT DROP
iptables -P OUTPUT DROP

本节包含管理和使用 iptables 的多个基本操作。有一些前端工具可以自动化 iptables 配置的一些方面,但所有 iptables 前端都提供相同的基本功能。

默认情况下,所有 iptables 规则仅存储在内存中。当您的系统重启时,您的防火墙规则将恢复到默认设置。当您测试了一个规则集并确保它可以有效地控制流量时,您可以使用以下操作来使规则集持久化。

在 Red Hat Enterprise Linux、Fedora Linux 和相关发行版上,您可以执行以下命令

service iptables save

在 Debian、Ubuntu 和相关发行版上,您可以使用以下命令将 iptables 规则导出到 /etc/iptables.conf 文件

iptables-save > /etc/iptables.conf

运行以下操作以恢复网络规则

iptables-restore < /etc/iptables.conf

将此命令放在您的 rc.local 文件中,或在 /etc/network/if-up.d/iptables 文件中,与其他类似操作一起。

要列出当前应用的所有 iptables 规则,请使用系统外壳中的以下操作。

iptables -L

如果您在输入 iptables 规则时出错或只需恢复到默认规则集,您可以在系统外壳中使用以下操作来清除所有规则

iptables -F

如果您已经使您的 iptables 规则持久化,您需要在使所有 iptables 规则持久化部分中重复相应的程序。

返回

IP 绑定