本帖最后由 hyes 于 2024-6-2 02:35 编辑
L2TP IPSEC,通过ios测试,ipsec密钥是错误时候,日志会报错。一下是引用原始项目。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Now I changed configuration on Windows side and it’s become to such form: l2tp+ipsec encription (valid), proposal (valid), IPSec Secret (invalid) and user+password combination (invalid).
In such situation previous rules can't help, but next records were appearing in Mikrotik's logs. Five strings with: 192.168.1.15 parsing packet failed, possible couse: wrong password and one string with: phase1 negotiation failed due to time up 11.32.86.22[500]<=>192.168.1.15[500]
So I decided to write script to process first string and that's what I got:
https://github.com/Onoro/Mikrotik/blob/master/script1.rsc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
原始项目七年前的,就是流弊。自己稍微修改了,测试可用。
这边测试,一次链接会有七个日志。所以修改了原始项目的数字。这里大概是五次处罚会加入到l2黑名单防火墙地址列表。
至于计划任务以及raw或者filter如何搞。看个人。以下是脚本
- ## *********************************************************
- ## * Mikrotik L2TP protection. *
- ## * https://github.com/Onoro/Mikrotik/ *
- ## * *
- ## *********************************************************
- ## Protection of Ipsec identity-secret
- ## The original project address: https://github.com/Onoro/Mikrotik/blob/master/script1.rsc
- ## Modified by G.D. on 2024/06/02
- ## variables
- :local MachIpsecLogL;
- :local l2tpIpsecLog;
- :local IpsecAttackers;
- :local l2Attackerslist;
- :local l2WhiteList;
- :local IpsecAttackLogC;
- :set MachIpsecLogL 36;
- :set l2Attackerslist "l2tp-brutforce";
- :set l2WhiteList "WhiteList_l2tp";
- ## ------------------------------------------------------------------------------------------
- ## !!!! DO NOT CHANGE ANYTHING BELOW THIS LINE, IF YOU ARE NOT SURE WHAT YOU ARE DOING !!!!
- ## ------------------------------------------------------------------------------------------
- ## searching for "parsing packet failed, possible cause: wrong password" string in log.
- :if ( [ :tobool [ /log find where message~"^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+.*parsing packet failed, possible cause: wrong password" ] ] = true ) do={ \
- :set l2tpIpsecLog [ /log find where message~"^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+.*parsing packet failed, possible cause: wrong password" ]; \
- # :log info $l2tpIpsecLog; \
- } else={ \
- :log info "There isn't log-line that contain parsing packet failed, possible cause: wrong password. "; \
- :error "Error. There isn't log-line that contain 'parsing packet failed, possible cause: wrong password'. "; \
- }
- # walking through array
- foreach i in=$l2tpIpsecLog do={
- ## searching IP address of remote host
- :set IpsecAttackers [:pick [/log get $i message ] 0 ([:len [/log get $i message ]]-54)]
-
- ## execute if quantity of "parsing packet failed" records more than MachIpsecLogL variable
- :set IpsecAttackLogC [:len [/log find message~"^$IpsecAttackers.*parsing packet failed, possible cause: wrong password"]];
-
- if ($IpsecAttackLogC>=$MachIpsecLogL) do={
-
- ## execute if IP address isn't in firewall adress-list
- if ([:len [/ip firewall address-list find list="$l2Attackerslist" address=$IpsecAttackers]]=0 ) do={
- # supplementation IP to address-list
-
- if ([:len [/ip firewall address-list find list="$l2WhiteList" address=$IpsecAttackers]]=0 ) do={
- :log info ( $IpsecAttackLogC . " log containing <" . $IpsecAttackers . "~ parsing packet failed, possible cause: wrong password>." );
- :delay 2s;
- :log info ( "Add " . [:toip $IpsecAttackers] . " to list " . $l2Attackerslist . ", timeout-4h..."); \
- /ip firewall address-list add list="$l2Attackerslist" address=[:toip $IpsecAttackers] timeout=4h
- :delay 2s;
- # /tool e-mail send to="alerts@mail.srv" start-tls=tls-only subject="L2TP allert" body="$IpsecAttackers was blocked because of L2TP brutforce" server=[:resolve mail.srv]
- } else={
- :log info ( $IpsecAttackers . " is in the address-list " . $l2WhiteList . ".")
- }
-
- }
-
- }
- }
- # you have to change mail.srv to your valid smtp server and alerts@mail.srv to your valid mail address.
- # second step is to configure Tools>Email tool in Mikrotik menu via Winbox, ssh or web interface.
复制代码 |