MongoDB 是一种常用的免费开源 NoSQL 文档数据库。本教程将帮助您在服务器上设置 MongoDB,以便在生产应用程序环境中使用。您将安装 MongoDB 并配置防火墙规则以限制对 MongoDB 的访问。
步骤1 – 安装MongoDBMongoDB 已经包含在 Debian 的软件包存储库中,但是官方 MongoDB 存储库提供了最新版本,并且是安装软件的推荐方法。在这一步中,我们将把这个官方的存储库添加到我们的服务器中。
Debian 通过验证它们是否使用 GPG 密钥进行签名来确保软件包的真实性,因此我们首先必须导入他们用于官方 MongoDB 存储库的密钥。
sudo apt-key adv --keyserver hkp://keyserver.Ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6成功导入密钥后,您将看到:
gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)接下来,我们必须添加 MongoDB 存储库详细信息,以便apt知道从哪里下载软件包。
为MongoDB创建列表文件:
echo "deb jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list添加存储库详细信息后,更新软件包列表:
sudo apt-get update现在使用以下命令安装 MongoDB 包本身:
sudo apt-get install -y mongodb-org这将安装 MongoDB 的最新稳定版本,以及 MongoDB 服务器的一些有用的管理工具。
一旦安装了MongoDB,启动服务,并确保在服务器重新启动时启动该服务:
sudo systemctl enable mongod.servicesudo systemctl start mongod
然后用systemctl来检查服务是否正常启动:
sudo systemctl status mongod您应该看到以下输出,表示该服务正在运行:
mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/lib/systemd/system/mongod.service; enabled) Active: active (running) since Tue 2017-02-28 19:51:51 UTC; 7s ago Docs: https://docs.mongodb.org/manual Main PID: 8958 (mongod) CGroup: /system.slice/mongod.service └─8958 /usr/bin/mongod --quiet --config /etc/mongod.conf Feb 28 19:51:51 cart-61037 systemd[1]: Started High-performance, schema-free document-oriented database.现在,MongoDB 成功安装,我们用软件防火墙来保护它。
步骤2 – 使用防火墙保护 MongoDB在大多数情况下,MongoDB 只能从某些受信任的位置访问,例如托管应用程序的其他服务器。要完成此任务,您可以允许访问 MongoDB 的默认端口,同时指定将被明确允许连接的另一个服务器的 IP 地址。我们将使用 iptables 防火墙来设置此规则,以及一些其他规则来保护系统。
在我们编写任何规则之前,请安装 iptables-persistent 软件包,以便您可以保存创建的规则。这样,每次重新启动服务器时都会应用规则。执行此命令:
sudo apt-get install iptables-persistent注意:在安装过程中,可能会询问您是否要保留现有规则。您可以丢弃现有的规则。
接下来,删除可能存在的任何现有规则,以防万一:
sudo iptables -F然后添加允许已建立的连接继续通话的规则。这样我们现有的 SSH 连接不会中断:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT接下来,确保允许 SSH 访问:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT如果您计划从远程服务器连接到 MongoDB,请添加这些规则,以允许从应用程序服务器访问 MongoDB 的默认端口:
sudo iptables -A INPUT -s your_other_server_ip -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -d your_other_server_ip -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT接下来,添加允许本地环回设备上的流量的这些规则:
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT最后,更改防火墙策略以删除所有其他流量:
sudo iptables -P INPUT DROP验证规则是否正确:
sudo iptables -S你应该看到类似的输出:
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s your_other_server_ip/32 -p tcp -m tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A OUTPUT -d your_other_server_ip/32 -p tcp -m tcp --sport 27017 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT最后,保存规则:
netfilter-persistent save 步骤 3 – 启用对外部服务器的访问(可选)MongoDB 的当前版本默认不接受外部连接。如果您使用防火墙限制对特定 IP 地址的访问,则可以修改 MongoDB 的配置以接受远程连接。
编辑 MongoDB 配置文件:
sudo nano /etc/mongod.conf找到这一节:
# network interfaces net: port: 27017 bindIp: 127.0.0.1