,此時(shí),可以反向代理到一個(gè)驗(yàn)證碼網(wǎng)頁(yè),讓用戶通過(guò)客戶端輸入驗(yàn)證碼。如果輸入了驗(yàn)證碼,獲取到驗(yàn)證碼后進(jìn)行安全驗(yàn)證。
[0100]步驟S302:驗(yàn)證碼是否驗(yàn)證通過(guò)。
[0101 ] 當(dāng)驗(yàn)證碼驗(yàn)證通過(guò)時(shí),執(zhí)行步驟S303 ;當(dāng)驗(yàn)證碼驗(yàn)證不通過(guò)時(shí),執(zhí)行步驟S304。
[0102]步驟S303:當(dāng)驗(yàn)證碼驗(yàn)證通過(guò)時(shí),將該IP地址暫時(shí)標(biāo)記為沒(méi)有攻擊的IP地址。
[0103]當(dāng)驗(yàn)證碼驗(yàn)證通過(guò)時(shí),說(shuō)明該remote ip不是攻擊IP地址,驗(yàn)證碼后端把該IP地址同步到storm輔助服務(wù),storm輔助服務(wù)處記錄該remote ip為沒(méi)有攻擊的IP地址(即白名單)一段時(shí)間且調(diào)用del接口刪掉對(duì)該IP地址為攻擊IP地址的相應(yīng)block規(guī)則。
[0104]步驟S304:當(dāng)驗(yàn)證碼驗(yàn)證不通過(guò)時(shí),將該IP地址暫時(shí)標(biāo)記為有攻擊的IP地址。
[0105]當(dāng)驗(yàn)證碼驗(yàn)證不通過(guò)時(shí),說(shuō)明該remote ip是有攻擊IP地址,驗(yàn)證碼后端把該IP地址同步到storm輔助服務(wù),storm輔助服務(wù)處記錄該remote ip為有攻擊的IP地址一段時(shí)間。
[0106]步驟S305:當(dāng)暫時(shí)標(biāo)記的有效時(shí)間到期時(shí),重新觸發(fā)對(duì)該IP地址攻擊性確定,并根據(jù)確定結(jié)果設(shè)置相應(yīng)的阻止規(guī)則。
[0107]例如:被暫時(shí)標(biāo)記為沒(méi)有攻擊的IP地址后,如果一段時(shí)間沒(méi)輸入驗(yàn)證碼,即被設(shè)定為沒(méi)有攻擊的IP地址一段時(shí)間后,storm分析nginx的訪問(wèn)日志文件會(huì)再次觸發(fā)對(duì)該remote ip 的 block 設(shè)詈。
[0108]實(shí)施例四
[0109]圖4所述為本實(shí)施例中提供的網(wǎng)站安全訪問(wèn)實(shí)現(xiàn)原理圖。其中,虛線代表的是用戶請(qǐng)求數(shù)據(jù)流,實(shí)線代表的是規(guī)則設(shè)置和調(diào)用的數(shù)據(jù)流。
[0110]本發(fā)明的方法在具體實(shí)現(xiàn)時(shí),相當(dāng)于設(shè)置了一個(gè)新的模塊,本模塊能夠?qū)崿F(xiàn)動(dòng)態(tài)的阻止規(guī)則設(shè)置和訪問(wèn)驗(yàn)證。
[0111]通過(guò)在配置文件中設(shè)置‘sae_limit_cache_zone_size xxx ; ’申請(qǐng)一塊選定大小為的共享內(nèi)存,初始化為近期最少使用算法(Least Recently Used,LRU)的紅黑樹(shù)。通過(guò)在配置文件中設(shè)置‘sae_limit_ip ; ’提供阻止規(guī)則的查詢、刪除設(shè)置接口。其中,‘sae_1 imit_cache_zone_size xxx ; ’是配置文件指令,含義是申請(qǐng)一塊大小為xxx的內(nèi)存,用來(lái)存放規(guī)則。‘sae_limit_ip ; ’也是配置文件指令,含義是設(shè)置阻止規(guī)則所要限制的IP地址。
[0112]當(dāng)storm接口或者網(wǎng)絡(luò)管理員調(diào)用set規(guī)則接口時(shí),某個(gè)進(jìn)程接到這個(gè)調(diào)用請(qǐng)求后解析該set規(guī)則的參數(shù),即IP地址是一個(gè)網(wǎng)段還是單IP地址,如果是一個(gè)網(wǎng)段,解析出網(wǎng)絡(luò)號(hào)、起始主機(jī)號(hào)和結(jié)束主機(jī)號(hào)。判斷是否設(shè)置了有效時(shí)長(zhǎng),如果沒(méi)設(shè)置取默認(rèn)值,是否設(shè)置了阻止動(dòng)作,如果沒(méi)設(shè)置默認(rèn)為空。
[0113]鎖定(lock)共享內(nèi)存后,通過(guò)網(wǎng)絡(luò)號(hào)或者單IP地址為關(guān)鍵字(key)查找紅黑樹(shù)節(jié)點(diǎn)(rbtree node),如果找到了 rbtree node,更新該阻止規(guī)則的失效時(shí)間、阻止動(dòng)作等,如果阻止動(dòng)作為空且節(jié)點(diǎn)的動(dòng)作是verify,更新為deny。如果沒(méi)找到malloc (分配內(nèi)存的函數(shù))一個(gè)rbtree node,如果分配的共享內(nèi)存已經(jīng)用完,釋放掉一個(gè)或者兩個(gè)甚至更多的規(guī)則失效的節(jié)點(diǎn)后再次malloc —個(gè)rbtree node。把解析后的參數(shù)設(shè)置到紅黑樹(shù)節(jié)點(diǎn)上插入到紅黑樹(shù)后返回成功。如果動(dòng)作為空即set規(guī)則時(shí)沒(méi)有指定該規(guī)則的動(dòng)作,那么默認(rèn)為verify。當(dāng)storm接口或者網(wǎng)絡(luò)管理員調(diào)用提供的del規(guī)則接口時(shí),某個(gè)進(jìn)程接到這個(gè)請(qǐng)求后解析該del規(guī)則的參數(shù),根據(jù)參數(shù)的網(wǎng)絡(luò)號(hào)或者單IP地址鎖定共享內(nèi)存查找到紅黑樹(shù)上的該節(jié)點(diǎn)刪除后返回成功。如果網(wǎng)絡(luò)管理員調(diào)用本模塊提供的get規(guī)則接口時(shí),本模塊某個(gè)進(jìn)程接受到請(qǐng)求,遍歷共享內(nèi)存紅黑樹(shù)的規(guī)則節(jié)點(diǎn),判斷還生效的規(guī)則,拼成JS0N格式返回。JS0N(JavaScript Object Notat1n)是一種輕量級(jí)的數(shù)據(jù)交換格式。
[0114]本發(fā)明中通過(guò)在配置文件中的下列語(yǔ)句設(shè)置阻止規(guī)則的相關(guān)動(dòng)作:‘if($sae_limit_act ?“verify,,) {proxy_pass http://xxx.php ;} if ($sae_limit_act ?“deny,,){return 404 ;}’,該語(yǔ)句含義是如果是verify就反向代理到一個(gè)驗(yàn)證碼頁(yè)面;如果是deny就返回404頁(yè)面不存在,或者在nginx可以直接返回444.代表直接斷開(kāi)鏈接。每一個(gè)網(wǎng)站訪問(wèn)請(qǐng)求到來(lái)的時(shí)候,根據(jù)網(wǎng)站訪問(wèn)請(qǐng)求的remote ip解析后查找共享內(nèi)存的紅黑樹(shù)是否有生效的阻止規(guī)則,如果有設(shè)置阻止動(dòng)作的值,則根據(jù)設(shè)置語(yǔ)句$Sae_limit_act的值執(zhí)行對(duì)應(yīng)的動(dòng)作,如果沒(méi)有則默認(rèn)為“allow”。Nginx系統(tǒng)根據(jù)$sae_limit_act的值以及設(shè)置的真正的動(dòng)作(proxy return)決定對(duì)該請(qǐng)求的處理。
[0115]服務(wù)器的前段部署了 nginx系統(tǒng)+限制IP (limit ip)模塊的集群,作為整個(gè)網(wǎng)站的前端反向代理模塊。后面通過(guò)flume把前端nginx反向代理的請(qǐng)求日志推送到kafka里,storm通過(guò)實(shí)時(shí)的分析kafka中的日志,來(lái)確定出攻擊IP地址或者被攻擊的域名。當(dāng)分析出有攻擊的IP或域名時(shí),通過(guò)調(diào)用規(guī)則網(wǎng)絡(luò)接口(rules web api),把規(guī)則傳遞過(guò)來(lái),規(guī)則網(wǎng)絡(luò)接口通過(guò)過(guò)濾白名單后把規(guī)則同步到前端的多臺(tái)nginx+1 imit ip模塊的共享內(nèi)存。當(dāng)有remote ip再次請(qǐng)求時(shí),限制IP模塊通過(guò)查找比對(duì)remote ip和共享內(nèi)存的規(guī)則,從而對(duì)該請(qǐng)求做相應(yīng)的處理。
[0116]如果阻止動(dòng)作是‘verify’,說(shuō)明storm模塊并不確定該remote ip是cc攻擊(或者說(shuō)是機(jī)器人請(qǐng)求),那么該網(wǎng)站訪問(wèn)請(qǐng)求就會(huì)被反向代理到驗(yàn)證碼服務(wù),為用戶返回一個(gè)驗(yàn)證碼頁(yè)面,當(dāng)用戶輸入正確的驗(yàn)證碼后跳轉(zhuǎn)到用戶請(qǐng)求的頁(yè)面,同時(shí)驗(yàn)證碼服務(wù)需要把該remote ip設(shè)置到規(guī)則網(wǎng)絡(luò)接口服務(wù),作為白名單規(guī)則且有效時(shí)長(zhǎng)為一小時(shí),規(guī)則網(wǎng)絡(luò)接口會(huì)調(diào)用限制IP模塊的del接口,刪掉該remote ip的規(guī)則。當(dāng)storm的規(guī)則傳遞請(qǐng)求再有該remote ip的規(guī)則時(shí),會(huì)驗(yàn)證該remote ip是否屬于白名單,如果屬于白名單就再調(diào)用限制IP模塊的set接口設(shè)置規(guī)則。如果在verify規(guī)則有效時(shí)間內(nèi)沒(méi)有輸入正確的驗(yàn)證碼,而storm模塊又傳遞了該remote ip的不確定動(dòng)作的規(guī)則,那么在限制IP模塊會(huì)直接設(shè)置該remote ip的規(guī)則對(duì)應(yīng)的動(dòng)作為‘deny’。
[0117]如果阻止動(dòng)作是‘deny’,說(shuō)明storm模塊或限制IP模塊已經(jīng)確定該remote ip是攻擊ip,前端nginx直接返回403 (禁止訪問(wèn))或者444 (斷開(kāi)鏈接).
[0118]如果阻止動(dòng)作是‘a(chǎn)llow’,說(shuō)明沒(méi)有匹配的規(guī)則,是正常的請(qǐng)求,反向代理到后端服務(wù)。
[0119]網(wǎng)絡(luò)管理員也可以直接調(diào)用limit ip mod提供的接口設(shè)置、查找、刪除規(guī)則。
[0120]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供一種網(wǎng)站安全訪問(wèn)實(shí)現(xiàn)裝置,其結(jié)構(gòu)如圖5所示,包括:設(shè)置模塊501、接收模塊502、判斷模塊503和執(zhí)行模塊504。
[0121]設(shè)置模塊501,用于根據(jù)訪問(wèn)日志文件對(duì)有攻擊的IP地址和可能有攻擊的IP地址設(shè)置阻止規(guī)則。
[0122]接收模塊502,用于接收用戶發(fā)送的網(wǎng)站訪問(wèn)請(qǐng)求。
[0123]判斷模塊503,用于根據(jù)網(wǎng)站訪問(wèn)請(qǐng)求中包括的IP地址和設(shè)置模塊501中根據(jù)訪問(wèn)日志文件設(shè)置的阻止規(guī)則,判斷該IP地址是否是有攻擊的IP地址或可能有攻擊的IP地址。
[0124]執(zhí)行模塊504,用于當(dāng)判斷出發(fā)送網(wǎng)站訪問(wèn)請(qǐng)求的IP地址不是有攻擊的IP地址和可能有攻擊的IP地址,允許訪問(wèn)網(wǎng)站;當(dāng)判斷出發(fā)送網(wǎng)站訪問(wèn)請(qǐng)求的IP地址是有攻擊的IP地址,拒絕訪問(wèn)網(wǎng)站;當(dāng)判斷出發(fā)送網(wǎng)站訪問(wèn)請(qǐng)求的IP地址是可能有攻擊的IP地址,向用戶獲取驗(yàn)證碼進(jìn)行安全驗(yàn)證,當(dāng)驗(yàn)證碼驗(yàn)證通過(guò)時(shí),允許訪問(wèn)網(wǎng)站;當(dāng)驗(yàn)證碼驗(yàn)證不通過(guò)時(shí),拒絕訪問(wèn)網(wǎng)站。
[0125]優(yōu)選的,上述設(shè)置模塊501,具體用于:實(shí)時(shí)或周期性獲取網(wǎng)站的訪問(wèn)日志文件;根據(jù)所述訪問(wèn)日志文件,確定有攻擊IP地址和可能有攻擊的IP地址,對(duì)有攻擊的IP地址和可能有攻擊的IP地址設(shè)置相應(yīng)的阻止規(guī)則。
[0126]優(yōu)選的,上述設(shè)置模塊501,具體用于:對(duì)有攻擊的IP地址和可能有攻擊的IP地址分別設(shè)置對(duì)應(yīng)的阻止動(dòng)作和有效時(shí)長(zhǎng);其中,有攻擊的IP地址和可能有攻擊的IP地址的阻止動(dòng)作分別為拒絕訪問(wèn)和需要判定。
[0127]優(yōu)選的,上述設(shè)置模塊501,具體用于:當(dāng)驗(yàn)證碼驗(yàn)證通過(guò)時(shí),將該IP地址暫時(shí)標(biāo)記為沒(méi)有攻擊的IP地址;當(dāng)驗(yàn)證碼驗(yàn)證不通過(guò)時(shí),將該IP地址暫時(shí)標(biāo)記為有攻擊的IP地址;
[0128]當(dāng)暫時(shí)標(biāo)記的有效時(shí)間到期時(shí),重新觸發(fā)對(duì)該IP地址攻擊性確定,并根據(jù)確定結(jié)果設(shè)置相應(yīng)的阻止規(guī)則。
[0129]優(yōu)選的,上述設(shè)置模塊501