java介面如何有效防止惡意請求
阿新 • • 發佈:2020-10-14
解決方法:
1.在redis資料庫db0中新建一個名為rd_sms_request_count表,表結構:
Ip:客戶請求的ip
Success_count:成功次數
Failure_count:失敗次數
Is_close:是否已經加入到防火牆黑名單,1是 0否 ,預設0
2.結合業務,判單哪個ip是惡意的,每當一個ip訪問介面,按照程式碼返回碼,如果是都是錯誤請求,新增到redis資料庫中的Failure_count欄位加1,如果都是返回正確結果,那麼Success_count加1,Java後臺啟動一個執行緒,每天統計一次rd_sms_request_count,先刪除rd_sms_request_coun表的Success_count大於0的記錄,證明這個ip是正常使用者;如果Success_count等於0而且Failure_count大於10000(規則可自定義)就通過java程式碼把這個ip加入到iptables黑名單中,加入到iptables黑名單中的記錄設定為1。
3.把滿足條件的ip加入到iptables黑名單中核心程式碼(在linux測試過可以)
String[] cmd = new String[] { "/bin/sh", "-c", "iptables -I INPUT -s 211.1.0.24 -j DROP;iptables -I INPUT -s 211.1.0.25 -j DROP" }; try { Runtime.getRuntime().exec(cmd); } catch (Exception e) { e.printStackTrace(); }finally { Runtime.getRuntime().exec("service iptables save"); }