提高Mongodb的安全性——利用iptables进行行ip访问限制

越来越多的关于mongodb泄露的事件暴露出来了, 影响还是挺大的,提高mongodb的使用安全主有两个办法
1是改变默认端口27017 改成其他的端口
2是使用mongodb的auth 用户名密码验证机制, 不要不使用密码去裸奔。

今天分享的是用iptables再进一步进行ip访问的限制。

先介绍一下mongodb自带的bind_ip启动参数,
假设服务器的端扣口 27017
服务器的内网ip 192.168.0.99
服务器外网的ip 111.111.111.111
开发人员办公室IP 222.222.222.222
bind_ip的意思是mongodb运行时是绑定在哪个ip的

如果设置成bind_ip=127.0.0.1, 这样意味着只有服务器本机可以连到mongodb上。
如果设置成bind_ip=127.0.0.1, 192.168.0.99, 这样意味着除了本机,局域网也可以通内网ip进行访问
如果设置成bind_ip=127.0.0.1, 192.168.0.99, 111.111.111.111 这样意味着 所有的外网IP都可以访问了,效果等同于不用bind_ip参数

仅仅使用bind_ip的话没办法限制部分外网ip进行访问, 所以需要借助iptables的帮忙
iptables就是用来配置服务器的访问规则, 我们现在的目标是 内网可以访问mongodb,外网只有指定的IP可以访问。

首先禁止所有的IP访问 27017端口
iptables -I INPUT -p tcp --dport 27017 -j DROP

然后允许访问本机IP访问27017端口
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27017 -j ACCEPT

然后允许局域网访问, 这里子网掩码一定要写对 不然不生效 如果写成192.168.0.0/24 而服务器的ip段又不是这么设置的 就没法生效了
iptables -I INPUT -s 192.168.0.0/16 -p tcp --dport 27017 -j ACCEPT

最后允许外网某IP可以访问
iptables -I INPUT -s 222.222.222.22 -p tcp --dport 27017 -j ACCEPT

检查设置的ip规则
iptables --list INPUT --line-numbers

iptables --list INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  localhost            anywhere      tcp dpt:27017
2    ACCEPT     tcp  --  172.16.0.0/16        anywhere   tcp dpt:27017
3    ACCEPT     tcp  --  192.168.0.0/16       anywhere   tcp dpt:27017
4    ACCEPT     tcp  --  222.222.222.222     anywhere  tcp dpt:27017
5    DROP       tcp  --  anywhere             anywhere   tcp dpt:27017

这里的行数可以用来删除规则,删除num为5的规则
iptables -D INPUT 5

iptables -A 添加规则
iptables -I 插入规则到指定num,默认1
iptables -D 删除指定num的规则

这里值得注意的是 可以理解iptables生效规则是从下往上, 从num大到小,
像例子中的 DROP所有访问在最后一句 先执行, 然后再往上 ACCPET这些可以认为是添加的例外,
如果DROP是第一行其他的几个允许访问的规则都会因为被覆盖掉而失效。

理解这个规则之后就会理解什么时候改用iptables -I 什么时候用iptables -A (一般都是用 -I)


iptables的保存, 上面的这些操作系统重启后 就没了,一般要进行iptables的保存,
根据系统的不同, ubuntu系统如果想保存的话 可以参考

The easy way is to use iptables-persistent.

Install iptables-persistent:

sudo apt-get install iptables-persistent

After it's installed, you can save/reload iptables rules anytime:

sudo /etc/init.d/iptables-persistent save 
sudo /etc/init.d/iptables-persistent reload

Ubuntu 16.04 Server

The installation as described above works without a problem, but the two commands for saving and reloading above do not seem to work with a 16.04 server. The following commands work with that version:

sudo netfilter-persistent save
sudo netfilter-persistent reload

你可能感兴趣的:(提高Mongodb的安全性——利用iptables进行行ip访问限制)