Как стать автором
Обновить

Комментарии 29

Идея, действительно, не новая. Если интересно посмотреть на существующее решение, то вот: linux.die.net/man/1/knockd

Есть готовый knockd, кстати.

Интересный скрипт =))) Добавлю, что сам метод стар как мир и имеет название не ICMP открывашка, а "Port Knocking" =))) По крайней мере, у микротофилов довольно распространенная штука)) Можно, кстати, делать списки и организовывать многоуровневый порт кнокинг, чтобы первый удачный пакет лишь помещал IP адрес в белый список, который позволяет пробить пинг с новым размером пакета, и так далее. Плюс списки можно разделять, чтобы открывать доступ к определенным сервисам. А тех, кто не угадал (и вообще, перебирать начинает) - в бан на несколько месяцев. Но стандартный пинг со стандартным размером пакета надо разрешить, ибо без него может быть проблема с маршрутизацией - некоторые маршрутизаторы в интернете пингуют клиентский внешний адрес, который к нему уже обращался - что-то вроде keepalive для соединения.

Спасибо за идею, следующий этап: от простого к сложному)))

Но стандартный пинг со стандартным размером пакета надо разрешить

А пинг вообще трогать не надо. Он должен фунциклировать так, словно кнокера вообще нет. То есть контроль размера входящего пакета и добавление разрешающего правила идут не вместо стандартной реакции на ICMP, а в дополнение/параллель к нему.

Заодно хрен определить, что пинг с пакетом в сколько-то байтов выполнил какую-то специфическую функцию. Особенно если между его приходом и открытием доступа положить полуслучайный тайм-аут.

A ещё можно надставить скрипт так, чтобы между пингом и открытием доступа был тайм-аут секунд в 5-10, а при поступлении в течение этого времени неправильного пинга запланированное открытие доступа для адреса-источника отменялось. Тогда брутфорс-скрипты совсем бессмысленны.

К слову, я ICMP вообще не трогаю, только нюхаю ICMP пакет с определенным размером
tcpdump -n -c1 -i any icmp[icmptype] == icmp-echo and ip[2:2] == $PACKAGE_SIZE

Не проблема написать скрипт который откроет ваши порты меньше чем за минуту. Учитывая что стандартный mtu 1500, то надо всего 1500 пакетов отправить с размером от 0 до 1500 это меньше минуты. Такая себе защита. Вы на сервер вешаете публичный адрес или все icmp пакеты приходящие на маршрутизатор/firewall натите в сторону сервера?

Вы знаете IP-адреса моих серверов, чтобы открыть их? Скрыть порты, а не защитить! Не вижу принципиальной разницы: натить трафик или вешать публичный IP на хост, например: мой домашний провайдер натит (1:1) трафик со своего внешнего адрес на мой серый IP.

По идее, защита от этого — открывать порты не по одному пингу, а после прихода 256 пакетов, каждый из которых имеет заданный размер из 0...1500.

Каждый входящий ICMP пакет запускает несколько экземпляров bash, внутри которых крутятся sed и awk. Для хорошей, качественной DOS атаки не нужен ботнет, достаточно обычного ping. Так себе защита.

А не лучше спрятать 443/tcp за Nginx, который будет перенаправлять все запросы с определенным URL на ваш секретный сервис, а с другими URL - показывать сайт про кошечек/собачек?

Конечно лучше, 443 порт как пример указал

Никогда не понимал нокинг, костыли какие-то ИМХО. Повешайте сервис на неродной порт и не будут боты его там искать. Все равно, если будут целенаправленно долбить ваш хост, нокинг вас не спасет (а может даже и хуже сделает).

А если хочется прям безопасную безопасность, то делайте полноценный VPN во внутреннюю сеть.

Я ж не утверждаю, что это прям продакшн решение, просто поделился идеей.
Вот есть у меня VDSка за 300 руб/мес и цепляюсь я к ней раз в неделю, предлагаете нестандартный порт юзать - не люблю я эти извращения, потом попробуй разберись на какой тачке какой порт SSH и вешать на каждый узел по VPN-серверу

Есть же ~/.ssh/config

согласен с вами обоими. ни нестандартный порт, ни порт нокинг для ssh не нужны )))

Вроде как Shodan утверждает обратное: на каком бы порту вы ни висели, вас найдут :)

возникла необходимость скрывать порты (22, 443 и т.п.) от посторонних глаз

необходимость? не верю.

А я и не заставляю

Не проще всего лишнее убрать в wg?

Именно. Всё в дроп, кроме идущего из wg. Как сломал, так в консоль в админке.

Если у вас на той же машине работает веб сервер, то можно использовать sslh или решение на базе websockets: habr.com/ru/post/531590

как вариант, можно поставить OTP генератор и раз в минуту менять требуемый размер пакета

Длина otp великовата. Придётся как-то обрезать. Можно брать остаток от деления на небольшое секретное число. И зачем вообще изобретатели пароли, ключи и fail2ban :)

Security through obscurity во всей красе (это, впрочем, ко всему порт-нокингу относится)

Надеюсь, у вас есть какой-нибудь бэкдор, чтобы внезапно не остаться без доступа к нужному серверу, случись вам оказаться в странном сетевом окружении с забавным MTU

Всегда интересовало, почему в подобных мануалах не пытаются использовать ICMP Payload. Там ведь можно практически полноценный (хоть и не защищённый от перехвата) пароль передать: ping -p 4869204869

Кстати, и эти штуки боты научились обходить.

Как это упростить для простого обывателя с Андроид-телефоном до уровня "нажать туда, нажать сюда"?

Вам не повезло, все упрощенные и типовые установки будут нещадно блокироваться, останутся только хитровыдуманные, где владелец не поленился сделать максимально дикую схему работы "все через ж". Пока белые списки не введут...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории