Несколько хуков
Для начала нужно создать в файл /usr/local/Reductor/userinfo/hooks/events.sh.hooks в котором перечислены пути к хукам, например:
/usr/local/Reductor/userinfo/hooks.events_https.sh /usr/local/Reductor/userinfo/hooks.events_block.sh
Что описывать в хуках
Всё то же самое, что и раньше:
- Получение списка IP
- Добавление IP адреса для блокировки
- Прекращение блокировки IP адреса
Примечания
Внимательно проверьте что то, что вы получаете на выходе из функции "получение списка IP" совпадает по формату с содержимым синхронизируемого списка.
Частая ошибка - синхронизация не работает из-за того что с маршрутизатора получаются подсети вида x.x.x.x/32, а в списке x.x.x.x или наоборот.
Ещё один момент - ipset в Linux (по крайней мере в CentOS 6) имеет смешанный формат - маски /32 скрываются, а все остальные остаются. Это тоже может приводить к проблемам при фильтрации.
Пример - фильтрация ip_https и ip_subnet_block на Linux роутере
Вводные данные
- На роутере фильтрация производится с помощью ipset.
- Создание ipset при старте обеспечивается его настройками, а не скриптом синхронизации
- Создание фильтрующих правил для iptables обеспечивается его настройками, а не скриптом синхронизации
Настройки на Carbon Reductor
1. Подготавливаем окружение к работе
Управление роутером будет осуществляться по SSH в автоматическом режиме. Для этого нужно избавиться от необходимости вводить пароль. Можно сделать это несколькими способами:
- обмен ssh-ключами
- использование sshpass
- использование ssh + tcl/expect (не знаю зачем)
Рассматриваем первый вариант - SSH-ключи.
Для упрощения рассматриваем вариант работы под рутом, без sudo и настройки TTY. Это не очень секьюрно, но секьюрность можно настроить потом, когда заработает основная функциональность.
Если SSH-ключей нет - создайте их:
ssh-keygen
Обменяйтесь ключами с роутером. Считаем, что IP роутера - 10.50.140.73.
ssh-copy-id root@10.50.140.73
Создаём ipset (нужно это автоматизировать иначе после перезагрузки роутера это перестанет работать).
ipset create ip_https hash:net
2. Создаём список хуков:
/usr/local/Reductor/userinfo/hooks.events_https.sh /usr/local/Reductor/userinfo/hooks.events_block.sh
3. Смотрим на формат синхронизируемых списков:
- ip_https.load - x.x.x.x/yy
- ip_subnet_block.load - x.x.x.x/yy
Нам везёт и хуки будут почти идентичными.
4. Хук для ip_https.load