Subversion Repositories php-qbpwcf

Rev

Rev 276 | Rev 284 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 276 Rev 278
Line 23144... Line 23144...
23144
					}#else end
23144
					}#else end
23145
 
23145
 
23146
				#如果同時間的計數達到3
23146
				#如果同時間的計數達到3
23147
				if($ipSameTimeCount===3){
23147
				if($ipSameTimeCount===3){
23148
 
23148
 
-
 
23149
					#初始化暫存的陣列
-
 
23150
					$tmp=array();
-
 
23151
					
-
 
23152
					#儲存資訊
-
 
23153
					$tmp["info"]=$infos;
-
 
23154
					
-
 
23155
					#儲存ip
-
 
23156
					$tmp["ip"]=$info["ip"];
-
 
23157
 
23149
					#取得有問題的IP
23158
					#取得有問題的IP
23150
					$ips[]=$info;
23159
					$ips[]=$tmp;
23151
 
23160
 
23152
					#換檢查下一個IP
23161
					#換檢查下一個IP
23153
					continue 2;
23162
					continue 2;
23154
 
23163
 
23155
					}#if end
23164
					}#if end
Line 23372... Line 23381...
23372
					}#else end
23381
					}#else end
23373
 
23382
 
23374
				#如果同時間的計數達到3
23383
				#如果同時間的計數達到3
23375
				if($ipSameTimeCount===3){
23384
				if($ipSameTimeCount===3){
23376
 
23385
 
-
 
23386
					#初始化暫存的陣列
-
 
23387
					$tmp=array();
-
 
23388
 
-
 
23389
					#取得事件資訊
-
 
23390
					$tmp["info"]=$infos;
-
 
23391
					
-
 
23392
					#取得ip
-
 
23393
					$tmp["ip"]=$info["ip"];
-
 
23394
 
23377
					#取得有問題的IP
23395
					#取得有問題的IP資訊
23378
					$ips_https[]=$info;
23396
					$ips_https[]=$tmp;
23379
 
23397
 
23380
					#換檢查下一個IP
23398
					#換檢查下一個IP
23381
					continue 2;
23399
					continue 2;
23382
 
23400
 
23383
					}#if end
23401
					}#if end
Line 23685... Line 23703...
23685
				$ip=$findSpecifyStrFormat["parsedVar"]["ip"];
23703
				$ip=$findSpecifyStrFormat["parsedVar"]["ip"];
23686
 
23704
 
23687
				#儲存原始的log行內容
23705
				#儲存原始的log行內容
23688
				$oriLog[$index]=$spiltMutiString["spiltString"][$index ]["oriStr"];
23706
				$oriLog[$index]=$spiltMutiString["spiltString"][$index ]["oriStr"];
23689
 
23707
 
23690
				#初始化儲存有問題的資訊
23708
				#初始化暫存的陣列
23691
				$info=array();
23709
				$tmp=array();
23692
 
-
 
23693
				#設置問題對應的log行內容
-
 
23694
				$info["log"]=$oriLog[$index];
-
 
23695
 
-
 
23696
				#設置問題時間點
-
 
23697
				$info["time"]=$occurTime[$index];
-
 
23698
 
23710
 
23699
				#記錄有問題的ip
23711
				#設置log、time
23700
				$info["ip"]=$ip;
23712
				$tmp["info"][]=array("log"=>$oriLog[$index],"time"=>$occurTime[$index]);
23701
 
23713
 
-
 
23714
				#設置問題ip
-
 
23715
				$tmp["ip"]=$ip;
-
 
23716
				
23702
				#取得所需的有問題的IP
23717
				#取得所需的有問題的IP
23703
				$ips_smtp[]=$info;
23718
				$ips_smtp[]=$tmp;
23704
 
23719
 
23705
				}#foreach end
23720
				}#foreach end
23706
 
23721
 
23707
			}#if end
23722
			}#if end
23708
 
23723
 
Line 23948... Line 23963...
23948
				#儲存疑似有問題的ip
23963
				#儲存疑似有問題的ip
23949
				$ips_named[$info["ip"]][]=$info;
23964
				$ips_named[$info["ip"]][]=$info;
23950
 
23965
 
23951
				}#foreach end
23966
				}#foreach end
23952
 
23967
 
23953
			/*
-
 
23954
 
-
 
23955
			#暫存可能有問題的ip資訊
-
 
23956
			$risky_ips=array();
-
 
23957
 
-
 
23958
			#針對每個ip
-
 
23959
			foreach($ips_named as $ip => $info){
-
 
23960
 
-
 
23961
				#如果同樣ip不到3次
-
 
23962
				if(count($ips_named[$ip])<3){
-
 
23963
 
-
 
23964
					#換看下個ip
-
 
23965
					continue;
-
 
23966
 
-
 
23967
					}#if end
-
 
23968
 
-
 
23969
				#儲存可能有問題的ip資訊
-
 
23970
				$risky_ips[]=$ips_named[$ip];
-
 
23971
 
-
 
23972
				}#foreach end
-
 
23973
 
-
 
23974
			*/
-
 
23975
 
-
 
23976
			#針對每個可能有問題ip的每個log行
23968
			#針對每個可能有問題ip的每個log行
23977
			foreach($ips_named as $ip => $infos){
23969
			foreach($ips_named as $ip => $infos){
23978
 
23970
 
23979
				#初始化記錄ip來訪不大於1分鐘的計數
23971
				#初始化記錄ip來訪不大於1分鐘的計數
23980
				$count=0;
23972
				$count=0;
23981
 
23973
 
-
 
23974
				#初始化記錄歷史log跟time
-
 
23975
				$history=array();
-
 
23976
 
23982
				#針對每個log行資訊
23977
				#針對每個log行資訊
23983
				foreach($infos as $index => $info){
23978
				foreach($infos as $index => $info){
23984
 
23979
 
23985
					#unixtime
23980
					#unixtime
23986
					$time=strtotime($info["time"]);
23981
					$time=strtotime($info["time"]);
Line 24004... Line 23999...
24004
 
23999
 
24005
						}#if end
24000
						}#if end
24006
 
24001
 
24007
					#計數+1
24002
					#計數+1
24008
					$count++;
24003
					$count++;
-
 
24004
					
-
 
24005
					#記錄歷史資訊
-
 
24006
					$history[]=array("time"=>$time,"log"=>$info["log"]);
24009
 
24007
 
24010
					}#foreach end
24008
					}#foreach end
24011
 
24009
 
24012
				#如果有達到3次
24010
				#如果有達到3次
24013
				if($count>=3){
24011
				if($count>=3){
24014
 
24012
 
-
 
24013
					#初始化暫存的陣列
-
 
24014
					$tmp=array();
-
 
24015
					
-
 
24016
					#設置ip
-
 
24017
					$tmp["ip"]=$ip;
-
 
24018
					
-
 
24019
					#設置info
-
 
24020
					$tmp["info"]=$history;
-
 
24021
 
24015
					#記錄攻擊者的IP
24022
					#記錄攻擊者的IP
24016
					$attacker_ips_namd[]=$ip;
24023
					$attacker_ips_namd[]=$ip;
24017
 
24024
 
24018
					}#if end
24025
					}#if end
24019
 
24026
 
Line 24487... Line 24494...
24487
			}#foreach end
24494
			}#foreach end
24488
 
24495
 
24489
		#針對每個可能有問題ip的每個log行
24496
		#針對每個可能有問題ip的每個log行
24490
		foreach($risky_ips as $ip => $infos){
24497
		foreach($risky_ips as $ip => $infos){
24491
 
24498
 
-
 
24499
			#初始化暫存歷史資訊的陣列
-
 
24500
			$history=array();
-
 
24501
 
24492
			#初始化記錄ip來訪不大於1分鐘的計數
24502
			#初始化記錄ip來訪不大於1分鐘的計數
24493
			$count=0;
24503
			$count=0;
24494
 
24504
 
24495
			#針對每個log行資訊
24505
			#針對每個log行資訊
24496
			foreach($infos as $index => $info){
24506
			foreach($infos as $index => $info){
Line 24518... Line 24528...
24518
					}#if end
24528
					}#if end
24519
 
24529
 
24520
				#計數+1
24530
				#計數+1
24521
				$count++;
24531
				$count++;
24522
 
24532
 
-
 
24533
				#記錄該次事件資訊
-
 
24534
				$history[]=array("time"=>$time,"log"=>$info["log"]);
-
 
24535
 
24523
				}#foreach end
24536
				}#foreach end
24524
 
24537
 
24525
			#如果有達到3次
24538
			#如果有達到3次
24526
			if($count>=3){
24539
			if($count>=3){
24527
 
24540
 
-
 
24541
				#初始化陣列
-
 
24542
				$tmp=array();
-
 
24543
 
-
 
24544
				#記錄ip
-
 
24545
				$tmp["ip"]=$ip;
-
 
24546
 
-
 
24547
				#記錄歷史資訊
-
 
24548
				$tmp["info"]=$history;
-
 
24549
 
24528
				#記錄攻擊者的IP
24550
				#記錄攻擊者的IP
24529
				$attacker_ips_imap[]=$ip;
24551
				$attacker_ips_imap[]=$ip;
24530
 
24552
 
24531
				}#if end
24553
				}#if end
24532
 
24554
 
Line 24847... Line 24869...
24847
			}#foreach end
24869
			}#foreach end
24848
 
24870
 
24849
		#針對每個可能有問題ip的每個log行
24871
		#針對每個可能有問題ip的每個log行
24850
		foreach($risky_ips as $ip => $infos){
24872
		foreach($risky_ips as $ip => $infos){
24851
 
24873
 
-
 
24874
			#初始化暫存歷史記錄的陣列
-
 
24875
			$history=array();
-
 
24876
 
24852
			#初始化記錄ip來訪不大於1分鐘的計數
24877
			#初始化記錄ip來訪不大於1分鐘的計數
24853
			$count=0;
24878
			$count=0;
24854
 
24879
 
24855
			#針對每個log行資訊
24880
			#針對每個log行資訊
24856
			foreach($infos as $index => $info){
24881
			foreach($infos as $index => $info){
Line 24877... Line 24902...
24877
 
24902
 
24878
					}#if end
24903
					}#if end
24879
 
24904
 
24880
				#計數+1
24905
				#計數+1
24881
				$count++;
24906
				$count++;
-
 
24907
				
-
 
24908
				#記錄該次記錄
-
 
24909
				$history[]=array("time"=>$time,"log"=>$info["log"]);
24882
 
24910
 
24883
				}#foreach end
24911
				}#foreach end
24884
 
24912
 
24885
			#如果有達到3次
24913
			#如果有達到3次
24886
			if($count>=3){
24914
			if($count>=3){
24887
 
24915
 
-
 
24916
				#初始化暫存的陣列
-
 
24917
				$tmp=array();
-
 
24918
				
-
 
24919
				#取得資訊
-
 
24920
				$tmp["info"]=$history;
-
 
24921
				
-
 
24922
				#取得問題ip
-
 
24923
				$tmp["ip"]=$ip;
-
 
24924
 
24888
				#記錄攻擊者的IP
24925
				#記錄攻擊者的IP
24889
				$attacker_ips_ssh[]=$ip;
24926
				$attacker_ips_ssh[]=$tmp;
24890
 
24927
 
24891
				}#if end
24928
				}#if end
24892
 
24929
 
24893
			}#foreach end
24930
			}#foreach end
24894
 
24931
 
Line 24923... Line 24960...
24923
			#回傳結果
24960
			#回傳結果
24924
			return $result;
24961
			return $result;
24925
 
24962
 
24926
			}#if end
24963
			}#if end
24927
 
24964
 
24928
		#取得不重複的IP
24965
		#取得不重複服務事件的IP
24929
		$ips=$mergeArray["content"];
24966
		$ipEvents=$mergeArray["content"];
24930
 
24967
 
24931
		#取得防火牆的IP block清單
24968
		#取得防火牆的IP block清單
24932
		#cmd:firewall-cmd --list-rich-rule
24969
		#cmd:firewall-cmd --list-rich-rule
24933
 
24970
 
24934
		#函式說明:
24971
		#函式說明:
Line 25045... Line 25082...
25045
				}#for end
25082
				}#for end
25046
 
25083
 
25047
			}#if end
25084
			}#if end
25048
 
25085
 
25049
		#儲存有問題的IP資訊陣列
25086
		#儲存有問題的IP資訊陣列
25050
		#$ips;
25087
		#$ipEvents;
25051
 
25088
 
25052
		#儲存已封鎖IP的陣列
25089
		#儲存已封鎖IP的陣列
25053
		#$ips_blocked;
25090
		#$ips_blocked;
25054
 
25091
 
25055
		#初始化要封鎖的ip資訊
25092
		#初始化要封鎖的ip資訊
25056
		$ips_to_block=array();
25093
		$ips_to_block=array();
25057
 
25094
 
25058
		#留下未阻擋的有問題IP
25095
		#留下未阻擋的有問題IP
25059
 
25096
 
25060
		#針對每個有問題的ip資訊
25097
		#針對每個有問題的ip資訊
25061
		foreach($ips as $info){
25098
		foreach($ipEvents as $info){
25062
 
25099
 
25063
			#函式說明:
25100
			#函式說明:
25064
			#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
25101
			#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
25065
			#回傳結果:
25102
			#回傳結果:
25066
			#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
25103
			#$result["status"],"true"表示執行正確,"false"表示執行錯誤.