Scrapy分布式的前篇–让redis和MongoDB安全点

  • A+
所属分类:Python

Scrapy分布式的前篇–让redis和MongoDB安全点 | 静觅

今天这博文就先给大家做些前期工作,其实吧、最主要的是防止你的服务器因为这篇博文被轮·········
博文开始之前 我们先来看篇文章:

http://www.youxia.org/daily-news-attack-extortion-does-not-delay-a-week-had-27000-mongodb-database.html

关于年前MongoDB由于默认可匿名访问 而导致了一大堆的管理员掉坑里 预估中国有十万数据库被坑。
这是继Redis之后又一个小白式的错误······(Redis也是默认匿名访问)
所以在下一篇博文开始之前,先给一些新手小伙伴做一些准备工作。

因为篇幅较少 先写写Redis的一些安全设置:
安装Redis: 请参考这儿;https://redis.io/download

Shell

| | |
| --- | --- |
| 1
2
3
4
5
6 | $ wget http://download.redis.io/releases/redis-3.2.7.tar.gz
$ tar xzf redis-3.2.7.tar.gz
$ cd redis-3.2.7
$ make
$ src/redis-server |

ps :如果以上有报错,可能是你的服务器没有安装依赖:
CentOS7:

Shell

| | |
| --- | --- |
| 1 | yum install -y gcc-c++ tcl |

只写关于Linux的、Windows的很简单,配置文件通用:
安装完成后
在目录 redis-3.2.7中有一个redis.conf的配置文件,按照默认习惯我们将其复制到/etc目录下:

| | |
| --- | --- |
| 1 | [[email protected] ~]# cp redis-3.2.7/redis.conf /etc |

PS:请使用复制(cp)而不要使用移动(mv);毕竟你要弄错了还可以再拷贝一份儿过去用不是?

使用vim编辑刚刚拷贝的redis.conf

| | |
| --- | --- |
| 1 | vim /etc/redis.conf |

PS:使用vim需要先安装:
CentOS7:

| | |
| --- | --- |
| 1 | yum  install vim |

我们需要注意以下几项:

1、注释掉47行的bind 127.0.0.1(这个意思是限制为只能 127.0.0.1 也就是本机登录)PS:个人更建议 将你需要连接Redis数据库的IP地址填写在此处,而不是注释掉。这样做会比直接注释掉更加安全。

2、更改第84行port  6379 为你需要的端口号(这是Redis的默认监听端口)PS:个人建议务必更改
3、更改第128行 daemonize no 为 daemonize yes(这是让Redis后台运行) PS:个人建议更改

4、取消第 480  # requirepass foobared 的#注释符(这是redis的访问密码) 并更改foobared为你需要的密码 比如 我需们需要密码为123456 则改为  requirepass 123456。PS:密码不可过长否则Python的redis客户端无法连接

以上配置文件更改完毕,需要在防火墙放行:

| | |
| --- | --- |
| 1 | firewall-cmd --zone=public --add-port=xxxx/tcp --permanent |

请将xxxx更改为你自己的redis端口。
重启防火墙生效:

| | |
| --- | --- |
| 1 | systemctl restart firewalld.service |

指定配置文件启动redis:

Shell

| | |
| --- | --- |
| 1 | [[email protected] ~]# redis-3.2.7/src/redis-server /etc/redis.conf |

加入到开机启动:

Shell

| | |
| --- | --- |
| 1 | echo "/root/redis-3.2.6/src/redis-server /etc/redis.conf" >> /etc/rc.local |

一个较为安全的redis配置完毕。
redis的桌面客户端我推荐:RedisDesktopManager
去下面这个地址下载就不需要捐助啦!
https://github.com/uglide/RedisDesktopManager/releases
当然还有一些其他配置、我们用不到也就不写啦!
MongoDB:
这次MongoDB挺惨啊!由于默认匿名访问、下面给MongoDB配置一点安全措施:
安装MongoDB:

以CentOS7为例其余发行版请参考官方文档:https://docs.mongodb.com/manual/administration/install-on-linux/

1、建一个yum源:

Shell

| | |
| --- | --- |
| 1 | [[email protected] ~]# vim /etc/yum.repos.d/mongodb-org-3.4.repo |

写入以下内容:

| | |
| --- | --- |
| 1
2
3
4
5
6 | [mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc |

2、安装mongoDB以及相关工具:

| | |
| --- | --- |
| 1 | sudo yum install -y mongodb-org |

3、启动MongoDB:

| | |
| --- | --- |
| 1 | sudo service mongod start |

PS:如果你的服务器在使用SELinux的话,你需要配置SElinux允许MongoDB启动,当然更简单的方法是关掉SElinux。
关闭SElinux:

Shell

| | |
| --- | --- |
| 1 | [[email protected] ~]# vim /etc/selinux/config |

将第7行设置为:SELINUX=disabled
4、停止MongoDB:

| | |
| --- | --- |
| 1 | sudo service mongod stop |

上面安装完按成了MongoDB下面要步入正题了:
1、备份和更改配置文件:

| | |
| --- | --- |
| 1
2 | [[email protected] ~]# cp /etc/mongod.conf  /etc/mongod_backup.conf
[[email protected] ~]# vim /etc/mongod.conf |

更改第28行 prot 2701为你需要更改的端口(这是MongoDB默认的监听端口)

更改第29行 bindIp: 127.0.0.1为0.0.0.0(MongoDB默认只能本地访问)PS:个人建议此处添加你需要连接MongoDB服务器的IP地址、而不是改成0.0.0.0。这样做会更安全

启动MongoDB:

| | |
| --- | --- |
| 1 | mongod --config /etc/mongod.conf |

意思是:指定/etc/mongod.conf为配置文件启动MongoDB
好了、配置文件更改完毕,现在可以外网访问我们的MongoDB了!不需要用户名!匿名的!现在我们进行下一步设置。
因为MongoDB默认是匿名访问的、我们需要开启用户认证。

我估摸着很多哥们儿和我一样没补全 啥都不会干、所以直接在服务器上改就不太现实了,需要借助于第三方客户端。我个人推荐:mongobooster 官方地址:https://mongobooster.com/

收费版免费版功能一样 不用在意:
首先我们需要连上MongoDB服务器(别忘了防火墙放行你使用的端口啊!!!)

1561359231283_19.gif

连上之后大慨是这个样子:

1561359214171_12.png

按下Ctrl+T 打开shell界面输入一下内容:

| | |
| --- | --- |
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | use admin
db.createUser(
   {
     user: "你的用户名",
     pwd: "你的密码",
     roles: [ {role:"userAdminAnyDatabase", db:"admin"} ]
    / All build-in Roles
    Database User Roles: read\|readWrite
    数据库用户角色:读\|读写
    Database Admion Roles: dbAdmin\|dbOwner\|userAdmin
    数据库管理角色:数据库管理员\|数据库所有者\|用户管理
    Cluster Admin Roles: clusterAdmin\|clusterManager\|clusterMonitor\|hostManager
    集群管理角色:
    Backup and Restoration Roles: backup\|restore
    All-Database Roles: readAnyDatabase\|readWriteAnyDatabase\|userAdminAnyDatabase\|dbAdminAnyDatabase
    所有数据库角色:读所有数据库\|读写所有数据库\|所有数据库的用户管理员\|所有数据库的管理员
    Superuser Roles: root
/
   }
) |

再点击run运行即可 会在信息栏中提示True 现在断开数据库连接、再打开会发现多出一个admin的数据库。

1561359214290_13.png

上面的都做了些什么呢?
首先我们新建了一个admin的数据库(MongoDB的原则哦、有则切换没有就创建)
然后在admin数据中创建了一个用户 和 密码 赋予了这个用户管理admin数据库 所有数据库用户的权限。
至于有那些权限 在注释中都有写哦!常用的我估摸着写了个对应意思·········
OK!搞定这一部分 就可以开启MongoDB的用户认证了!
怎么开启呢?首先关闭正在运行的MongoDB:

| | |
| --- | --- |
| 1 | ps -e \| grep mongod |

上面的命令会找出MongoDB的进程号、然后运行kill 进程号即可!
开启MongoDB:

| | |
| --- | --- |
| 1 | mongod --auth --config /etc/mongod.conf |

意思是:以认证模式 指定/etc/mongod.conf启动 MongoDB。
加入开机启动:

| | |
| --- | --- |
| 1 | echo "mongod --auth --config /etc/mongod.conf" >> /etc/rc.local |

好了!现在MongoDB也配置完成 啦!

现在如果你需要新建一个用户让其使用数据库 你该怎么做呢?
像下面这样;首先你需要连接到admin数据库!
在选项Basic中照常配置:

1561359222701_16.png

需要额外设置的是Authentication选项:

1561359219943_14.png

连接成功后大概是这个样子:

1561359221915_15.png

需要注意的一点是:这个用户只能看到所有的数据库和用户、并不能看到数据!因为我们创建的时候只给了所有数据库用户管理的权限哦!
然后打开shell界面按照创建admin的模板执行即可:

| | |
| --- | --- |
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | use 想要创建的数据库
db.createUser(
   {
     user: "想要使用的用户名",
     pwd: "想要使用的密码",
     roles: [ {role:"赋予什么样的权限", db:"创建的数据库"} ]
    / All build-in Roles
    Database User Roles: read\|readWrite
    数据库用户角色:读\|读写
    Database Admion Roles: dbAdmin\|dbOwner\|userAdmin
    数据库管理角色:数据库管理员\|数据库所有者\|用户管理
    Cluster Admin Roles: clusterAdmin\|clusterManager\|clusterMonitor\|hostManager
    集群管理角色:
    Backup and Restoration Roles: backup\|restore
    All-Database Roles: readAnyDatabase\|readWriteAnyDatabase\|userAdminAnyDatabase\|dbAdminAnyDatabase
    所有数据库角色:读所有数据库\|读写所有数据库\|所有数据库的用户管理员\|所有数据库的管理员
    Superuser Roles: root
/
   }
) |

创建完成后、就可以用创建好的用户名和密码去链接有权限的数据库啦!!是不是So Easy!!!
其实吧 还是 bindIp安全  哈哈哈!
以上完毕!!
下一篇就是基于Scrapy-Redis的分布式了、真的超级简单!简单得不要不要的

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin