Отправка нескольких списков

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (12)

просмотр истории страницы
h2. Несколько хуков

Для начала нужно создать в файл /usr/local/Reductor/userinfo/hooks/events.sh.hooks в котором перечислены пути к дополнительным хукам, например:

{code}
/usr/local/Reductor/userinfo/hooks.events_https.sh /usr/local/Reductor/userinfo/hooks/events.https.sh
/usr/local/Reductor/userinfo/hooks.events_block.sh /usr/local/Reductor/userinfo/hooks/events.https_plus.sh
{code}

h2. Примечания

* Внимательно проверьте что то, что вы получаете на выходе из функции "получение списка IP" совпадает по формату с содержимым синхронизируемого списка.
* Частая ошибка - синхронизация не работает из-за того что с маршрутизатора получаются подсети вида x.x.x.x/32, а в списке x.x.x.x или наоборот.
* Ещё один момент - ipset в Linux (по крайней мере в CentOS 6) имеет смешанный формат - маски /32 скрываются, а все остальные остаются. Это тоже может приводить к проблемам при фильтрации.
* Для использования подсетей используйте тип ipset hash:net

h2. Пример - фильтрация ip_https и ip_subnet_block на Linux роутере
{code}

2. Создаём список дополнительных хуков:

{code}
/usr/local/Reductor/userinfo/hooks.events_https.sh
/usr/local/Reductor/userinfo/hooks.events_block.sh
{code}


Нам везёт и хуки будут почти идентичными.
Поскольку происходит синхронизация подсетей в конфиге, в настройках алгоритма фильтрации включаем опцию:

{panel}
\[x\] Синхронизировать IP-адреса подсетями
{panel}

В противном случае синхронизация будет зацикливаться и будет то удалять, то добавлять элементы.

4. Хук для ip_https.load

Хук должен быть исполнимым файлом, иначе он будет пропускаться.

{code}
touch /usr/local/Reductor/userinfo/hooks/events.https.sh
chmod a+x /usr/local/Reductor/userinfo/hooks/events.https.sh
{code}

{code}
#!/bin/bash

IPSET=ip_https
SSH="ssh -T root@10.50.140.73"
IP_BLOCK_FULL_LIST="$LISTDIR/load/ip_https.load"

# отправить на оборудование команду на блокирование ip адреса
ip_block_full_add() {
local ip="$1"
echo ipset add $IPSET $ip | $SSH
}

# отправить на оборудование команду на снятие блокировки ip адреса
ip_block_full_del() {
local ip="$1"
echo ipset del $IPSET $ip | $SSH
}

# получить список уже заблокированных IP адресов, нужно для вычисления дельты
ip_block_full_get() {
echo ipset save $IPSET | $SSH | egrep -o "$ip_or_ipmask_regex"
}
{code}

5. Аналогично для ip_block.load

{code}
touch /usr/local/Reductor/userinfo/hooks/events.sh
chmod a+x /usr/local/Reductor/userinfo/hooks/events.sh
{code}

{code}
#!/bin/bash

IPSET=ip_block
SSH="ssh -T root@10.50.140.73"

# отправить на оборудование команду на блокирование ip адреса
ip_block_full_add() {
local ip="$1"
echo ipset add $IPSET $ip | $SSH
}

# отправить на оборудование команду на снятие блокировки ip адреса
ip_block_full_del() {
local ip="$1"
echo ipset del $IPSET $ip | $SSH
}

# получить список уже заблокированных IP адресов, нужно для вычисления дельты
ip_block_full_get() {
echo ipset save $IPSET | $SSH | egrep -o "$ip_or_ipmask_regex"
}
{code}