MongoDB是一个免费的开源NoSQL文档数据库,在现代Web应用程序中常用。本教程将帮助您在服务器上安装MongoDB,以便在生产应用环境中使用。您将安装MongoDB并配置防火墙规则以限制对MongoDB的访问。对于生产环境的服务器,我们建议您使用腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。
要学习本教程,您需要:
MongoDB已包含在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 http://repo.mongodb.org/apt/debian 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.service
sudo 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已经安装成功了,那么让我们用软件防火墙保护它。
在多数情况下,我们只能从某些受信任的位置访问MongoDB,例如托管应用程序的另一台服务器。要完成此任务,您可以在指定另一台服务器的IP地址的情况下允许访问MongoDB的默认端口。我们将使用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 -P INPUT 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
默认情况下,当前版本的MongoDB不接受外部连接。如果您已使用防火墙限制对特定IP地址的访问,则可通过修改MongoDB的配置以接受远程连接。
编辑MongoDB配置文件:
sudo nano /etc/mongod.conf
找到此部分:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
Mongo正在监听本地地址,所以它只接受本地连接。更改bindIp值,使其包含MongoDB服务器的IP地址:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1, your_server_ip
保存文件并退出编辑器。然后重启MongoDB以应用以上更改:
sudo systemctl restart mongod
您的远程计算机现在应该能够连接上了。但是,您可能还希望启用身份验证以进一步保护数据库。
还是那句话,对于生产环境的服务器,我们建议您使用腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。 更多Linux教程请前往腾讯云+社区学习更多知识。
参考文献:《How to Install MongoDB on Debian 8》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。