redis安全規(guī)范—-check list.
成都創(chuàng)新互聯(lián)成立與2013年,先為尼元陽等服務(wù)建站,尼元陽等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為尼元陽企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
1.信任的內(nèi)網(wǎng)運(yùn)行,盡量避免有公網(wǎng)訪問
在/etc/redis/redis.conf中配置如下: bind 127.0.0.1
2.綁定redis監(jiān)聽的網(wǎng)絡(luò)接口
如果服務(wù)器有多個(gè)IP,可限定redis server監(jiān)聽的IP,通過redis配置項(xiàng)bind,可同時(shí)綁定多個(gè)IP
3.設(shè)置防火墻
如果需要其他機(jī)器訪問,或者設(shè)置了slave模式,那就記得加上相應(yīng)的防火墻設(shè)置,命令如下:
iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT
4.禁止root用戶啟動(dòng)redis
設(shè)置一個(gè)單獨(dú)的redis賬戶很有必要,redis crackit就利用到了root用戶的特性來重置authorized_keys。首先創(chuàng)建一個(gè)redis賬戶,然后通過該賬戶啟動(dòng)。
setsid sudo -u redis /usr/bin/redis-server /etc/redis/redis.conf
啟動(dòng)之后應(yīng)該如下:
root@kali:~# ps -elf|grep redis 1 S redis 14720 1 0 80 0 - 8979 - 08:40 ? 00:00:00 /usr/bin/redis-server /etc/redis/redis.conf` `
5.限制redis文件目錄訪問權(quán)限
設(shè)置redis的主目錄權(quán)限為700,如果redis配置文件獨(dú)立于redis主目錄,權(quán)限修過為600,因?yàn)閞edis密碼明文存儲(chǔ)在配置文件中.
6.避免使用熟知的端口,降低被初級掃描的風(fēng)險(xiǎn)
在/etc/redis/redis.conf中配置如下
找到port 6379這行,把6379改為8888
7.開啟redis密碼認(rèn)證,并設(shè)置高復(fù)雜度密碼
redis在redis.conf配置文件中,設(shè)置配置項(xiàng)requirepass, 開戶密碼認(rèn)證。
redis因查詢效率高,auth這種命令每秒能處理10w次以上,簡單的redis的密碼極容易為***者暴破。
root@kali:~# redis-cli -h 192.168.10.2 redis 192.168.10.2:6379> keys * (error) ERR operation not permitted redis 192.168.10.2:6379> auth @nsF0cus!@# OK
root@kali:~# echo -e "xxlegend"|sha256sum b59869cac63a67e7ee97e6923a75811ff58bd4936ed3be3480b46145d43ae335`
8.禁用或者重命名危險(xiǎn)命令
這個(gè)漏洞就利用config/save兩個(gè)命令完成*** 。 因redis無用戶權(quán)限限制,建議危險(xiǎn)的命令,使用rename配置項(xiàng)進(jìn)行禁用或重命名,這樣外部不了解重命名規(guī)則***者,就不能執(zhí)行這類命令。涉及到的命令:
FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL`
以下示例:redis.config文件禁用FLUSHDB、FLUSHALL兩個(gè)命令;重命名CONFIG、SHUTDOWN命令,添加一個(gè)特殊的后綴。 這樣redis啟動(dòng)后,只能運(yùn)行CONFIG_b9fc8327c4dee7命令,不能執(zhí)行CONFIG命令。
rename-command CONFIG CONFIG_b9fc8327c4dee7 rename-command SHUTDOWN SHUTDOWN_b9fc8327c4dee7 rename-command FLUSHDB “” rename-command FLUSHALL “”
上述配置將config,flushdb,flushall設(shè)置為了空,即禁用該命令,我們也可以命名為一些***者難以猜測,我們自己卻容易記住的的名字。保存之后,執(zhí)行/etc/init.d/redis-server restart 重啟生效。
9.禁止redis中存儲(chǔ)敏感的明文數(shù)據(jù)
Redis設(shè)計(jì)旨在提供高性能的KV服務(wù),至少目前在權(quán)限訪問控制和數(shù)據(jù)持久化方面比較弱化。所以禁止在Redis中存儲(chǔ)或緩存敏感的明文數(shù)據(jù)
10.安全監(jiān)控
建立蜜罐網(wǎng)絡(luò),有***嘗試時(shí),可及時(shí)發(fā)現(xiàn)
監(jiān)控redis安全狀態(tài),cmdstat_auth cmdstat_flushdb/flushall監(jiān)控報(bào)警
題外話:
redis cluster不支持密碼問題
redis 原生cluster模式最新3.2版本都不支持開啟密碼認(rèn)證,導(dǎo)致內(nèi)網(wǎng)使用只能無密碼,只能通過前面其他安全設(shè)置來保證內(nèi)網(wǎng)redis cluster的安全性
針對之前redis版本,默認(rèn)無bind和密碼設(shè)置存在很大安全風(fēng)險(xiǎn),redis 3.2版本提出新特性protected mode,如果redis在啟動(dòng)時(shí),未開啟bind和密碼設(shè)置,只能通過本地回環(huán)地址本地訪問,如果嘗試遠(yuǎn)程訪問redis,會(huì)提示一下信息:
DENIED Redis is running protected mode because protected mode is enabled,
no bind address was specified, no authentication password is requested to clients.
In this mode connections are only accepted from the loopback interface.
當(dāng)然也可直接執(zhí)行CONFIG SET protected mode no關(guān)閉保護(hù)模式