外观
MongoDB 防火墙配置
MongoDB 端口号
常用端口
| 组件 | 默认端口 | 描述 |
|---|---|---|
| mongod(单实例) | 27017 | MongoDB 数据库实例默认端口 |
| 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.v42. 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-rulesWindows 系统防火墙配置
1. 图形界面配置
打开 Windows 防火墙:
- 按下
Win + R键,输入wf.msc,回车 - 打开 "高级安全 Windows 防火墙"
- 按下
创建入站规则:
- 点击 "入站规则",然后点击 "新建规则"
- 选择 "端口",点击 "下一步"
- 选择 "TCP",在 "特定本地端口" 中输入 MongoDB 端口(如 27017),点击 "下一步"
- 选择 "允许连接",点击 "下一步"
- 选择适用的网络类型(如 "域"、"专用"、"公用"),点击 "下一步"
- 输入规则名称(如 "MongoDB"),点击 "完成"
修改规则,限制 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. 图形界面配置
打开系统偏好设置:
- 点击 Apple 菜单,选择 "系统偏好设置"
- 点击 "安全性与隐私"
- 切换到 "防火墙" 选项卡
- 点击锁图标,输入密码解锁
- 点击 "防火墙选项"
添加应用程序规则:
- 点击 "+" 按钮,添加 MongoDB 应用程序
- 选择 MongoDB 应用程序(如
/usr/local/bin/mongod) - 设置 "允许传入连接"
- 点击 "好" 保存设置
2. 命令行配置
使用 pfctl 配置防火墙:
创建规则文件:
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 安全组配置
- 登录 AWS 控制台,导航到 "EC2" 服务
- 点击 "安全组",然后点击 "创建安全组"
- 填写安全组名称和描述
- 在 "入站规则" 中添加 MongoDB 端口规则:
- 类型:"自定义 TCP"
- 协议:"TCP"
- 端口范围:"27017"
- 源:"自定义",输入允许访问的 IP 地址或安全组
- 点击 "创建安全组"
- 将安全组关联到 MongoDB 实例
2. Azure 网络安全组配置
- 登录 Azure 门户,导航到 "网络安全组"
- 点击 "创建",填写基本信息
- 在 "入站安全规则" 中添加 MongoDB 端口规则:
- 源:"任意" 或特定 IP 地址
- 源端口范围:"*"
- 目标:"任意"
- 目标端口范围:"27017"
- 协议:"TCP"
- 操作:"允许"
- 优先级:"100"
- 名称:"MongoDB"
- 点击 "查看 + 创建",然后点击 "创建"
- 将网络安全组关联到 MongoDB 虚拟机或子网
3. Google Cloud 防火墙规则配置
- 登录 Google Cloud 控制台,导航到 "VPC 网络" > "防火墙"
- 点击 "创建防火墙规则"
- 填写规则名称和描述
- 配置规则:
- 网络:选择适用的 VPC 网络
- 优先级:"1000"
- 方向:"入站"
- 动作:"允许"
- 目标:"指定的目标标签",输入 MongoDB 实例的标签
- 源 IP 范围:输入允许访问的 IP 地址或网段
- 协议和端口:"指定的协议和端口",输入 "tcp:27017"
- 点击 "创建"
防火墙配置最佳实践
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命令测试端口连通性:bashtelnet <mongodb-host> <mongodb-port>使用
nc命令测试端口连通性:bashnc -zv <mongodb-host> <mongodb-port>使用
ping命令测试网络连通性(注意:ping 使用 ICMP 协议,可能与 TCP 端口规则无关):bashping <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 性能的影响通常很小,主要影响在于:
- 连接建立时的延迟轻微增加
- 防火墙规则的处理开销
- 对于高并发场景,可能需要优化防火墙配置,提高处理效率
