我在AWS上有一个ubuntu实例,我在服务器上运行mongod。 mongod已将绑定ip设置为0.0.0.0并使用netstat进行验证。
sudo netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1055/sshd
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1049/mongod
tcp6 0 0 :::22 :::* LISTEN 1055/sshd
我还在AWS EC2控制台上设置了安全组规则,以便允许来自端口27017上的公共IP的入站连接。我无法从笔记本电脑连接到mongod(27017)。
telnet ec2-<ip-removed>.compute-1.amazonaws.com 27017 1 ↵
Trying <ip-removed>...
telnet: connect to address <ip-removed>: Operation timed out
但是我从笔记本电脑上连接到端口22上的ssh没有问题
telnet ec2-<ip-removed>.compute-1.amazonaws.com 22 130 ↵
Trying <ip-removed>...
Connected to ec2-<ip-removed>.compute-1.amazonaws.com.
此设置在一周前工作正常,突然我的笔记本电脑客户端拒绝连接到mongo。我在端口6800上尝试了另一个服务,设置了入站规则,并且绑定ip设置为0.0.0.0/32,它也无法连接。我没有设置其他规则,也没有实例上的iptables或防火墙。
我也试过重启服务器,那里没有运气。
还可以从服务器本身连接到mongo
ubuntu@aws$ telnet localhost 27017
Trying 127.0.0.1...
Connected to localhost.
答案 0 :(得分:0)
MongoDB默认只绑定到localhost。您已更新其配置以启用外部访问。
2.6版中的新功能:从官方.deb和.rpm安装的mongod package默认情况下将bind_ip配置设置为127.0.0.1。
来源:https://docs.mongodb.org/manual/administration/configuration/#security-considerations
这是一个教程,展示了如何操作:http://www.mkyong.com/mongodb/mongodb-allow-remote-access/
答案 1 :(得分:0)
如评论中所述,通过在实例上运行的iptables阻止了来自外部网络的端口访问。
我对iptables / AWS访问策略的处理方法是始终使用“开放式”AWS访问策略,并使用iptables锁定所有内容。这样,控制访问就更接近实例,并且不会通过将访问策略彼此分层来使事情过于复杂。
而且,你的mongod实例甚至不应该在DMZ(可公开访问)中,你应该设置iptables只允许从内部网络访问mongod实例。有可能你有一个“应用服务器”需要访问mongod,所以让应用服务器公开访问,而不是mongod实例。
以下是在我的一个“docstore”实例上运行的iptables示例:
root@service-a-2.sn3.vpc3.example.com ~ # -> iptables -L -vn
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1419 15M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 /* 001 accept all to lo interface */
27M 4531M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 /* 005 accept related established rules */ state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- eth0 * 10.3.0.0/16 0.0.0.0/0 /* 015 accept internal icmp */ state NEW
74 4440 ACCEPT tcp -- eth0 * 10.3.0.0/16 0.0.0.0/0 multiport dports 22 /* 777 accepts ssh */ state NEW
420K 25M ACCEPT tcp -- eth0 * 10.3.0.0/16 0.0.0.0/0 multiport dports 27017 /* 777 allow mongo access */ state NEW
462K 28M ACCEPT tcp -- eth0 * 10.3.0.0/16 0.0.0.0/0 multiport dports 3306 /* 777 allow mysql access */ state NEW
656 28976 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 /* 999 drop all INPUT */
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 27M packets, 9639M bytes)
pkts bytes target prot opt in out source destination
请注意,我使用CIDR(无类域间路由)块来识别内部网络,这样就不会因为必须指定实际的IP地址而陷入困境。