Redis

redis安全配置

通常情况redis服务器总是放在内网并只允许内部服务器访问的,所以redis生来就不怎么关注安全问题,默认的redis-server配置允许任何访问。但总会有某些情况下,我们需要将redis暴露给外网,这时候就需要给redis-server加上些安全措施,你总不会希望有其他人能访问你的redis-server吧。 1. 设置防火墙 在redis服务器的防火墙(或者iptables)上设置只允许受信任的主机访问redis端口。这是最基本的安全策略。 2. 绑定本地网卡 修改redis.conf文件,添加 bind 127.0.0.1 这样做使得redis-server只接受本地访问。即使有外部主机通过了防火墙,也无法访问redis-server。 注意,bind指令不能绑定除本地网卡ip外的其他ip。也就是说,不能通过bind外部主机的ip来允许外部主机的访问,这只能通过防火墙来实现。 3. 添加密码验证 修改redis.conf文件,添加 requirepass your-password redis的执行效率非常快,外部设备每秒可以测试相当多数量的密码,所以密码要尽量长尽量复杂。 redis的密码是明文存储在redis.conf文件,因此不需要管理员记住。所以可以使用相当长的密码。 密码验证的目标是提供第二层的安全保障。这样当防火墙失效的话,外部主机在没有密码的情况下仍然不能访问redis。 4. […]

wtf! Redis Crackit,我被黑了 =。=#

先前学redis时候是放在亚马逊的云主机上部署的redis-server,因为亚马逊云的默认安全策略是禁止所有端口的外网访问,要想从外网访问云主机,必须手动在安全策略开启所需端口,这能有效防止无意识的端口暴露。而阿里云的默认安全策略则是允许所有端口的外网访问权限,简直日了狗了,以前从没注意过。 昨天想着要重构下我的betspider爬虫,将一些实时数据放到redis缓存中,所以在阿里云也开了redis-server。redis的默认配置是允许所有远程连接,并且无需密码。 这种情况下:阿里云无安全策略,所有端口暴露给外网;redis-server无需密码登陆、允许远程连接。那么就相当于将我的redis-server暴露在所有人面前,谁都可以访问到。活生生的Redis Crackit肉鸡。 Redis Crackit漏洞: 黑客远程访问redis服务,清空redis数据库后写入他自己的ssh登录公钥,然后将redis数据库备份为/root/.ssh/authotrized_keys。 这就成功地将自己的公钥写入到ssh的authotrized_keys,无需密码直接root登录被黑的主机。大写的SAD.   事情的经过是这样的,应该是今天中午的时候吧大概,正好用phpRedisAdmin查看我的redis-server,发现里面有一个很陌生的key,值为“ssh-ras xxxx”一大串字符串,当时我还没反应过来这是什么玩意,就奇怪了一下怎么莫名其妙多了一个key,然后随手就把他删除了,这个时候,应该就是黑客正在作案的时候,还真巧=。=# 后来,再登录的时候,发下root目录下多了一个奇怪的脚本get.sh,内容是下载xx程序后台执行,然后删除程序文件。想了一会觉得特别不对劲,卧槽难道我被黑了,赶紧history检查历史命令,发现没有什么异常,估计这时候history记录已经被黑客清理干净了,但却忘删get.sh这个脚本文件了。 后来正好看手机短信,发现有条未读的阿里云短信,说我的服务器在荷兰(89.248.162.167)处登录,可能是黑客入侵。what the hell,我居然现在才看到短信!!! 当时想了好一会儿,卧槽怎么回事,怎么会被黑了,赶紧改密码,日了狗了。到底怎么回事。咦,我的redis好像没有做访问控制,可以被所有人访问到呀,是不是redis有漏洞?赶紧百度一下,what the fuck!果然是redis的漏洞,靠!赶紧停redis-server。 处理方法: 修改redis配置文件,打开被注释的bind

docker入门 – 使用docker在单机上搭建redis集群

昨天玩了一下docker,感觉官方Get Started教程里面那个whalesay的例子实在是太渣,没有一点实际用途。解释了image跟container的关系,但完全没有体现container与本地进程的关系。 在实际应用场景上,我感觉docker应该更经常会用在部署nginx、memcache这些无需持久化到本地文件的服务进程上面,一个container就相当于一个进程,随用随起,而且不受本机环境限制。docker应该还可以用在Online Judge这样的在线编程系统上,不用再担心恶意代码搞坏本机系统了。不知道Quantopian这些在线交易策略的后台是不是也用docker给每个用户一个container来跑他们的策略,有点意思嘿嘿。另外docker用来做测试环境也特方便,比如本文要做的redis集群,实际应用肯定是将每个redis-server部署在不同的服务器上,穷酸点的可以部署在不同虚拟机上,但用docker可以很方便的在一台机器起好几个redis-server进程。 1. 下载安装docker 2. 直接去docker hub拉取redis官方镜像 # docker pull redis 使用docker images可以列出当前所有的docker镜像。 docker镜像与容器的实际存储目录一般都在/var/lib/docker下面,关于docker的底层存储结构,这个应该得花大时间才能有所心得了。 3. 从redis镜像启动一个容器 # docker

Scroll to Top