Port Knoking на домашньому роутері Asus через BusyBox

Автор | 15.03.2023

Для налаштування port knocking на роутері Asus з BusyBox потрібно виконати наступні кроки:

1)Зайти до консолі роутера через SSH.

2)Створити файли з правильними дозволами:

mkdir /jffs/scripts
cd /jffs/scripts
touch knock.sh
chmod 700 knock.sh
touch knockd.sh
chmod 700 knockd.sh

3)

Відредагувати файли скриптів knock.sh та knockd.sh. У файлі knock.sh потрібно вказати порти, які треба “стукнути”, а в файлі knockd.sh – команди, які мають виконатися після правильного “стукування”:

knock.sh:

#!/bin/sh
# knock.sh - port knocking script
# usage: knock.sh <ip> <ports>
/usr/sbin/iptables -N KNOCKING
/usr/sbin/iptables -F KNOCKING
/usr/sbin/iptables -A KNOCKING -p tcp --dport $2 -m recent --name KNOCK1 --set -j DROP
/usr/sbin/iptables -A KNOCKING -m recent --rcheck --name KNOCK1 -j DROP
/usr/sbin/iptables -A KNOCKING -p tcp --dport $3 -m recent --name KNOCK2 --set -j DROP
/usr/sbin/iptables -A KNOCKING -m recent --rcheck --name KNOCK2 -j DROP
/usr/sbin/iptables -A KNOCKING -p tcp --dport $4 -m recent --name KNOCK3 --set -j DROP
/usr/sbin/iptables -A KNOCKING -m recent --rcheck --name KNOCK3 -j DROP
/usr/sbin/iptables -A KNOCKING -j RETURN
/usr/sbin/iptables -I INPUT -s $1 -j KNOCKING

knockd.sh:

#!/bin/sh
# knockd.sh - command to execute after knock
# usage: knockd.sh
/usr/sbin/iptables -D INPUT -j KNOCKING
/sbin/route add -host 192.168.1.1 gw 192.168.1.254

4) Зберегти файли скриптів та виконати наступні команди:

chmod +x knock.sh
chmod +x knockd.sh
/jffs/scripts/knock.sh 192.168.1.100 1111 2222 3333

У даному прикладі ми використовуємо IP-адресу пристрою, який ми хочемо з’єднати з роутером, та порти 1111, 2222, 3333, які потрібно “стукнути”.

5)Після того, як ви встановили knockd, вам потрібно створити файл конфігурації. Для цього запустіть наступну команду:

nano /opt/etc/knockd.conf

У вікні редактора додайте наступний код:

[options]
    logfile = /var/log/knockd.log

[opencloseSSH]
    sequence    = 7000,8000,9000
    seq_timeout = 15
    tcpflags    = syn
    command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpport     = 22

У цьому коді, logfile – це шлях до лог-файлу knockd.log. opencloseSSH – це назва послідовності, яку ви хочете відкрити для доступу до порту SSH, sequence – це порядок портів, який ви відкриваєте, seq_timeout – це час очікування послідовності в секундах, tcpflags – це типи TCP-пакетів, які можна використовувати.

Після того, як ви встановили knockd, потрібно створити файл конфігурації для цього демона. Файл конфігурації зазвичай розміщується за шляхом /etc/knockd.conf. Ви можете створити файл конфігурації за допомогою будь-якого текстового редактора, наприклад nano або vi.Нижче наведено приклад простого файлу конфігурації для knockd, який містить один поріг:

[options]
        logfile = /var/log/knockd.log

[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        tcpflags    = syn
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpport     = 22

Цей файл конфігурації визначає один поріг з ім’ям openSSH. Цей поріг вимагає послідовності портів 7000, 8000 та 9000. Якщо послідовність правильна, knockd виконає команду для відкриття порту 22 для вказаної IP-адреси.

Це простий приклад, і ви можете створювати більш складні конфігурації, використовуючи різні пороги та команди для кожного з них.

Після створення файлу конфігурації збережіть його та перезапустіть службу knockd командою:

service knockd restart

Налаштувати файрвол на роутері для заборони доступу до порту, якщо не була правильно введена послідовність портів.Ось приклад конфігурації для файрволу на роутері Asus з BusyBox:

iptables -N KNOCKING
iptables -A KNOCKING -m recent --remove --name KNOCK1 -j RETURN
iptables -A KNOCKING -m recent --remove --name KNOCK2 -j RETURN
iptables -A KNOCKING -m recent --remove --name KNOCK3 -j RETURN
iptables -A KNOCKING -m recent --set --name KNOCK1 -p tcp --dport 12345 -m recent --rcheck --name KNOCK2 -j RETURN
iptables -A KNOCKING -m recent --set --name KNOCK2 -p tcp --dport 54321 -m recent --rcheck --name KNOCK3 -j RETURN
iptables -A KNOCKING -m recent --set --name KNOCK3 -p tcp --dport 9876 -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --rcheck --seconds 30 --name KNOCK3 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j KNOCKING
iptables -A INPUT -j DROP

Цей скрипт створює цепочку “KNOCKING” та налаштовує правила для блокування доступу до порту 22, якщо правильна послідовність портів не була введена. Перші три правила перевіряють правильність послідовності портів, а наступні два правила дозволяють доступ до порту 22 тільки після правильного набору портів і блокують решту вхідних підключень. Не забудьте змінити порти в конфігурації на ті, які ви хочете використовувати для port knocking.

1 коментар до “Port Knoking на домашньому роутері Asus через BusyBox

  1. vanich Автор запису

    це мої роздуми на тему busybox, думаю що зручніше коли є сервер на linux (в моєму випадку Ubuntu server на raspberry), але можно все зробити тільки на роутері, цей варіант для мінімальної конфігураціі

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *