Comments 29
Есть готовый knockd, кстати.
Интересный скрипт =))) Добавлю, что сам метод стар как мир и имеет название не ICMP открывашка, а "Port Knocking" =))) По крайней мере, у микротофилов довольно распространенная штука)) Можно, кстати, делать списки и организовывать многоуровневый порт кнокинг, чтобы первый удачный пакет лишь помещал IP адрес в белый список, который позволяет пробить пинг с новым размером пакета, и так далее. Плюс списки можно разделять, чтобы открывать доступ к определенным сервисам. А тех, кто не угадал (и вообще, перебирать начинает) - в бан на несколько месяцев. Но стандартный пинг со стандартным размером пакета надо разрешить, ибо без него может быть проблема с маршрутизацией - некоторые маршрутизаторы в интернете пингуют клиентский внешний адрес, который к нему уже обращался - что-то вроде keepalive для соединения.
Спасибо за идею, следующий этап: от простого к сложному)))
Но стандартный пинг со стандартным размером пакета надо разрешить
А пинг вообще трогать не надо. Он должен фунциклировать так, словно кнокера вообще нет. То есть контроль размера входящего пакета и добавление разрешающего правила идут не вместо стандартной реакции на ICMP, а в дополнение/параллель к нему.
Заодно хрен определить, что пинг с пакетом в сколько-то байтов выполнил какую-то специфическую функцию. Особенно если между его приходом и открытием доступа положить полуслучайный тайм-аут.
A ещё можно надставить скрипт так, чтобы между пингом и открытием доступа был тайм-аут секунд в 5-10, а при поступлении в течение этого времени неправильного пинга запланированное открытие доступа для адреса-источника отменялось. Тогда брутфорс-скрипты совсем бессмысленны.
Не проблема написать скрипт который откроет ваши порты меньше чем за минуту. Учитывая что стандартный mtu 1500, то надо всего 1500 пакетов отправить с размером от 0 до 1500 это меньше минуты. Такая себе защита. Вы на сервер вешаете публичный адрес или все icmp пакеты приходящие на маршрутизатор/firewall натите в сторону сервера?
Вы знаете IP-адреса моих серверов, чтобы открыть их? Скрыть порты, а не защитить! Не вижу принципиальной разницы: натить трафик или вешать публичный IP на хост, например: мой домашний провайдер натит (1:1) трафик со своего внешнего адрес на мой серый IP.
По идее, защита от этого — открывать порты не по одному пингу, а после прихода 256 пакетов, каждый из которых имеет заданный размер из 0...1500.
А не лучше спрятать 443/tcp за Nginx, который будет перенаправлять все запросы с определенным URL на ваш секретный сервис, а с другими URL - показывать сайт про кошечек/собачек?
Никогда не понимал нокинг, костыли какие-то ИМХО. Повешайте сервис на неродной порт и не будут боты его там искать. Все равно, если будут целенаправленно долбить ваш хост, нокинг вас не спасет (а может даже и хуже сделает).
А если хочется прям безопасную безопасность, то делайте полноценный VPN во внутреннюю сеть.
Я ж не утверждаю, что это прям продакшн решение, просто поделился идеей.
Вот есть у меня VDSка за 300 руб/мес и цепляюсь я к ней раз в неделю, предлагаете нестандартный порт юзать - не люблю я эти извращения, потом попробуй разберись на какой тачке какой порт SSH и вешать на каждый узел по VPN-серверу
Вроде как Shodan утверждает обратное: на каком бы порту вы ни висели, вас найдут :)
возникла необходимость скрывать порты (22, 443 и т.п.) от посторонних глаз
необходимость? не верю.
Не проще всего лишнее убрать в wg?
как вариант, можно поставить OTP генератор и раз в минуту менять требуемый размер пакета
Security through obscurity во всей красе (это, впрочем, ко всему порт-нокингу относится)
Надеюсь, у вас есть какой-нибудь бэкдор, чтобы внезапно не остаться без доступа к нужному серверу, случись вам оказаться в странном сетевом окружении с забавным MTU
Всегда интересовало, почему в подобных мануалах не пытаются использовать ICMP Payload. Там ведь можно практически полноценный (хоть и не защищённый от перехвата) пароль передать: ping -p 4869204869
Кстати, и эти штуки боты научились обходить.
Как это упростить для простого обывателя с Андроид-телефоном до уровня "нажать туда, нажать сюда"?
ICMP открывашка портов для сервера