美文网首页
提高Mongodb的安全性——利用iptables进行行ip访问

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

作者: 邪恶的奥伯伦 | 来源:发表于2019-03-07 15:39 被阅读0次

    越来越多的关于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访问

          本文链接:https://www.haomeiwen.com/subject/ovicpqtx.html