Jump to content
Калькуляторы

Один клиент кладёт мой мега-сервер своим жалким трафиком

Итак, коллеги, имею странную проблему. В сети 3000+ пользователей, трафик проходит сначала через SHAPER-сервер, затем попадает на отдельный NAT-сервер.

В нормальном режиме через NAT проходит 700Мбпс, 70-120kpps, ядра нагружены на 30%

Но периодически у нас возникает скачок на всех ядрах до 100% с полным прекращением сервиса. Обычно это происходит в ЧНН вечером.

При отключении аплинка, ядра резко разгружаются. В течении некоторого времени после инцидента если вернуть аплинк, нагрузка возрастает практически моментально. Такие падения у нас продолжаются 15-20 минут, после чего все симптомы пропадают. Так как процессор нагружен в 100%, было проблематично анализировать трафик на предмет аномалий, а странная периодичность проблемы не позволяла нам успеть сделать миррор трафика.

 

Однако, вчера это произошло довольно поздно ночью и я решил разобраться: отключил аплинк, получил доступ в консоль. Затем добавил

ipfw add 1 deny ip from any to any

и вернул аплинк. После чего последовательно выводил подсети в интернет и наблюдал за нагрузкой.

 

И результат поразил меня: проблема заключается в трафике одного конкретного клиента. То есть, я подключил всех-всех-всех клиентов и всё в норме, но как только я пускаю этого клиента в сеть - нагрузка на процессор начинает возрастать и после определенного порога наступает резкая полка. Проблема 100% воспроизводится.

 

Дальше факты:

HP ProLiant DL160G6

Сетёвки IGB

9.0-RELEASE FreeBSD

 

ipfw - конфигурация, достаточная для воспроизведения проблемы:

ipfw nat 3111 config igb0 ip 31.163.206.111

ipfw add nat 3111 ip from any to 31.163.206.111 in recv vlan158

ipfw add nat 3111 ip from 10.1.10.40 to any out xmit vlan158

 

Описание проведенных экспериментов:

1. Отключаем весь интернет. Подаем интернет всем, кроме КЛИЕНТА. Всё работает. = проблема в конкретном клиенте

2. Отдаем этот внешний IP-адрес другому клиенту. КЛИЕНТ - выключен. Всё работает. = проблема не привязана к внешнему адресу (т.е. это не DDOS на внешний IP).

3. Даем КЛЕНТУ другой внешний IP-адрес. Проблема воспроизводится. Подтверждаем тезис №2

4. КЛИЕНТ включен. Отключаем ему порт (убираем его исходящий трафик). Входящий трафик остается. Проблема воспроизводится. = проблему вызывает не трафик от абонента, а трафик из интернета, спровоцированный абонентом

 

Таким образом, у чувака стоит какая-то штука, которая обращается куда-то в интернет, призывает некий адовый трафик, он возвращается и кладёт мне прекрасный восьмиядерный сервак. Это трафик не имеет аномальной мощности по мегабитам или pps, по картине напоминает торренты. За 4 минуты статистика по трафику:

2,5 мбс

1200 pps

68% - TCP, остальное UDP

 

Трафик я снял через tcpdump в формате pcap, вы можете изучить его любым wireshark или воспроизвести генератором трафика. Если коллеги ничего мне не посоветуют из своего опыта, я планирую собирать стенд и мучить его генерируемым из этого дампа трафиком.

 

Вы можете скачать дамп трафика вот здесь - он снят на внешнем интерфейсе нат-сервера

 

Также имеется запись трафика в этот же период времени с шейпера, там трафик после NAT-преобразования и виден исходящий, но мне кажется, что достаточно будет входящего.

Share this post


Link to post
Share on other sites

Собственно, я забыл обозначить суть топика.

 

В рамках данного обсуждения я бы хотел:

- понять почему это происходит

- понять, как от этого защищаться

 

Я надеюсь, что проблема воспроизведется на тестовом стенде, и тогда можно будет точно понять, какие шаги помогают

Share this post


Link to post
Share on other sites

Этот сервер - он же Кор? Или только NAT?

Можно ли завернуть трафик на этого клиента через другой NAT?

Может особенность бага именного данного проца/сетевухи/ОС-и?

Share this post


Link to post
Share on other sites

snark

Как? Основная задача NAT - построение таблицы xlat. Чтобы отслеживать кол-во сессий до сервера NAT, надо поставить ещё один сервер до него, который, по сути, будет делать ровно тоже самое

Share this post


Link to post
Share on other sites

Считать сессии, при превышении всех разумных порогов перекидывать в другой VLAN и на любой адрес показывать страницу "у вас вирус, полечите компьютер и нажмите эту кнопку и в течение 10 минут все включится".

 

Или, если железо умеет, ограничить количество сессий.

Или выдать ему реальный IP

Share this post


Link to post
Share on other sites

Если отключить всех абонентов и включить только одного КЛИЕНТА, сеть всё равно ложится.

То есть, это не усталось на фоне общей нагрузки, это проблема в конкретном трафике. Суммарное количество трансляций абонента около 30-40 тысяч в момент проблемы. Наш сервер может прокачать такое количество трансляций

Share this post


Link to post
Share on other sites

Как?

 

Например так:

 

Интернеты <-> Cisco SCE <-> NAT <-> юзер

 

Ну или так:

 

Интернеты <-> NAT <-> Cisco SCE <-> юзер

 

SCE Вам и трафик отшейпит и сессии порежет и много чего еще сделает.

cmhungry, у которого много NAT трафика, тут расписывал как у них NAT + SCE работает - почитайте, думаю будет полезно.

Share this post


Link to post
Share on other sites

snark

Понятно, это примерно то что я и подумал. Но ставить SCE только ради ограничения сессий на абонента это мегаоверкилл. И вообще у автора похоже не в кол-ве проблема...

Share this post


Link to post
Share on other sites

Извините, у вас чисто спортивный интерес? Не проще ли пообщаться с абонентом или вообще отключить его (за вирусную активность, например)

Share this post


Link to post
Share on other sites

Извините, у вас чисто спортивный интерес? Не проще ли пообщаться с абонентом или вообще отключить его (за вирусную активность, например)

Проблема очень сложно локализуется, и когда это начнется у другого абонента, мы простоим час без интернета пока узнаем его адрес.

Я думал, что установка двух серверов и параллелизация (с резервированием) решит проблему, но так как такой абонент в одиночку кладёт мою текущую конфигурацию - проблема таким образом не решается.

 

Анализатор показывает, что с каждым хостом клиент пообщался максимум 12-20ю пакетами. Это значит, что установка ограничения количества потоков на шейпере проблему не решит: примерно такое же количество пакетов проходит и в случае отбрасывания. А ставить шейпер перед Натом (ближе к интернету) нельзя, т.к. у нас нат один ко многим

Edited by В Густелёв

Share this post


Link to post
Share on other sites

отгрепать все хосты из дампа, с которыми общался клиент и, отсеивая их последовательно, попытаться выделить тот самый?

Edited by bos9

Share this post


Link to post
Share on other sites

Пока я делаю вывод, что проблема связана с большим количеством трансляций на один ip. До 45 000 трансляций все в порядке, а потом растет по 1% н а каждую тысячу трансляций. Тысячу трансляций клиент генерит за пару секунд. С каждым хостом он общается маленьким количеством пакетов.

Share this post


Link to post
Share on other sites

А может быть там не простой клиент,а целый "зоопарк хомячков"?

тогда модель использования траффика была бы похожа на офис - много http, ютуба и торрентов

а тут фигня какая-то

Share this post


Link to post
Share on other sites

Все подозрения на nat. Ради интереса я поднимал на торрент клиенте 4 милиона соединений. Конечно портов в нате не хватило и только тупо у меня был интернет. Причём параллельно с этим ложился и сервис pppoe. Ограничьте количество соединений с интернетом для каждого IP и настройте очереди на полу открытые сессии.

Если этому пользователю дать белый IP проблема повторяется? Если не повторяется то это почти 99% разобраться с nat соединениями и очередями.

Если проблема повторяется даже с белым IP то нужно анализировать трафик. Например читал статью (к сожалению не смог найти на неё ссылку) про juniper. Всем хороша железочка но при отсалании определённого пакета на её порт железяка просто дико висла. Так же похожие статьи читал и про интоловские сетевые (серверные) карты. Но вроде бы и там и там ошибку учли и исправили.

Так же совет внимательно изучить на какие IP он делает запросы, проследить так сказать куда он зализиет. И если будет онамальное обращение например на соц сети ютуб контакт и тд и тп. То скорее всего он раздаёт трафик другим пользователям. Проблема решается просто. Едим к нему на адрес. Опрашиваем людей мол к какому бы интернету подключится да подешевле. И если раздаёт он. И он у вас подключен как физ лицо. Его к себе на ковёр. Ну а станет рыпаться заявку в рос надзор.

Share this post


Link to post
Share on other sites

Посмотрел траффик, все очень просто, SYN flood на порт 6881, из 275894 пакетов - 99988 SYN на оный, и это за минуту. 1666 SYN запросов в секунду! И еще море UDP сессий,которые засрут connection state.

Что интересно, тут советуют поставить SCE перед NAT... не поможет! Данный индивидуум _раздает_ и долбят запросами видимо NAT сервер. Причем раздает видимо очень много.

Фактически это новый метод атаки, после DNS amplification :)

Share this post


Link to post
Share on other sites

Ну вот, подтвердили, я же написал - рубите. Поставте лимит 10000 в минуту, должно хватить. Можно и поменьше. Не понимаю как вы до сих пор на такое не напоролись, я регулярно наблюдаю похожих индивидов.

Share this post


Link to post
Share on other sites

Посмотрел траффик, все очень просто, SYN flood на порт 6881, из 275894 пакетов - 99988 SYN на оный, и это за минуту. 1666 SYN запросов в секунду! И еще море UDP сессий,которые засрут connection state.

Что интересно, тут советуют поставить SCE перед NAT... не поможет! Данный индивидуум _раздает_ и долбят запросами видимо NAT сервер. Причем раздает видимо очень много.

Фактически это новый метод атаки, после DNS amplification :)

 

да, тоже уже получил результаты анализа

какие будут предложения, коллега, если учитывать, что у нас два freebsd сервера? Шейпить syn-пакеты?

Share this post


Link to post
Share on other sites

а без ната совсем никак? выдать клиенту белый адрес и поглядеть трафик.

ну или сделать нат на pf c

set optimization aggressive

set limit states 50000

тут по количеству трансляций на одного хомячка вполне может быть проблема

Share this post


Link to post
Share on other sites

BiWiS - как рубить, если он раздает? :) Просто анонсирует кучу торрентов видимо, и прилетает траффик на НАТ сервер. Учитывая что это не его реальник, а сервера, получается сессии к нему не относятся, и будет флуд.

Таких только вручную вычислять, видимо...

Share this post


Link to post
Share on other sites

BiWiS - как рубить, если он раздает? :) Просто анонсирует кучу торрентов видимо, и прилетает траффик на НАТ сервер. Учитывая что это не его реальник, а сервера, получается сессии к нему не относятся, и будет флуд.

Таких только вручную вычислять, видимо...

так если мы не будем в какой-то момент создавать новые трансляции абоненту, то все будет ок, пакеты на новые дестинейшны не будут проходить нат пока не состарятся старые.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.