Страница 2 из 13
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 25 май 2020, 09:28
mex79
Тема интересная, подпишусь. Сейчас есть одиночные попытки подключения L2TP но пока вижу максимум две попытки, единственное что перед сервером стоит kerio и тоже неплохо режет в том числе по geoip по направлениям откуда мы точно не ждем гостей.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 28 май 2020, 21:57
drpioneer
Снова приветствую всех!
Обратил внимание на серьезную загрузку процессора во время работы скрипта при обработке большого количества записей в 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."; }
}
Замечания и улучшения приветствуются.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 27 июл 2020, 13:49
evgeniy.demin
Надо еще добавить, чтобы в BlockDangerAddress добавлялись адреса с сообщений типа denied winbox/dude connect from 115.74.2.191
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 27 авг 2020, 12:49
drpioneer
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."; }
}
Проверяйте. Отпишитесь о работе подправленного скрипта.
Спасибо.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 28 авг 2020, 15:31
evgeniy.demin
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."; }
}
Проверяйте. Отпишитесь о работе подправленного скрипта.
Спасибо.
Такие сообщения появляются когда указываешь конкретные сетки с которых можно ходить на winbox. Если кто-то пытается заломиться не из этих сеток сразу в журнале пишет denied
Отлично работает, спасибо огромное
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 31 авг 2020, 12:53
evgeniy.demin
Вот так выглядит это
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 11 окт 2020, 00:22
Vatman
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"
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 11 окт 2020, 22:34
drpioneer
Vatman писал(а): ↑11 окт 2020, 00:22
Вот так это выглядит
# ----------- Stage 5 - search for login attempts via WinBox -----------
"denied winbox/dude connect from"
Приветствую!
Глядя на приложенный Вами скриншот LOGа вижу, что ошибка выскакивает при каждом запуске скрипта. Судя по скриншоту скрипт запускается каждые 3-4 секунды(!!!). Могу предположить, что проблема заключается в коротком периоде запуска скрипта. Вероятно скрипт не успевает отработать и завершить свою работу, как в это же время у вас происходит запуск еще одной копии этого же скрипта...
Попробуйте увеличить интервал между запусками скрипта. У меня, например, интервал равен двум десяткам минут.
Не забудьте предварительно удалить все запущенные сеансы скрипта в system/scripts/jobs.
Отпишитесь о полученных результатах. Заранее спасибо.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 12 окт 2020, 01:22
Vatman
drpioneer писал(а): ↑11 окт 2020, 22:34
Vatman писал(а): ↑11 окт 2020, 00:22
Вот так это выглядит
# ----------- Stage 5 - search for login attempts via WinBox -----------
"denied winbox/dude connect from"
Приветствую!
Глядя на приложенный Вами скриншот LOGа вижу, что ошибка выскакивает при каждом запуске скрипта. Судя по скриншоту скрипт запускается каждые 3-4 секунды(!!!). Могу предположить, что проблема заключается в коротком периоде запуска скрипта. Вероятно скрипт не успевает отработать и завершить свою работу, как в это же время у вас происходит запуск еще одной копии этого же скрипта...
Попробуйте увеличить интервал между запусками скрипта. У меня, например, интервал равен двум десяткам минут.
Не забудьте предварительно удалить все запущенные сеансы скрипта в system/scripts/jobs.
Отпишитесь о полученных результатах. Заранее спасибо.
Приветствую!
Скрипт запускается каждые 30 минут.
Приложенный скриншот LOGа - это запуск и остановка скрипта вручную.
Раньше все было нормально.
Могу предположить, что скрипт не может завершить работу, т.к. не находит в логах
message~"denied winbox/dude connect from"
Какое-то время скрипт работал
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 12 окт 2020, 12:36
drpioneer
Vatman писал(а): ↑12 окт 2020, 01:22
Раньше все было нормально.
Могу предположить, что скрипт не может завершить работу, т.к. не находит в логах
message~"denied winbox/dude connect from"
Какое-то время скрипт работал
Добрый день.
Логика работы по этой части кода подразумевает поиск в LOGе всех записей "denied winbox/dude connect from" с последующей обработкой каждой найденной записи.
Сообщение: ">>> Script error. Not found string 'denied winbox/dude connect from' in log" будет выведено только в том случае, если такая запись в LOGе изначально была обнаружена, но при попытке её обработать вдруг оказывается, что такой записи уже нет...
Это может произойти, когда в промежутке времени между обнаружением записи и её обработкой, с этой записью что-то случилось: она была изменена/удалена или LOG-файл по какой-то причине кардинально изменил свое содержимое или вовсе был удален...