Port Knocking с использованием ICMP на Mikrotik

Данный вариант отличается от классического Port Knocking тем, что вместо определенных портов мы будем использовать ICMP-пакеты различного размера. Это проще сделать стандартными средствами ОС и труднее поддается анализу при перехвате трафика, так как не столь бросается в глаза.

Несмотря на стандартный размер MTU в 1500 байт, это значение может быть уменьшено при использовании VLAN, VPN и т.д., поэтому мы не советуем использовать пакеты размером более 1000 байт, также учтите размер заголовков ICMP-пакета в 28 байт.

Просто выберите два (или более) произвольных числа до 1000, которые и будут вашими ключами для Port Knocking, в нашем случае это будут 250 и 209. Точно также, как и в предыдущем способе правила будут строиться относительно разрешения для уже установленных соединений.

Нам снова понадобится создать два правила для добавления адреса источника в соответствующие листы. В первом правиле укажем на General: Chain – input, Protocol – icmp, а на Advanced: Packet Size – 278 (250 + 28) – размер нашего первого пакета, на Action: Action – add src to address list, Address List – KNOCK-1, Timeout – 00:00:30.

Вкладка: Advanced

9999

Вкладка: Action

888

Во втором зададим следующие значения: General: Chain – input, Protocol – icmp, Advanced: Src. Address List – KNOCK-1, Packet Size – 237 (209 + 28) – размер второго пакета, на Action: Action – add src to address list, Address List – KNOCK-ACCEPT, Timeout – 00:01:00.

Либо выполним в терминале:

/ip firewall filter
add action=add-src-to-address-list address-list=KNOCK-1 address-list-timeout=30s chain=input packet-size=278 protocol=icmp
add action=add-src-to-address-list address-list=KNOCK-ACCEPT address-list-timeout=1m chain=input packet-size=237 protocol=icmp src-address-list=KNOCK-1

Данные правила следует расположить выше правила разрешающего установленные и сопутствующие соединения. Остальные настройки полностью повторяют предыдущий способ.

Чтобы постучаться таким образом из Linux выполним:

ping XXX.XXX.XXX.XXX -s 250 -c 1
ping XXX.XXX.XXX.XXX -s 209 -c 1

Где ключ -s задает размер пакета (без учета заголовка), а ключ -с количество посылаемых пакетов, в нашем случае один.

В Windows синтаксис будет немного иной:

ping XXX.XXX.XXX.XXX -l 250 -n 1
ping XXX.XXX.XXX.XXX -l 209 -n 1

Здесь за размер пакета отвечает ключ -l, а за количество пакетов -n.

В Windows можно просто создать *.cmd и *.bat файл с таким содержимым.

Принцип работы не отличается от предыдущего метода, получив ICMP-пакет размером в 250 байт адрес источника будет занесен в первый список. Затем в течении 30 секунд мы должны прислать второй пакет размером в 209 байт, в этом случае адрес будет занесен в список KNOCK-ACCEPT и в течении минуты с устройством можно будет установить соединение.

На наш взгляд данный способ более удобен, так как позволяет использовать только штатные инструменты операционных систем и более сложен для выявления при анализе трафика. Также можно сочетать сразу оба способа, скажем, сначала постучать на выбранный порт, а затем прислать ICMP-пакет нужного размера. В любом случае выбор остается за вами и ограничивает вас только ваша фантазия и здравый смысл.

Port Knocking с использованием ICMP на Mikrotik
Scroll to top