最近看到說redis,memcached服務器安全的問題,想想也是,使用這兩種服務N年了,由於歷史問題吧,工作中基本是以memcached為主,后來才慢慢引入運用redis.
由於memcached是沒有安全認證的,不像redis一樣,可以配置認證,也就是AUTH,設置密碼.
以下說下自己工作中常用的安全方法,
先說memcached,
一般自己這些年,都是單台的memcached,所以,直接用內網訪問,這個倒方法設置
第二種,也不復制,就是在防火牆上下功能,只給指定的IP訪問
ps:其實,自從用上了memcached,就有點丟不了,先說自己的工作經歷吧,項目基本是基於MVC思想,
有一次是項目重構,重構前, VC是用PHP的,Model是用C#,這樣的問題來了,C#那邊基本能用memcached的地方,都用,
包括產品基本信息,產品詳情,產品評論,供應商信息,訂單的詳情。。。。,PHP每次去取數據時,C#那方面說的,基本先從
memcached中拿的,他們從數據庫中拿到數據后,放在memcached,這里,他們把memcached和C#放在同一個服務器,
也即放在內網了,后來轉移到PHP時,調試了許久,因為在項目重構時,得與之前的數據對應,所以就得調用memcached中的數據對應,
PHP這里有自己的memcached,所以這樣壓抑了半天,才想起,原來是那邊的memcached的訪問限制問題
第二次實現項重構時,這次是運維搞的,又花了半天時間,才知道,是怎么回來,項目重構前全部用PHP,重構后用,PHP連接db,然后給數據java,
java再給客戶端(app,ios),這里的問題是,java層的數據是基於PHP的,java作中間層,同時,app,ios有時候得調用PHP中的接口,也就是wap頁面,這樣問題又來了
java,php,wap,app/ios都是放在不同的服務器,PHP接口也放在內網的memcached,wap中也有memcached,也是內網中,app/ios的token,是保存在php中的memcached的,
wap中的memcached是在wap,運維搞了兩台memcached,半天后,問他,才知道,后來只好用防火牆,這樣才能順利調用
利用memcached是項目歷史的原因,大家都習慣了,所以不想換,到后來,涉及到新的功能后,和領導商量,之前的歷史就歷史吧,
現在新功能,利用redis,memcached能做的,redis可以勝任,但是redis的,memcached好多無法做到,比如持久化,多種數據類型.
由於項目后期會大力推廣,所以,把之前的session相關信息不放數據庫,放內存了,也許是歷史原因,沒有放在redis,只放memcached,
當自己作產品業務功能時,對商品評論數,瀏覽數,收藏數,所以此時自己力推redis,這樣再作定時入庫處理,即用消息隊列來實現,方便無壓力,又安全.
防火牆使用示例:
vim /etc/sysconfig/iptables
#開放指定的端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 端口號 -j ACCEPT
#禁止端口號
-I INPUT -p tcp --dport 端口號 -j DROP
#給指定的IP開放指定的端口
-I INPUT -s ip地址 -p tcp --dport 端口號 -j ACCEPT
-I INPUT -s ip地址 -p tcp --dport 端口號 -j ACCEPT
#如果是允許指定的IP訪問指定的端口,則先禁止此端口,然后再開放給指定的ip,順序不能亂
本地連接redis服務器
redis-cli -h 主機名 -p 端口號
停止
redis-cli -h 主機名 -p 端口號 shutdown
