Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Чёрный список для неудачных попыток входа в IPSec VPN

    Чёрный список для неудачных попыток входа в IPSec VPN

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Чёрный список для неудачных попыток входа в IPSec VPN, RouterOS
     
    nickjail
    Guest
    #1
    0
    10.05.2019 21:40:00
    Привет! У меня на роутере установлен VPN-сервер. Конечно, время от времени кто-то пытается его взломать, и я получаю кучу сообщений на почту, прежде чем добавлю IP в черный список. Я не хочу закрывать порты. Хочу сделать скрипт, который будет добавлять неудачные IP в черный список. Эта команда показывает IP с неудачной переговорами /log print where message~"negotiation". Вот что она показывает (я убрал некоторые цифры из IP, чтобы не показывать реальный IP): apr/15 03:50:37 ipsec,error 216.xx.206.6 phase1 negotiation failed. apr/16 03:31:44 ipsec,error 216.xx.206.118 phase1 negotiation failed. apr/17 05:33:29 ipsec,error 216.xx.206.102 phase1 negotiation failed. may/08 14:30:13 ipsec,error 122.xx.64.43 phase1 negotiation failed. may/08 14:30:13 ipsec,error 122.xx.64.43 phase1 negotiation failed. Кто-нибудь знает, как сделать скрипт на основе команды выше, который будет парсить лог и добавлять IP в список? Любая информация о том, как альтернатива защищенного IPSec была бы полезна. Спасибо.
     
     
     
    brg3466
    Guest
    #2
    0
    18.05.2021 18:10:00
    @Jotne, я хотел бы использовать ваш скрипт. Но могу я узнать, как настроить системные часы, чтобы [/log find time>([/system clock get time] - 60m) message~“xxx”] работало? Я обнаружил, что оно работает только с временем GMT 0. Моя настройка ниже, и скрипт не работает с полудня по местному времени (в GMT 0 это уже завтра), потому что лог выдаст “mmm/dd/yyyy” перед временем: [brg3466@MikroTik] > /system clock pr
                     время: 11:03:45
                     дата: 18/мая/2021
     автоматическое определение часового пояса: да
           название часового пояса: America/Los_Angeles
               сдвиг GMT: -07:00
               активный переход на летнее/зимнее время: да
     
     
     
    rextended
    Guest
    #3
    0
    18.05.2021 19:00:00
    Методы, такие как [/system clock get time] - 5m (я часто вижу на форуме…) неверны в любом часовом поясе, например 00:01:00 - 5 минут до -23:56:00, и ни один лог не может содержать отрицательное время предыдущего года: 17 мая 2020 10:47:30 система, информация, аккаунт пользователь admin вышел из системы с 100.80.8.1 через winbox 17 мая 2020 10:49:30 система, информация, аккаунт пользователь admin вышел из системы с 100.80.8.1 через winbox вчера: 17 мая 10:49:43 система, информация, аккаунт пользователь admin вошел в систему с 100.80.8.1 через winbox 17 мая 13:05:12 система, информация, аккаунт пользователь admin вышел из системы с 100.80.8.1 через winbox 17 мая 13:05:25 система, информация, аккаунт пользователь admin вошел в систему с 100.80.8.1 через winbox сегодня: 08:18:40 система, информация, аккаунт пользователь admin вышел из системы с 100.80.8.1 через winbox 08:18:51 система, информация, аккаунт пользователь admin вошел в систему с 100.80.8.1 через winbox 08:18:54 система, информация, аккаунт пользователь admin вышел из системы с 100.80.8.1 через winbox Также на другой ветке обсуждения некоторое время назад выяснились различия между тремя форматами времени, используемыми в логах. MikroTik сделала неверный выбор, выбрав «дружественный» формат времени… ДОЛЖЕН быть полный дата и время в логе, каждый раз. И ДОЛЖЕН использовать международный формат даты и времени по стандарту ISO: 2021-05-18 21:08:00
     
     
     
    rextended
    Guest
    #4
    0
    18.05.2021 19:10:00
    Невозможно добавить один и тот же IP-адрес в один и тот же список адресов; в этом случае скрипт выдает ошибку и завершает работу, если один и тот же IP найден дважды в нужном интервале, не добавляя последующие IP в логи. Перед добавлением нужно проверить, присутствует ли он уже.
     
     
     
    brg3466
    Guest
    #5
    0
    18.05.2021 19:28:00
    Согласен. С тремя форматами времени действительно возникает путаница. Лучше иметь один единый формат. Вернемся к теме, как получить журнал за последние, скажем, 10 минут, если мы не используем скрипт Jotne?
     
     
     
    rextended
    Guest
    #6
    0
    18.05.2021 19:43:00
    Не переживайте использовать любой интервал времени, анализируйте все журналы, скрипт предотвращает дублирование IP в списке адресов, что может вызвать ошибки из-за дублирующей записи. Этот скрипт не предотвращает блокировку вашего собственного удаленного IP, если во время этого произойдет какая-либо ошибка. Не забудьте создать белый список ваших IP и добавить правило разрешения перед правилом блокировки! Переработанный скрипт: # Переработан из Rextended v1.2.rex
    #
    # Создан Jotne 2019 v1.2
    #
    # Этот скрипт добавляет IP пользователя, у которого "phase1 negotiation failed" и "SPI .* not registered for", в черный список на 7 дней
    # Запланируйте выполнение скрипта каждые 5 минут
    # Он должен работать на всех версиях routerOS - Rex протестировал его на 6.47.9

    # пример:
    # 1.2.3.4 phase1 negotiation failed.
    # SPI 4f23346ef367ea12 not registered for 1.2.3.4[4500]

    :local logMessage ""
    :local logIp 10.6.6.6

    /log

    :foreach i in=[find where message~"phase1 negotiation failed" or message~"SPI .* not registered for"] do={

       :set logMessage [get $i message]

       :if ($logMessage~"phase1 negotiation failed") do={
           :set logIp [:toip [:pick $logMessage -1 [:find $logMessage " "]]]
           :if ([:len [/ip fire addr find where address=$logIp]] < 1) do={
               /ip fire addr add address=$logIp list=IPSEC timeout=7d
               :log info message="IPSEC_failed добавлен $logIp из-за сбоя согласования"
           }
       }

       :if ($logMessage~"SPI .* not registered for") do={
           :set logIp [:toip [:pick $logMessage ([:find $logMessage "for "]+4) [:find $logMessage "["]]]
           :if ([:len [/ip fire addr find where address=$logIp]] < 1) do={
               /ip fire addr add address=$logIp list=IPSEC timeout=7d
               :log info message="IPSEC_failed добавлен $logIp потому что SPI не зарегистрирован"
           }
       }

    }
     
     
     
    Jotne
    Guest
    #7
    0
    18.05.2021 20:41:00
    Mikrotik пишет о формате журналов времени: вы можете хранить журналы удаленно на сервере Syslog и выбрать формат, который вам больше нравится. Я использую Syslog и Splunk. Были несколько запросов к MT использовать правильный формат журнала времени, например, ISO8601.
     
     
     
    diamuxin
    Guest
    #8
    0
    03.01.2022 20:44:00
    Привет! Как найти IP в этом сообщении? (второй IP 27.115…) фаза 1, переговоры не удались из-за превышения времени 89.131.7.88[500]<=>27.115.124.74[30992] 0011223344556677:b59120571b9a18c2 :локальные ipS [:выбрать $logMessageS ([:найти $logMessageS ">"]+1) ([:найти $logMessageS "["]-1)] ==> это не работает Спасибо!
     
     
     
    own3r1138
    Guest
    #9
    0
    03.01.2022 21:38:00
    Я задаюсь вопросом, могу ли я использовать ту же концепцию для веб-фиг логов. После включения сертификата Let's Encrypt я получаю несколько попыток входа в веб-фиг в день :( ошибка входа для пользователя MikroTikSystem с 45.130.99.94 через веб.
     
     
     
    Jotne
    Guest
    #10
    0
    04.01.2022 05:42:00
    Вы почти на верном пути. Проблема заключается во втором поиске: он находит первое [ (перед 500), но не находит второе [ (перед 30992), которое вам нужно. Это работает: {
    :local test "phase1 negotiation failed due to time up 89.131.7.88[500]<=>27.115.124.74[30992] 0011223344556677:b59120571b9a18c2"
    :local temp [:pick $test ([:find $test ">"]+1) 999]
    :put [:pick $temp 0 [:find $temp "["]]
    } Это берет IP и остальную часть строки в первом выборе. Затем второй выбор получает все до [. Все в одной громоздкой длинной строке (лучше разбить это). :local ipS [:pick [:pick $logMessageS ([:find $logMessageS ">"]+1) [:len $logMessageS]] 0 [:find [:pick $logMessageS ([:find $logMessageS ">"]+1) [:len $logMessageS]] "["]]
     
     
     
    diamuxin
    Guest
    #11
    0
    04.01.2022 09:42:00
    Большое спасибо за помощь! С уважением.
     
     
     
    inteq
    Guest
    #12
    0
    13.01.2022 11:38:00
    Искал такой скрипт долго. Пытаюсь реализовать его на роутере, получаю много “ошибка переговоров”, но у меня есть проблема. Проблемный IP добавляется в список IPSEC, но по какой-то причине туда же добавляется 0.0.0.0. Есть идеи, почему так? В логе ничего не показывает про 0.0.0.0. Спасибо.
     
     
     
    Jotne
    Guest
    #13
    0
    13.01.2022 12:32:00
    В этой переписке также есть 1.3. Попробуйте его. (Не помню, что изменилось с 1.2 до 1.3)
     
     
     
    diamuxin
    Guest
    #14
    0
    13.01.2022 12:55:00
    Со мной произошло то же самое, когда я проводил тесты. Думаю, что если не удается корректно получить IP, система добавляет IP типа 0.0.0.0. Важно, чтобы сообщение об ошибке в журнале фильтровалось правильно для получения IP. Используй “:toip”. Вот мой скрипт, который я запускаю каждый час, пока работает отлично для меня. :local logMessage "" :local logIp "" :local message1 " phase1 negotiation failed." :local message2 "phase1 negotiation failed due to time up " :local message3 "first L2TP UDP " /log :foreach i in=[find where message~$message1 or message~$message2 or message~$message3 ] do={ :set logMessage [get $i message] :if ($logMessage~$message1) do={ :set logIp [:toip [:pick $logMessage 0 [:find $logMessage " "]]] :if ([:len [/ip fire addr find where address=$logIp]] < 1) do={ /ip fire addr add address=$logIp list=IPSEC timeout=7d :log info message="IPSEC failed: add $logIp because negotiation failed" } } :if ($logMessage~$message2) do={ :set logIp [:toip [:pick [:pick $logMessage ([:find $logMessage ">"]+1) [:len $logMessage]] 0 [:find [:pick $logMessage ([:find $logMessage ">"]+1) [:len $logMessage]] "["]]] :if ([:len [/ip fire addr find where address=$logIp]] < 1) do={ /ip fire addr add address=$logIp list=IPSEC timeout=7d :log info message="IPSEC failed: add $logIp because negotiation failed due to time up" } } :if ($logMessage~$message3) do={ :set logIp [:toip [:pick $logMessage ([:find $logMessage "from"]+5) [:len $logMessage]]] :if ([:len [/ip fire addr find where address=$logIp]] < 1) do={ /ip fire addr add address=$logIp list=IPSEC timeout=7d :log info message="L2TP failed: first UDP packet received from $logIp. Added to blacklist" } } } Удачи! С уважением.
     
     
     
    inteq
    Guest
    #15
    0
    13.01.2022 13:19:00
    Спасибо за код. Проблема в том, что первый L2TP UDP пакет, полученный от, представляет собой действительное и нормальное сообщение при успешном подключении. Ваш скрипт добавляет действительные IP в список.
     
     
     
    plisken
    Guest
    #16
    0
    28.07.2019 16:58:00
    Очень интересное приложение. Я точно буду использовать этот скрипт. Спасибо.
     
     
     
    Jotne
    Guest
    #17
    0
    08.08.2019 17:03:00
    Изменение: Обновлено, смотрите этот пост https://forum.mikrotik.com/viewtopic.php?p=905420#p905420 Обновлено, теперь также блокировать пользователей с такими сообщениями: SPI e14750001eda995ec не зарегистрирован для 89.50.40.10[4500] # Создано Jotne 2019 v1.3

    Этот скрипт добавляет IP-адрес пользователя с сообщениями "IPSEC negotiation failed" и "SPI* not registered" в черный список на 24 часа. Запланируйте выполнение скрипта каждые 5 минут. Он должен работать на всех версиях routerOS. В версии 1.3 добавлено "Invalid exchange".

    Найдите все ошибки "negotiation failed" за последние 5 минут
    :local loglistN [:toarray [/log find time>([/system clock get time] - 5m) message~"negotiation failed"]]

    Для каждой ошибки делаем следующее
    :foreach i in=$loglistN do={

    Найти сообщение
    :local logMessageN [/log get $i message]
    Найти IP
    :local ipN [:pick $logMessageN 0 [:find $logMessageN " "]]

    Добавить IP в список доступа
    /ip firewall address-list add address=$ipN list=IPSEC timeout=30d
    Отправить сообщение в журнал
    :log info message="script=IPSEC_failed src_ip=$ipN why=negotiation_failed"
    }

    Найдите все ошибки "SPI* not registered" за последние 5 минут
    :local loglistS [:toarray [/log find time>([/system clock get time] - 5m) message~"SPI.*not regist"]]

    Для каждой ошибки делаем следующее
    :foreach j in=$loglistS do={

    Найти сообщение
    :local logMessageS [/log get $j message]
    Найти IP
    :local ipS [:pick $logMessageS ([:find $logMessageS "for "]+4) [:find $logMessageS "["]]

    Добавить IP в список доступа
    /ip firewall address-list add address=$ipS list=IPSEC timeout=30d
    Отправить сообщение в журнал
    :log info message="script=IPSEC_failed src_ip=$ipS why=SPI_not_registered"
    }

    Найдите все ошибки "Invalid exchange" за последние 5 минут
    :local loglistS [:toarray [/log find time>([/system clock get time] - 5m) message~"Invalid exchange"]]

    Для каждой ошибки делаем следующее
    :foreach j in=$loglistS do={

    Найти сообщение
    :local logMessageS [/log get $j message]
    Найти IP
    :local ipS [:pick $logMessageS ([:find $logMessageS "for "]+4) [:find $logMessageS "["]]

    Добавить IP в список доступа
    /ip firewall address-list add address=$ipS list=IPSEC timeout=7d
    Отправить сообщение в журнал
    :log info message="script=IPSEC_failed src_ip=$ipS why=SPI_not_registered"
    }
     
     
     
    iamdc
    Guest
    #18
    0
    19.08.2019 04:39:00
    181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. 181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. 181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. 181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. 181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. 181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. 181.209.165.10: произошла ошибка разбора пакета, возможная причина: неправильный пароль. Ошибка фазового 1: завершение переговоров из-за истечения времени xx.xx.xx.xx[4500]<=>181.209.165.10[4500]. Запуск скрипта script=IPSEC_failed src_ip=phase1 почему=неготации не удалось. Найти все ошибки "неготация не удалась из-за истечения времени" за последние 60 минут: :local loglistTimeout [:toarray [/log find time>([/system clock get time] - 60m) message~"phase1 negotiation failed due to time up"]]

    # для всех ошибок
    :foreach i in=$loglistTimeout do={

    # найти сообщение
    :local logMessageTimeout [/log get $i message]
    # найти IP
    :local ip1 [:pick $logMessageTimeout [:find $logMessageTimeout ">"] [:len $logMessageTimeout]]
    :local ipTimeout [:pick $ip1 1 [:find $ip1 "["] ]
    # Добавить IP в список доступа
    /ip firewall address-list add address=$ipTimeout list=IPSEC_failed timeout=245d
    # Отправить сообщение в журнал
    :log info message="script=IPSEC_failed src_ip=$ipTimeout why=negotiation_failed due to time up"
    }
     
     
     
    Jotne
    Guest
    #19
    0
    19.08.2019 07:09:00
    Я вижу, что вы использовали 60 минут. Также вам нужно запланировать выполнение скрипта на 60 минут, а не на 5 минут, как я использовал по умолчанию. Если это не сделать, вы получите двойное логирование, и IP будет добавлен несколько раз.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры