Просмотр Исходного

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

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

{info}
Данная интеграция подразумевает анонсирование *с Редуктора* маршрутной информации о том, что нужно заблокировать (согласно списка ip на "полный" блок по всем портам и протоколам)
{info}
Есть два способа интеграции - использование BGP и отправка команд. Мы рекомендуем использовать BGP как наиболее стандартный и надёжный способ. 

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

[Использование модуля BGP Blackhole|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=69926929].

*Устаревшие схемы:*

[https://github.com/carbonsoft/reductor_bgp_rtbh]

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

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

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

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

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

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

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

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

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

{code}
/var/lib/reductor/lists/load/ip_block.load
{code}

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

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

Обязательно выполните добавление маршрутизатора в 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
{info}

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

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

h2. Анонсирование списка подсетей

Чтобы не создавать лишнюю нагрузку на ваши маршрутизаторы при анонсировании списка заблокированных IP адресов существует возможность анонсировать этот список в виде подсетей, что значительно снизит количество правил блокировки на вашем маршрутизаторе.

Сделать это можно с помощью опции меню \-> Reductor \-> Настройка алгоритма фильтрации \->

!ip_subnets.png|border=1!