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

Нужно выполнить следующие шаги:

{toc}

h2. Необходимо создать хук:

{panel}
touch /app/reductor/cfg/userinfo/hooks/events.sh
chmod a+x /app/reductor/cfg/userinfo/hooks/events.sh
{panel}

h2. Хук для IPv4:

{code}
#!/bin/bash

SSH="/usr/bin/ssh -T <username>@<ip_address>"

# отсекаем лишнее из вывода /print
__only_ip() {
egrep -o "$ip_or_ipmask_regex" | sed -E "s|^$ip_regex$|&/32|g"
}

# Отправляем на оборудование команду на блокирование IP адреса
ip_block_full_add() {
local ip="$1"
echo "/ip firewall address-list add list=reductor_ip_block_list address=$ip comment=${ip}_reductor_ip_block" | $SSH
}
# Отправляем на оборудование команду на снятие блокировки IP адреса
ip_block_full_del() {
local ip="$1"
echo "/ip firewall address-list remove [find comment=${ip}_reductor_ip_block]" | $SSH
}

mikrotik_firewall_prepare() {
echo "/ip firewall filter add chain=reductor_forward comment=reductor_ip_block dst-address-list=reductor_ip_block_list action=drop" | $SSH
echo "/ip firewall filter add chain=forward action=jump jump-target=reductor_forward place-before=0" | $SSH
}

# Получаем список заблокированных IP
ip_block_full_get() {
# mikrotik_firewall_prepare
echo "/ip firewall address-list print where list=reductor_ip_block_list" | $SSH | __only_ip
}
{code}

h2. Хук для IPv6:

{code}
#!/bin/bash

SSH="/usr/bin/ssh -T <имя пользователя на Микротик>@<ip-адрес Микротика>"
export IP_BLOCK_FULL_LIST="$LISTDIR/load/ip6_block.load"
ip6_regex=${ip6_regex:-[0-9a-fA-F]+:[0-9a-fA-F:/]+}

# отсекаем лишнее из вывода /print
__only_ip() {
egrep -o "$ip6_regex"
}

# Отправляем на оборудование команду на блокирование IP адреса
ip_block_full_add() {
local ip="$1"
echo "/ipv6 firewall address-list add list=reductor_ip6_block_list address=$ip comment=${ip}_reductor_ip6_block" | $SSH
}
# Отправляем на оборудование команду на снятие блокировки IP адреса
ip_block_full_del() {
local ip="$1"
echo "/ipv6 firewall address-list remove [find comment=${ip}_reductor_ip6_block]" | $SSH
}

mikrotik_firewall_prepare() {
echo "/ipv6 firewall filter add chain=reductor_forward comment=reductor_ip6_block dst-address-list=reductor_ip6_block_list action=drop" | $SSH
echo "/ipv6 firewall filter add chain=forward action=jump jump-target=reductor_forward place-before=0" | $SSH
}

# Получаем список заблокированных IP
ip_block_full_get() {
# mikrotik_firewall_prepare
echo "/ipv6 firewall address-list print where list=reductor_ip6_block_list" | $SSH | __only_ip
}
{code}

{info}
Для одновременной работы нескольких хуков, воспользуйтесь "[данной статьей|REDUCTOR9:Анонсирование одного и более списков ip на несколько маршрутизаторов]"
{info}

h2. Чтобы всё заработало нужно:

1. Указать правильные IP адрес MikroTik и логин в переменной $SSH
2. Сгенерировать ключи в chroot

{code}
chroot /app/reductor/ /usr/bin/ssh-keygen
{code}
(на все вопросы - Enter)
3. Настроить авторизацию по ключам:
{code}
chroot /app/reductor/ /usr/bin/ssh-copy-id логин_на_Микротике@IP-микротика
{code}
4. Проверить вручную команду
{code}
TIMEOUT=0 chroot /app/reductor /usr/local/Reductor/bin/events.sh
{code}
{note}
Стоит учесть, что {color:#000000}могут быть проблемы с ssh-copy-id на версии прошивки МТ ниже 6.3.1{color}
{note}
В консоли Carbon Reductor DPI выполняем (после заполнения реквизитов на доступ по ssh):

{code}
# подготовка цепочек firewall на MikroTik.
chroot /app/reductor
. /cfg/userinfo/hooks/events.sh
mikrotik_firewall_prepare
{code}

Или на MikroTik:

{code}
/ip firewall filter add chain=reductor_forward comment=reductor_ip_block dst-address-list=reductor_ip_block_list action=drop
/ip firewall filter add chain=forward action=jump jump-target=reductor_forward place-before=0
{code}

Всю папку .ssh/ необходимо скопировать по пути /app/reductor/cfg/ чтобы ключи не пропали при обновлении:
{code}
chroot /app/reductor/
mkdir -p /cfg/root/.ssh/
cp -r /root/.ssh /cfg/.ssh
{code}


{info}
Если была физическая замена роутера (с сохранением старых конфигурационных файлов) - необходимо удалить нужную строчку в файле известных машин:
{code}
chroot /app/reductor
/root/.ssh/known_hosts
{code}
{info}


Для дополнительной фильтрации входящего трафика необходимо добавить правило на Микротик:
{code}
/ip firewall filter add chain=reductor_forward comment=reductor_ip_block src-address-list=reductor_ip_block_list action=drop
{code}