Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

为自管理部署配置Linuxiptables 防火墙

在此页面上

  • Overview
  • 模式
  • 将默认策略更改为 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

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

注意

Optional

如果只有一台应用程序服务器,则可以将 <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 实例。

使用相同的 iptables 命令允许流量进出这些实例,就像副本集节点的 mongod 实例一样。以进出 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 规则,请在系统 Shell 中执行以下操作。

iptables -L

如果在输入 iptables 规则时出现配置错误,或者只是需要恢复到默认规则集,可以在系统 Shell 中使用以下操作清除所有规则:

iptables -F

如果您已经使 iptables 规则持久化,则需要重复执行使所有 iptables 规则持久化部分中的相应步骤。

后退

IP 绑定