В Linux это можно реализовать специальным софтом knockd или сделать вручную правила для iptables примерно так же, как в Mikrotik. Там под капотом тот же iptables. Настраивается очень просто. Ниже набор правил для открытия доступа на 30 секунд при отправке 1 icmp пакета размером ровно 116 байт. Во всех примерах в интернете в основном не пингуют, а стучат в разные TCP порты. Мне реализация на базе icmp кажется проще и удобнее, главное, чтобы icmp не был заблокирован:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 144 -m recent --name SSH_KNOCK --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --name SSH_KNOCK --rcheck --seconds 30 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Теперь пингуем на винде:
> ping 192.168.137.38 -n 1 -l 116или в линуксе:
# ping 192.168.137.38 -c 1 -s 116 и нам открывается 22-й порт.
Выше очень простое решение с 1-м пакетом. По идее надо посложнее, но там тогда правил заметно больше будет и надо жонглировать списками. Мне кажется, и такого подхода достаточно. Мы же не прямой доступ к чему-то открываем, а к какой-то службе, где далее будет аутентификация пользователя. Даже в таком виде вычислить со стороны, что у нас там открывается и как очень сложно.
На практике я очень редко этим пользуюсь, хотя настраиваю. На всех своих Микротиках с доступом извне port knocking на всякий случай настроен. Метод неудобен тем, что нужно куда-то записать ключи для ping, либо сохранить в скрипте. Если надо подключиться, то начинаешь вспоминать, как настроено, где записано. В этом плане VPN удобнее и функциональнее. Подключился один раз по настроенному соединению и пользуешься. Всё стандартно для всех подобных случаев.
Но сейчас настали такие времена, когда port knocking имеет смысл настраивать. VPN запросто может не работать. Софт типа Anydesk тоже работает через раз, особенно через мобильную связь. Нет 100% уверенности, что удастся подключиться здесь и сейчас.
Port knocking в этом плане очень прост и надёжен. Открывается конкретно для тебя на короткий срок прямой доступ. При этом установленное соединение уже не ограничено по времени. Пинганул свой внешний файрвол, он открыл для тебя доступ на 1 минуту. Ты подключился и работаешь, пока связь не оборвётся. Потом ещё раз можно пингануть для нового соединения. Этот подход нормально работает для SSH или RDP.
Есть развитие этого подхода в виде HTTP запросов для открытия доступа. С ними чуть проще в плане удобства, так как можно сохранить нужную ссылку и потом просто переходить по ней для открытия доступа. Но это не очень безопасно, так как ссылку могут где-то по почте или мессенджерах передавать, больше шансов что она куда-то на сторону уйдёт. Реализовать подобное можно в таких бесплатных проектах, как:
▪️Labean
▪️Updater
▪️webhook
Делается обычный вебхук, который создаёт правило в файрволе на основе клиентского IP адреса.
Настраиваете у себя что-то подобное? Может есть ещё какие-то инструменты для этого, чтобы в одно действие и пингануть сразу как нужно, и запустить клиент с подключением, чтобы это можно было кому-то отдать, как готовое решение, куда надо только пароль потом ввести. Я вроде что-то подобное видел, но сейчас не могу вспомнить.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX
#gateway