Pull to refresh

Прячемся от DDOS за NAT провайдера

Reading time3 min
Views6.8K
UPD Идея не совсем очевидна, подробные объяснения в комментариях.

Не так давно был распечатан последний блок ipv4 адресов. Провайдеры всё реже предоставляют бесплатный внешний ip адрес обычным клиентам, предлагая подключить его как отдельную услугу. При этом пользователей прельщают возможностью удалённого подключения к своему компьютеру, лучшей работой торрентов, возможностью хостить в играх и даже поднять свой веб-серверок… А единственным преимуществом серого ip называется ваша защищённость, т. е. недоступность извне без вашего желания.

В статье рассказывается, как воспользоваться этой возможностью, которая, к тому же, предоставляется совершенно бесплатно, и надёжно защитить свой сервер от атак, сохранив при этом его функциональность.

Что мы сможем получить в идеале:
— Полностью работоспособное клиент-серверное приложение;
— Бесплатная защита от DDOS, способная поглощать flood-трафик, сопоставимый по объёмам с шириной магистрального канала провайдера;
— Программная реализация, без необходимости изменений в сетевой инфраструктуре.


image
Итак, вы находитесь за NAT провайдера и у вас серый IP. Внешний IP ваш компьютер не получает. В принципе, этого достаточно для того, чтобы ваш сервер был защищён от DDOS.

Но вы спросите: а как же добропорядочные пользователи будут подключаться к моему серверу? Он же недоступен извне… Действительно, установить соединение по инициативе клиента не получится. Но вот здесь и начинается самое интересное.

Будем рассматривать ситуацию, когда у вас не просто веб-сервер, а серверное приложение, с которыми взаимодействуют клиенты, также написанные вами. В этом случае вы полностью определяете логику работы как сервера, так и клиентов. Основная идея заключается в том, чтобы дать серверу знать о том, что к нему собирается подключиться клиент. Тогда сервер установит TCP соединение по предоставленному ему адресу, и с этого момента станет возможным полноценное общение клиента и сервера. Оно будет продолжаться до тех пор, пока сервер не разорвёт соединение. Таким образом, сетевое взаимодействие находится полностью под контролем сервера, что позволяет избежать любого нежелательного трафика, включая обычный udp-flood.

Но как же сервер узнает о том, что к нему хотят подключиться?

Здесь открывается широкий простор для фантазии, основанный по большей части на бесплатных решениях. Дело в том, что Logon-сервер (назовём его так) по своей сути представляет собой очень простое приложение (с точки зрения логики работы). Ему необходимо просто получить от клиента IP адрес, к которому необходимо подключиться, и передать его основному серверу. Остальная логика, в том числе фильтрация по IP, может быть реализована уже на нём. Как раз для таких простейших задач и существует огромная бесплатная инфраструктура.

Вот что можно привести в качестве примера:
— Почтовые сервера;
— Google Apps;
— FTP-сервера;
— Бесплатные хостинги (в том числе статика);
— Любой сервис, который предоставляет API и через который можно обменяться информацией.

Повторюсь: нам необходимо просто передать небольшой текстовый фрагмент (содержащий IP адрес и, возможно, другую информацию) от клиента к серверу через третий сервис за разумное время (несколько секунд). Причём сделать это только один раз, при подключении клиента.

Итак, чего же нам удалось добиться.

Мы можем принимать подключения от авторизованных клиентов и полностью игнорировать трафик злоумышленников. Ведь основная проблема состояла как раз в том, что с UDP-флудом бороться практически невозможно (кроме расширения канала). А теперь в нашем распоряжении фактически весь магистральный канал провайдера, и пока он не забит, наш сервис прекрасно работает. У провайдера к нам нет никаких претензий: досер с нами никак не связан, пакеты идут на адрес NAT провайдера и там уничтожаются.

Какие же недостатки предложенного метода?
— Метод подходит только для полноценных клиент-серверных приложений;
— Метод подходит для небольших проектов;
— Обязательно нужно находиться за NAT провайдера;
— Клиенты с серым IP не смогут подключиться.

В заключении хочу сказать, что описанная идея принадлежит лично мне. И у меня есть огромное желание обсудить её с хабравчанами :) Готов ответить на ваши вопросы…
Tags:
Hubs:
Total votes 17: ↑3 and ↓14-11
Comments35

Articles