Интеграция с роутером на Linux. Использование ipset

Skip to end of metadata
Go to start of metadata

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

Шаг 1. Создаем файл хук:

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

Шаг 2. Заполняем файл хук:

Содержимое должно быть следующее:

#!/bin/bash

# Данный скрипт является хуком, а не утилитой.
# Не смущайтесь, что здесь ничего не вызывается напрямую.
# Не смущайтесь, что здесь есть неопределённые переменные.
# Вся логика по сравнению списков IP адресов в основном скрипте.
# Её не надо трогать. От вас нужно только описать 3.5 функции:
# - SSH - способ передачи команды с stdin на оборудование
# - ip_block_full_add/del/get.
# Не нужно что-то изобретать, всё готово, нужно только описать эту прослойку!

SSH="/usr/bin/ssh -T <пользователь на вашем роутере>@<ip вашего роутера> bash"

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

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

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

# получить список заблокированных ip адресов
ip_block_full_get() {
        echo "/sbin/ipset save reductorblock" | $SSH | __only_ip
}

Шаг 3. Завершаем настройку:

  1. Создаем нужный ipset с hash типом net на роутере. Например:
    ipset create reductorblock hash:net
    
  2. Если пользователь на вашем маршрутизаторе не root, добавляем в файлике /etc/sudoers
    После строчек %sudo ALL=(ALL:ALL) ALL
    <пользователь на вашем роутере> ALL=(ALL:ALL) NOPASSWD:/sbin/ipset save
    <пользователь на вашем роутере> ALL=(ALL:ALL) NOPASSWD:/sbin/ipset add
    <пользователь на вашем роутере> ALL=(ALL:ALL) NOPASSWD:/sbin/ipset del
    

    И добавляем в сам hook перед "/sbin/ipset" sudo

  3. Указываем правильные IP адрес роутера и логин в переменной $SSH
  4. Генерируем ssh ключи ключи:
    chroot /app/reductor 
    /usr/bin/ssh-keygen
    
  5. Включаем и добавляем авторизацию по ключам:
    chroot /app/reductor 
    /usr/bin/ssh-copy-id <пользователь на вашем роутере>@$<ip_роутера>
    
  6. Проверяем вручную команду
    TIMEOUT=0 chroot /app/reductor /usr/local/Reductor/bin/events.sh
    
  7. Всю папку .ssh/ необходимо скопировать по пути /app/reductor/cfg/ чтобы ключи не пропали при обновлении:
    mkdir -p /app/reductor/cfg/root/.ssh/
    cp /app/reductor/root/.ssh/* /app/reductor/cfg/root/.ssh/
    
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.