Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 26
- Зарегистрирован: 22 мар 2017, 12:26
Тема интересная, подпишусь. Сейчас есть одиночные попытки подключения L2TP но пока вижу максимум две попытки, единственное что перед сервером стоит kerio и тоже неплохо режет в том числе по geoip по направлениям откуда мы точно не ждем гостей.
- drpioneer
- Сообщения: 144
- Зарегистрирован: 30 май 2013, 10:20
Снова приветствую всех!
Обратил внимание на серьезную загрузку процессора во время работы скрипта при обработке большого количества записей в log-файле после неудачных атак на роутер. По этой причине была пересмотрена логика работы скрипта. Очередной вариант скрипта стал еще суровей: теперь если была попытка несанкционированного доступа -> сразу отправляем в черный список и не тратим ресурсы роутера на бережный пересчёт количества попыток злоумышленника подключиться.
Замечания и улучшения приветствуются.
Обратил внимание на серьезную загрузку процессора во время работы скрипта при обработке большого количества записей в log-файле после неудачных атак на роутер. По этой причине была пересмотрена логика работы скрипта. Очередной вариант скрипта стал еще суровей: теперь если была попытка несанкционированного доступа -> сразу отправляем в черный список и не тратим ресурсы роутера на бережный пересчёт количества попыток злоумышленника подключиться.
Код: Выделить всё
# Script for blocking dangerous addresses that tried to connect to the router
# https://forummikrotik.ru/viewtopic.php?t=4781&start=20
# tested on ROS 6.46.5
# updated 2020/05/28
# ----------- Stage 1 - search for a device login attempt -----------
foreach routerUser in=[ /user find disabled=no; ] do={
do {
foreach dangerString in=[ /log find message~"login failure for user"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "from" ] - 1) ]);
:local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :find $stringTemp "via" ] - 1) ]);
:local dangerVia ([ :pick $stringTemp ([ :find $stringTemp "via" ]) ([ :find $stringTemp "via" ] + 20)]);
if ($routerUser != $dangerUser) do={
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong router user '".$dangerUser."' ".$dangerVia.")");
}
}
} on-error={ :log warning ">>> Script error. Not found string 'login failure for user' in log."; }
}
} on-error={ :log warning ">>> Script error. Not found active router user."; }
}
# ----------- Stage 2 - search for an attempt to enter through IPSec password -----------
foreach dangerString in=[ /log find message~"parsing packet failed, possible cause: wrong password"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "parsing" ] - 1) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec password)");
}
} on-error={ :log warning ">>> Script error. Not found string 'parsing packet failed, possible cause: wrong password' in log."; }
}
# ----------- Stage 3 - search for an attempt to enter through IPSec proposal -----------
foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "failed" ] - 1) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec proposal)");
}
} on-error={ :log warning ">>> Script error. Not found string 'failed to get valid proposal' in log."; }
}
# ----------- Stage 4 - search for an attempt to enter through L2TP -----------
foreach dangerString in=[ /log find message~"user" message~"authentication failed"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
:local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "<" ] + 1) ([ :find $stringTemp ">" ]) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong L2TP user '".$dangerUser."')");
}
} on-error={ :log warning ">>> Script error. Not found string 'user' & 'authentication failed' in log."; }
}
-
- Сообщения: 4
- Зарегистрирован: 27 июл 2020, 13:47
Надо еще добавить, чтобы в BlockDangerAddress добавлялись адреса с сообщений типа denied winbox/dude connect from 115.74.2.191
- drpioneer
- Сообщения: 144
- Зарегистрирован: 30 май 2013, 10:20
У себя в журналах таких сообщений не встречал, но по вашей просьбе добавил дополнительную проверку:evgeniy.demin писал(а): ↑27 июл 2020, 13:49 Надо еще добавить, чтобы в BlockDangerAddress добавлялись адреса с сообщений типа denied winbox/dude connect from 115.74.2.191
Код: Выделить всё
# Script for blocking dangerous addresses that tried to connect to the router
# https://forummikrotik.ru/viewtopic.php?t=4781&start=20
# tested on ROS 6.47
# updated 2020/08/27
# ----------- Stage 1 - search for a device login attempt -----------
foreach routerUser in=[ /user find disabled=no; ] do={
do {
foreach dangerString in=[ /log find message~"login failure for user"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "from" ] - 1) ]);
:local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :find $stringTemp "via" ] - 1) ]);
:local dangerVia ([ :pick $stringTemp ([ :find $stringTemp "via" ]) ([ :find $stringTemp "via" ] + 20)]);
if ($routerUser != $dangerUser) do={
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong router user '".$dangerUser."' ".$dangerVia.")");
}
}
} on-error={ :log warning ">>> Script error. Not found string 'login failure for user' in log."; }
}
} on-error={ :log warning ">>> Script error. Not found active router user."; }
}
# ----------- Stage 2 - search for an attempt to enter through IPSec password -----------
foreach dangerString in=[ /log find message~"parsing packet failed, possible cause: wrong password"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "parsing" ] - 1) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec password)");
}
} on-error={ :log warning ">>> Script error. Not found string 'parsing packet failed, possible cause: wrong password' in log."; }
}
# ----------- Stage 3 - search for an attempt to enter through IPSec proposal -----------
foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "failed" ] - 1) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec proposal)");
}
} on-error={ :log warning ">>> Script error. Not found string 'failed to get valid proposal' in log."; }
}
# ----------- Stage 4 - search for an attempt to enter through L2TP -----------
foreach dangerString in=[ /log find message~"user" message~"authentication failed"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
:local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "<" ] + 1) ([ :find $stringTemp ">" ]) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (wrong L2TP user '".$dangerUser."')");
}
} on-error={ :log warning ">>> Script error. Not found string 'user' & 'authentication failed' in log."; }
}
# ----------- Stage 5 - search for login attempts via WinBox -----------
foreach dangerString in=[ /log find message~"denied winbox/dude connect from"; ] do={
do {
:local stringTemp ([ /log get $dangerString message ]);
:local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:log warning (">>> Added in black list IP ".$dangerIP." (not allowed WinBox user IP-address)");
}
} on-error={ :log warning ">>> Script error. Not found string 'denied winbox/dude connect from' in log."; }
}
Спасибо.
-
- Сообщения: 4
- Зарегистрирован: 27 июл 2020, 13:47
Такие сообщения появляются когда указываешь конкретные сетки с которых можно ходить на winbox. Если кто-то пытается заломиться не из этих сеток сразу в журнале пишет denieddrpioneer писал(а): ↑27 авг 2020, 12:49У себя в журналах таких сообщений не встречал, но по вашей просьбе добавил дополнительную проверку:evgeniy.demin писал(а): ↑27 июл 2020, 13:49 Надо еще добавить, чтобы в BlockDangerAddress добавлялись адреса с сообщений типа denied winbox/dude connect from 115.74.2.191
Проверяйте. Отпишитесь о работе подправленного скрипта.Код: Выделить всё
# Script for blocking dangerous addresses that tried to connect to the router # https://forummikrotik.ru/viewtopic.php?t=4781&start=20 # tested on ROS 6.47 # updated 2020/08/27 # ----------- Stage 1 - search for a device login attempt ----------- foreach routerUser in=[ /user find disabled=no; ] do={ do { foreach dangerString in=[ /log find message~"login failure for user"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "from" ] - 1) ]); :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :find $stringTemp "via" ] - 1) ]); :local dangerVia ([ :pick $stringTemp ([ :find $stringTemp "via" ]) ([ :find $stringTemp "via" ] + 20)]); if ($routerUser != $dangerUser) do={ if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong router user '".$dangerUser."' ".$dangerVia.")"); } } } on-error={ :log warning ">>> Script error. Not found string 'login failure for user' in log."; } } } on-error={ :log warning ">>> Script error. Not found active router user."; } } # ----------- Stage 2 - search for an attempt to enter through IPSec password ----------- foreach dangerString in=[ /log find message~"parsing packet failed, possible cause: wrong password"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "parsing" ] - 1) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec password)"); } } on-error={ :log warning ">>> Script error. Not found string 'parsing packet failed, possible cause: wrong password' in log."; } } # ----------- Stage 3 - search for an attempt to enter through IPSec proposal ----------- foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "failed" ] - 1) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec proposal)"); } } on-error={ :log warning ">>> Script error. Not found string 'failed to get valid proposal' in log."; } } # ----------- Stage 4 - search for an attempt to enter through L2TP ----------- foreach dangerString in=[ /log find message~"user" message~"authentication failed"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]); :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "<" ] + 1) ([ :find $stringTemp ">" ]) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong L2TP user '".$dangerUser."')"); } } on-error={ :log warning ">>> Script error. Not found string 'user' & 'authentication failed' in log."; } } # ----------- Stage 5 - search for login attempts via WinBox ----------- foreach dangerString in=[ /log find message~"denied winbox/dude connect from"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (not allowed WinBox user IP-address)"); } } on-error={ :log warning ">>> Script error. Not found string 'denied winbox/dude connect from' in log."; } }
Спасибо.
Отлично работает, спасибо огромное
-
- Сообщения: 4
- Зарегистрирован: 27 июл 2020, 13:47
-
- Сообщения: 2
- Зарегистрирован: 11 окт 2020, 00:15
Вот так это выглядитdrpioneer писал(а): ↑27 авг 2020, 12:49У себя в журналах таких сообщений не встречал, но по вашей просьбе добавил дополнительную проверку:evgeniy.demin писал(а): ↑27 июл 2020, 13:49 Надо еще добавить, чтобы в BlockDangerAddress добавлялись адреса с сообщений типа denied winbox/dude connect from 115.74.2.191
Проверяйте. Отпишитесь о работе подправленного скрипта.Код: Выделить всё
# Script for blocking dangerous addresses that tried to connect to the router # https://forummikrotik.ru/viewtopic.php?t=4781&start=20 # tested on ROS 6.47 # updated 2020/08/27 # ----------- Stage 1 - search for a device login attempt ----------- foreach routerUser in=[ /user find disabled=no; ] do={ do { foreach dangerString in=[ /log find message~"login failure for user"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "from" ] - 1) ]); :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :find $stringTemp "via" ] - 1) ]); :local dangerVia ([ :pick $stringTemp ([ :find $stringTemp "via" ]) ([ :find $stringTemp "via" ] + 20)]); if ($routerUser != $dangerUser) do={ if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong router user '".$dangerUser."' ".$dangerVia.")"); } } } on-error={ :log warning ">>> Script error. Not found string 'login failure for user' in log."; } } } on-error={ :log warning ">>> Script error. Not found active router user."; } } # ----------- Stage 2 - search for an attempt to enter through IPSec password ----------- foreach dangerString in=[ /log find message~"parsing packet failed, possible cause: wrong password"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "parsing" ] - 1) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec password)"); } } on-error={ :log warning ">>> Script error. Not found string 'parsing packet failed, possible cause: wrong password' in log."; } } # ----------- Stage 3 - search for an attempt to enter through IPSec proposal ----------- foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerIP ([ :pick $stringTemp 0 ([ :find $stringTemp "failed" ] - 1) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong IPSec proposal)"); } } on-error={ :log warning ">>> Script error. Not found string 'failed to get valid proposal' in log."; } } # ----------- Stage 4 - search for an attempt to enter through L2TP ----------- foreach dangerString in=[ /log find message~"user" message~"authentication failed"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]); :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "<" ] + 1) ([ :find $stringTemp ">" ]) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (wrong L2TP user '".$dangerUser."')"); } } on-error={ :log warning ">>> Script error. Not found string 'user' & 'authentication failed' in log."; } } # ----------- Stage 5 - search for login attempts via WinBox ----------- foreach dangerString in=[ /log find message~"denied winbox/dude connect from"; ] do={ do { :local stringTemp ([ /log get $dangerString message ]); :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]); if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d; :log warning (">>> Added in black list IP ".$dangerIP." (not allowed WinBox user IP-address)"); } } on-error={ :log warning ">>> Script error. Not found string 'denied winbox/dude connect from' in log."; } }
Спасибо.
# ----------- Stage 5 - search for login attempts via WinBox -----------
"denied winbox/dude connect from"
- drpioneer
- Сообщения: 144
- Зарегистрирован: 30 май 2013, 10:20
Приветствую!
Глядя на приложенный Вами скриншот LOGа вижу, что ошибка выскакивает при каждом запуске скрипта. Судя по скриншоту скрипт запускается каждые 3-4 секунды(!!!). Могу предположить, что проблема заключается в коротком периоде запуска скрипта. Вероятно скрипт не успевает отработать и завершить свою работу, как в это же время у вас происходит запуск еще одной копии этого же скрипта...
Попробуйте увеличить интервал между запусками скрипта. У меня, например, интервал равен двум десяткам минут.
Не забудьте предварительно удалить все запущенные сеансы скрипта в system/scripts/jobs.
Отпишитесь о полученных результатах. Заранее спасибо.
-
- Сообщения: 2
- Зарегистрирован: 11 окт 2020, 00:15
Приветствую!drpioneer писал(а): ↑11 окт 2020, 22:34Приветствую!
Глядя на приложенный Вами скриншот LOGа вижу, что ошибка выскакивает при каждом запуске скрипта. Судя по скриншоту скрипт запускается каждые 3-4 секунды(!!!). Могу предположить, что проблема заключается в коротком периоде запуска скрипта. Вероятно скрипт не успевает отработать и завершить свою работу, как в это же время у вас происходит запуск еще одной копии этого же скрипта...
Попробуйте увеличить интервал между запусками скрипта. У меня, например, интервал равен двум десяткам минут.
Не забудьте предварительно удалить все запущенные сеансы скрипта в system/scripts/jobs.
Отпишитесь о полученных результатах. Заранее спасибо.
Скрипт запускается каждые 30 минут.
Приложенный скриншот LOGа - это запуск и остановка скрипта вручную.
Раньше все было нормально.
Могу предположить, что скрипт не может завершить работу, т.к. не находит в логах
message~"denied winbox/dude connect from"
Какое-то время скрипт работал
- drpioneer
- Сообщения: 144
- Зарегистрирован: 30 май 2013, 10:20
Добрый день.
Логика работы по этой части кода подразумевает поиск в LOGе всех записей "denied winbox/dude connect from" с последующей обработкой каждой найденной записи.
Сообщение: ">>> Script error. Not found string 'denied winbox/dude connect from' in log" будет выведено только в том случае, если такая запись в LOGе изначально была обнаружена, но при попытке её обработать вдруг оказывается, что такой записи уже нет...
Это может произойти, когда в промежутке времени между обнаружением записи и её обработкой, с этой записью что-то случилось: она была изменена/удалена или LOG-файл по какой-то причине кардинально изменил свое содержимое или вовсе был удален...