解決方法:
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"); }