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

Skip to end of metadata
Go to start of metadata

Несколько хуков

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

/usr/local/Reductor/userinfo/hooks/events.https.sh
/usr/local/Reductor/userinfo/hooks/events.https_plus.sh

Что описывать в хуках

Всё то же самое, что и раньше:

  • Получение списка IP
  • Добавление IP адреса для блокировки
  • Прекращение блокировки IP адреса

Примечания

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

Пример - фильтрация 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

3. Смотрим на формат синхронизируемых списков:

  • ip_https.load - x.x.x.x/yy
  • ip_subnet_block.load - x.x.x.x/yy

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

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

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

4. Хук для ip_https.load

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

touch /usr/local/Reductor/userinfo/hooks/events.https.sh
chmod a+x /usr/local/Reductor/userinfo/hooks/events.https.sh
#!/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"
}

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

touch /usr/local/Reductor/userinfo/hooks/events.sh
chmod a+x /usr/local/Reductor/userinfo/hooks/events.sh
#!/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"
}
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.