0%

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

各位小伙伴 大家好啊!年假结束了··· 也该开始继续我的装逼之旅了。 年前博文的结尾说了 还有一个基于 Scrapy 的分布式版本、 今天这博文就先给大家做些前期工作,其实吧、最主要的是防止你的服务器因为这篇博文被轮········· 博文开始之前 我们先来看篇文章: 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

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:

1
yum install -y gcc-c++ tcl

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

1
[root@MyCloudServer ~]# 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:

1
[root@MyCloudServer ~]# redis-3.2.7/src/redis-server /etc/redis.conf

加入到开机启动:

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 源:

1
[root@MyCloudServer ~]# 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:

1
[root@MyCloudServer ~]# vim /etc/selinux/config

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

1
sudo service mongod stop

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

1
2
[root@MyCloudServer ~]# cp /etc/mongod.conf  /etc/mongod_backup.conf
[root@MyCloudServer ~]# 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 服务器(别忘了防火墙放行你使用的端口啊!!!) 170203 连上之后大慨是这个样子: 17020301 按下 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 的数据库。 QQ截图20170204001502 上面的都做了些什么呢? 首先我们新建了一个 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 中照常配置: QQ20170204-004332@2x 需要额外设置的是 Authentication 选项: QQ20170204-004627@2x 连接成功后大概是这个样子: QQ20170204-004930@2x 需要注意的一点是:这个用户只能看到所有的数据库和用户、并不能看到数据!因为我们创建的时候只给了所有数据库用户管理的权限哦! 然后打开 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 的分布式了、真的超级简单!简单得不要不要的