Skip to content

MongoDB 防火墙配置

MongoDB 端口号

常用端口

组件默认端口描述
mongod(单实例)27017MongoDB 数据库实例默认端口
mongod(分片服务器)27018分片集群中分片服务器的默认端口
mongod(配置服务器)27019分片集群中配置服务器的默认端口
mongos(路由服务器)27017分片集群中路由服务器的默认端口

自定义端口

在生产环境中,为了提高安全性,建议使用自定义端口,避免使用默认端口。可以通过 --port 参数或配置文件中的 net.port 选项修改 MongoDB 实例的端口。

Linux 系统防火墙配置

1. iptables 配置

查看现有规则

bash
iptables -L -n

添加 MongoDB 端口规则

bash
# 允许本地访问
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许特定 IP 访问 MongoDB 端口
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 27017 -j ACCEPT

# 允许特定 IP 访问分片服务器端口
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 27018 -j ACCEPT

# 允许特定 IP 访问配置服务器端口
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 27019 -j ACCEPT

# 默认拒绝所有其他访问
iptables -P INPUT DROP

保存规则

bash
# CentOS/RHEL
service iptables save

# Ubuntu/Debian
iptables-save > /etc/iptables/rules.v4

2. firewalld 配置(CentOS/RHEL 7+)

查看现有规则

bash
firewall-cmd --list-all

添加 MongoDB 端口规则

bash
# 允许特定 IP 访问 MongoDB 端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept'

# 允许特定 IP 访问分片服务器端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27018" accept'

# 允许特定 IP 访问配置服务器端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27019" accept'

# 重新加载规则
firewall-cmd --reload

查看已添加的规则

bash
firewall-cmd --list-rich-rules

Windows 系统防火墙配置

1. 图形界面配置

  1. 打开 Windows 防火墙

    • 按下 Win + R 键,输入 wf.msc,回车
    • 打开 "高级安全 Windows 防火墙"
  2. 创建入站规则

    • 点击 "入站规则",然后点击 "新建规则"
    • 选择 "端口",点击 "下一步"
    • 选择 "TCP",在 "特定本地端口" 中输入 MongoDB 端口(如 27017),点击 "下一步"
    • 选择 "允许连接",点击 "下一步"
    • 选择适用的网络类型(如 "域"、"专用"、"公用"),点击 "下一步"
    • 输入规则名称(如 "MongoDB"),点击 "完成"
  3. 修改规则,限制 IP 访问

    • 右键点击刚刚创建的规则,选择 "属性"
    • 切换到 "作用域" 选项卡
    • 在 "远程 IP 地址" 中选择 "下列 IP 地址"
    • 点击 "添加",输入允许访问的 IP 地址或网段
    • 点击 "确定" 保存修改

2. 命令行配置

使用 netsh 命令添加规则

powershell
# 添加 MongoDB 端口规则
netsh advfirewall firewall add rule name="MongoDB" dir=in action=allow protocol=TCP localport=27017 remoteip=192.168.1.0/24

# 添加分片服务器端口规则
netsh advfirewall firewall add rule name="MongoDB Shard" dir=in action=allow protocol=TCP localport=27018 remoteip=192.168.1.0/24

# 添加配置服务器端口规则
netsh advfirewall firewall add rule name="MongoDB Config" dir=in action=allow protocol=TCP localport=27019 remoteip=192.168.1.0/24

查看现有规则

powershell
netsh advfirewall firewall show rule name="MongoDB"

macOS 系统防火墙配置

1. 图形界面配置

  1. 打开系统偏好设置

    • 点击 Apple 菜单,选择 "系统偏好设置"
    • 点击 "安全性与隐私"
    • 切换到 "防火墙" 选项卡
    • 点击锁图标,输入密码解锁
    • 点击 "防火墙选项"
  2. 添加应用程序规则

    • 点击 "+" 按钮,添加 MongoDB 应用程序
    • 选择 MongoDB 应用程序(如 /usr/local/bin/mongod
    • 设置 "允许传入连接"
    • 点击 "好" 保存设置

2. 命令行配置

使用 pfctl 配置防火墙

  1. 创建规则文件

    bash

sudo nano /etc/pf.anchors/mongodb


2. **添加规则**:

允许特定 IP 访问 MongoDB 端口

pass in proto tcp from 192.168.1.0/24 to any port 27017 keep state pass in proto tcp from 192.168.1.0/24 to any port 27018 keep state pass in proto tcp from 192.168.1.0/24 to any port 27019 keep state


3. **加载规则**:

```bash
sudo pfctl -f /etc/pf.conf
sudo pfctl -e

云服务提供商防火墙配置

1. AWS 安全组配置

  1. 登录 AWS 控制台,导航到 "EC2" 服务
  2. 点击 "安全组",然后点击 "创建安全组"
  3. 填写安全组名称和描述
  4. 在 "入站规则" 中添加 MongoDB 端口规则
    • 类型:"自定义 TCP"
    • 协议:"TCP"
    • 端口范围:"27017"
    • 源:"自定义",输入允许访问的 IP 地址或安全组
  5. 点击 "创建安全组"
  6. 将安全组关联到 MongoDB 实例

2. Azure 网络安全组配置

  1. 登录 Azure 门户,导航到 "网络安全组"
  2. 点击 "创建",填写基本信息
  3. 在 "入站安全规则" 中添加 MongoDB 端口规则
    • 源:"任意" 或特定 IP 地址
    • 源端口范围:"*"
    • 目标:"任意"
    • 目标端口范围:"27017"
    • 协议:"TCP"
    • 操作:"允许"
    • 优先级:"100"
    • 名称:"MongoDB"
  4. 点击 "查看 + 创建",然后点击 "创建"
  5. 将网络安全组关联到 MongoDB 虚拟机或子网

3. Google Cloud 防火墙规则配置

  1. 登录 Google Cloud 控制台,导航到 "VPC 网络" > "防火墙"
  2. 点击 "创建防火墙规则"
  3. 填写规则名称和描述
  4. 配置规则
    • 网络:选择适用的 VPC 网络
    • 优先级:"1000"
    • 方向:"入站"
    • 动作:"允许"
    • 目标:"指定的目标标签",输入 MongoDB 实例的标签
    • 源 IP 范围:输入允许访问的 IP 地址或网段
    • 协议和端口:"指定的协议和端口",输入 "tcp:27017"
  5. 点击 "创建"

防火墙配置最佳实践

1. 限制 IP 访问

  • 只允许信任的 IP 地址或网段访问 MongoDB 端口
  • 避免使用 "0.0.0.0/0" 允许所有 IP 访问
  • 根据业务需求,最小化允许访问的 IP 范围

2. 使用非默认端口

  • 为 MongoDB 实例使用自定义端口,避免使用默认端口
  • 不同组件使用不同的端口,便于管理和安全控制

3. 配置双向防火墙规则

  • 不仅配置入站规则,还配置出站规则
  • 限制 MongoDB 实例只能访问必要的外部服务
  • 防止恶意软件从 MongoDB 实例向外传播

4. 定期审计防火墙规则

  • 定期审查防火墙规则,删除不必要的规则
  • 验证规则的有效性和准确性
  • 确保规则符合安全最佳实践

5. 结合其他安全措施

  • 启用 MongoDB 认证和授权
  • 配置 SSL/TLS 加密
  • 使用 VPN 或专用网络
  • 定期进行安全扫描和评估

常见问题(FAQ)

Q1: 如何测试防火墙规则是否生效?

A1: 可以使用以下方法测试防火墙规则是否生效:

  • 使用 telnet 命令测试端口连通性:

    bash
    telnet <mongodb-host> <mongodb-port>
  • 使用 nc 命令测试端口连通性:

    bash
    nc -zv <mongodb-host> <mongodb-port>
  • 使用 ping 命令测试网络连通性(注意:ping 使用 ICMP 协议,可能与 TCP 端口规则无关):

    bash
    ping <mongodb-host>

Q2: 防火墙规则配置错误导致无法连接 MongoDB 怎么办?

A2: 如果防火墙规则配置错误导致无法连接 MongoDB,可以尝试以下方法:

  • 暂时禁用防火墙,测试是否可以连接
  • 检查防火墙规则,确保允许访问的 IP 地址和端口正确
  • 查看防火墙日志,查找连接被拒绝的原因
  • 恢复到之前的防火墙配置

Q3: 如何配置分片集群的防火墙规则?

A3: 配置分片集群防火墙规则的方法:

  • 允许所有分片服务器之间相互访问
  • 允许所有配置服务器之间相互访问
  • 允许 mongos 路由服务器访问所有分片服务器和配置服务器
  • 允许应用程序服务器访问 mongos 路由服务器
  • 限制外部访问,只允许必要的 IP 地址连接

Q4: 如何在生产环境中安全地修改防火墙规则?

A4: 在生产环境中安全修改防火墙规则的方法:

  • 在低峰时段修改规则
  • 提前通知相关人员
  • 制定回滚计划,以防出现问题
  • 测试修改后的规则,确保服务正常
  • 记录修改内容和时间

Q5: 如何处理动态 IP 地址的访问需求?

A5: 处理动态 IP 地址访问需求的方法:

  • 使用 VPN 或专用网络,固定内部 IP 地址
  • 使用动态 DNS 服务,将动态 IP 地址映射到固定域名
  • 定期更新防火墙规则,添加新的 IP 地址
  • 考虑使用云服务提供商的安全组或网络安全组,支持更灵活的访问控制

Q6: 防火墙配置对 MongoDB 性能有影响吗?

A6: 防火墙配置对 MongoDB 性能的影响通常很小,主要影响在于:

  • 连接建立时的延迟轻微增加
  • 防火墙规则的处理开销
  • 对于高并发场景,可能需要优化防火墙配置,提高处理效率