Community discussions

MikroTik App
 
sstybel
just joined
Topic Author
Posts: 6
Joined: Fri Jun 05, 2020 10:13 pm
Location: Poland

VPN Script - Sometimes scripts work fine sometimes doesn’t.

Wed May 19, 2021 5:27 pm

Hi everyone,
I've got some scripts which check logs and looking for error login via VPN.
Sometimes scripts work fine sometimes doesn’t.
Problem appears when I run script manually and from scheduler.
I add some delays between lines, but it isn't resolved problem.
Below it's example script
:local funcEpochTime do={
	# Usage
	# $funcEpochTime [time input]
	# -----
	# Get current time
	# :put [$funcEpochTime]
	# 
	# Read log time in one of these two format "may/01 16:23:50" or "12:02:23" for log number *323
	# :put [$funcEpochTime [:log get *323 time]]

	:local ds
	:local ts
	if ([:len $1]=0) do={
		:set ds [/system clock get date]
		:set ts [/system clock get time]
	} else={
		if ([:len $1]>8) do={
			if ([:len $1]>15) do={
				:set ds "$[:pick $1 0 11]"
				:set ts [:pick $1 12 20]
			} else={
				:set ds "$[:pick $1 0 6]/$[:pick [/system clock get date] 7 11]"
				:set ts [:pick $1 7 15]
			}
		} else={
			:set ds [/system clock get date]
			:set ts $1
		}
	}
	:local months
	:if ((([:pick $ds 9 11]-1)/4) != (([:pick $ds 9 11])/4)) do={

		:set months {"an"=0;"eb"=31;"ar"=60;"pr"=91;"ay"=121;"un"=152;"ul"=182;"ug"=213;"ep"=244;"ct"=274;"ov"=305;"ec"=335}
	} else={
		:set months {"an"=0;"eb"=31;"ar"=59;"pr"=90;"ay"=120;"un"=151;"ul"=181;"ug"=212;"ep"=243;"ct"=273;"ov"=304;"ec"=334}
	}
	:set ds (([:pick $ds 9 11]*365)+(([:pick $ds 9 11]-1)/4)+($months->[:pick $ds 1 3])+[:pick $ds 4 6])
	:set ts (([:pick $ts 0 2]*60*60)+([:pick $ts 3 5]*60)+[:pick $ts 6 8])
	:return ($ds*24*60*60 + $ts + 946684800 - [/system clock get gmt-offset])
}

:local FromEmail "mailfrom@domain";
:local ToEmail "mailto@domain";
:local sLogsOlderThen 1200;
:local date [/system clock get date];
:local months {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"=11;"dec"=12};
:local day [:pick $date 4 6];
:local year [:pick $date 7 11];
:local month [:pick $date 0 3];
:local mm (:$months->$month);
:local Data "$year-$mm-$day";
:local NameRAS [/system identity get name];
:local Czas [/system clock get time];
:local hh [:pick $Czas 0 2];
:local min [:pick $Czas 3 5];
:local ss [:pick $Czas 6 8];
:local chkTime ([$funcEpochTime] - $sLogsOlderThen);
:delay 500ms;
:local AllIPs "";
:local ipsarr ({});
:local logarr ({});
:local loglist [:toarray [/log find (message~"^VPN-ERR:" && message~"authentication failed\$" && message~">: user")]];
:delay 500ms;
:foreach i in=$loglist do={
	:local logMessage [/log get $i message];
	:local logTimeVal [/log get $i time];
	:local logTime [$funcEpochTime [/log get $i time]];
	:delay 500ms;
	:local ip [:pick $logMessage ([:find $logMessage "<"] + 1) [:find $logMessage ">"]];
	:local userlogin [:pick $logMessage ([:find $logMessage ": user "] + 7) [:find $logMessage " authentication"]];
	#:log info "$logTimeVal == $chkTime < $logTime";
	:delay 500ms;
	:if ($chkTime < $logTime) do={
		:if ([:len $ipsarr]>0) do={
			:local itis [:find $ipsarr $ip];
			:if ([:type $itis]="nil") do={
				:set ($ipsarr->[:len $ipsarr]) "$ip";
				:set ($logarr->[:len $logarr]) "$userlogin ($ip)";
			}
		} else={
			:set ($ipsarr->[:len $ipsarr]) "$ip";
			:set ($logarr->[:len $logarr]) "$userlogin ($ip)";
		}
	}
}
:foreach vlo in=$logarr do={
	:if ([:len $AllIPs]>0) do={
		:set AllIPs ($AllIPs . ", $vlo");
	} else={
		:set AllIPs ("" . "$vlo");
	}
	:delay 50ms;
}
:foreach vip in=$ipsarr do={
	:delay 100ms;
	/ip firewall address-list add address=$vip list=BLOCK_SCRIPT_VPN_ERR_USER_CONNECTIONS timeout=7d;
}
:if ([:len $AllIPs]>0) do={
	:delay 5s;
	/tool e-mail send user="$FromEmail" from="$FromEmail" to="$ToEmail" subject="[ $NameRAS ] - VPN-ERR - Blokada blednych logowan VPN [$Data, $Czas]" body="Blokada blednych logowan VPN dla kont/a: $AllIPs na [ $NameRAS ] o godzinie $Czas w dniu $Data na okres 7 dni.";
}
Any idea ?

Who is online

Users browsing this forum: No registered users and 18 guests