想起了前段时间也补过这个漏洞,不过没有像楼主服务器遭受到攻击!
总结下修复漏洞方案:
Redis服务器配置不当的体现:
1、redis服务已root账户/权限启动;
2、redis服务无需密码或弱密码进行认证;
3、redis服务器本身对互联网开放了SSH服务,允许key方式登录。
修复方案:
1、不要以root用户允许redis
2、修改运行redis的端口,编辑配置文件(/etc/redis.conf)
port 4321
3、如果只需要本地访问,编辑配置文件(/etc/redis.conf)
bind 127.0.0.1
4、设定密码,编辑配置文件
requirepass ******
5、在启动的时候需要指定配置文件的路径,这些设置才会生效
redis-server /etc/redis.conf
Redis安全配置参考:
服务器上操作过程大家可参考:
第一步:
非root权限启动,建立普通用户并设置密码,redis-server和redis.conf宿主权限修改为普通用户。
[root@cdn bin]# chown -R ugcstore:root /usr/loca/bin/redis-server
[root@cdn bin]# chown -R ugcstore:root /usr/local/redis/redis.conf
切换到普通用户
su - ugcstore
后台启动redis:
nohup redis-server /usr/local/redis/redis.conf &
查看redis进程,验证宿主用户
ps -ef |grep redis
ugcstore 17602 1 0 22:06 ? 00:00:01 redis-server x.x.x.x:4321
第二步:
一般是在/etc/redis.conf,如果/etc下没有找到,find搜索下.
操作的服务器redis.conf文件位置: /usr/local/redis/redis.conf
port 4321 #修改端口
requirepass ****** #设置密码
bind x.x.x.x # 非本机可访问
第三步:
调整连接redis的程序,设置密码,验证程序是否能正确获取数据.
测试数据:key:foo value:bar
[root@cdn ugc]# telnet x.x.x.x 4321
Trying 65.255.33.64...
Connected to 65.255.33.64.
Escape character is '^]'.
auth E38faeQGtxr##rOP
+OK
set foo bar
+OK
get foo
$3
bar
PHP程序测试:
/data/vfetch/public/test.php
* @author david*//**
* 创建redis链接*/functioncreateConn()
{try{$redis=newRedis;$redis->connect('x.x.x.x',4321);$redis->auth('******');return$redis;
}catch(RedisException$e)
{returnfalse;
}
}$rediss=createConn();echo$rediss->get('foo');
Java程序测试:
publicclassJedisTest {staticJedisPool pool=null;publicstaticJedisPool getPool() {if(pool==null) {
JedisPoolConfig config=newJedisPoolConfig();
config.setMaxActive(500);
config.setMaxIdle(20);
config.setMaxWait(1000*30);
config.setTestOnBorrow(true);
pool=newJedisPool(config,"x.x.x.x",4321,5000,"******");
}
System.out.println(pool);returnpool;
}publicstaticvoidclose(JedisPool pool, Jedis redis) {if(redis!=null) {
pool.returnResource(redis);
}
}publicstaticString get(String key) {
String value=null;
JedisPool pool=null;
Jedis jedis=null;try{
pool=getPool();
jedis=pool.getResource();
value=jedis.get(key);
}catch(Exception e) {
pool.returnBrokenResource(jedis);
}finally{
close(pool, jedis);
}returnvalue;
}publicstaticvoidmain(String[] args) {
System.out.println(get("foo"));
}
}