Интеграция с маршрутизаторами (events.sh)

Skip to end of metadata
Go to start of metadata

В соответствии с требованиями Роскомнадзора часть IP-адресов необходимо блокировать полностью, по всем портам и протоколам.

Варианты решения этой задачи перечислены ниже.

Данная интеграция подразумевает анонсирование с Carbon Reductor DPI маршрутной информации о том, что нужно заблокировать (согласно списка IP-адресов для полной блокировки по всем портам и протоколам)

Есть два способа интеграции - использование протокола BGP и отправка команд на маршрутизатор с помощью SSH. Мы рекомендуем использовать BGP как наиболее стандартный и надёжный способ. 

Использование BGP

Использование модуля BGP Blackhole.

Отправка команд

Сохранять папку ssh требуется в chroot в папке cfg.
Либо она затрётся после обновления. После создания ключей, требуется создать на них симлинк в chroot:
ln -s /cfg/.ssh/ /root/.ssh

Это решение используется как правило только если есть причины не использовать BGP.

В качестве команд обычно используется наполнение ACL, address-list или ipset IP-адресами для фильтрации.

Создание ACL, address-list или ipset лежит на администраторе маршрутизатора. Нужно сделать так, чтобы после перезагрузки маршрутизатора список существовал и в него можно было добавлять адреса. Обычно достаточно добавить его в конфигурационный файл. Дополнительно можно сделать сохранение этого списка и восстановление его при перезагрузке, это значительно сократит время синхронизации.

Получение разницы между адресами

Важно: все операции выполняются в chroot /app/reductor

  1. Откройте и изучите пример хука для интеграции с Linux маршрутизаторами, использующими ipset:
    chroot /app/reductor
    less /usr/local/Reductor/contrib/examples/events.sh_template
    
  2. По аналогии с уже имеющимся там примером, отредактируйте в нём три функции:
    1. ip_block_full_add - получает аргументом $1 IP-адрес, который необходимо полностью заблокировать и отправляет на маршрутизатор команду на добавление в список заблокированных
    2. ip_block_full_del - получает аргументом $1 IP-адрес, который необходимо разблокировать и отправляет на маршрутизатор команду на удаление из списка заблокированных
    3. ip_block_full_get - получает с маршрутизатора список заблокированных IP-адресов (1 строка - 1 IP адрес), функция должна вывести их на стандартный вывод (stdout), сохранять в какие-либо файлы ничего не нужно.
  3. Скопируйте хук командой:
    cp -a /usr/local/Reductor/contrib/examples/events.sh_template /cfg/userinfo/hooks/events.sh
    
  4. Проверьте его работу при ручном запуске:
    /usr/local/Reductor/bin/events.sh
    
  5. Проверьте, что он работает из cron: очистите список на маршрутизаторе и подождите 15 минут (запускается по cron в 15 минут каждого часа)

Получение списка целиком

Сам список IP-адресов которые необходимо заблокировать находится:

/var/lib/reductor/lists/load/ip_block.load

Вы можете использовать его по собственному усмотрению.

Тестирование.

Первый запуск рекомендуется выполнить вручную, чтобы избежать множества ошибок при автоматическом выполнении.

Обязательно выполните добавление маршрутизатора в know_hosts.

The authenticity of host '10.90.1.1' (10.90.1.1')' can't be established.
RSA key fingerprint is 12:3b:d5:55:bd:37:4f:44:b3:61:56:2c:05:a0:ad:90.
Are you sure you want to continue connecting (yes/no)? yes

  1. Запускаем /usr/local/Reductor/bin/events.sh вручную.
    1. При первом запуске должно произойти много событий ip_block_full_add.
    2. При повторном запуске ни одного события произойти не должно.
    3. Если много событий происходят при повторных запусках, необходимо:
      1. Проверять функцию получения списка IP - ip_block_full_get
      2. Проверять функцию отправки IP для блокировки на оборудование - ip_block_full_add.
      3. Полезным будет запуск в режиме трасировки: bash -x /usr/local/Reductor/bin/events.sh
  2. Тестируем автоматический запуск по crond.
    1. Разблокируйте все ресурсы на оборудовании вручную
    2. Дождитесь запуска events.sh по cron. grep events.sh /etc/cron.d/reductor чтобы узнать когда он запускается
    3. Наблюдайте за лог-файлом: tail -f /var/log/reductor/reductor.log
    4. Наблюдайте за списком блокируемых IP на оборудовании, он должен постепенно наполняться.
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.