В Густелёв Posted May 31, 2013 Итак, коллеги, имею странную проблему. В сети 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-преобразования и виден исходящий, но мне кажется, что достаточно будет входящего. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
EShirokiy Posted May 31, 2013 (edited) Мечта Кайна исполнилась) Извините за флуд Edited May 31, 2013 by EShirokiy Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 Собственно, я забыл обозначить суть топика. В рамках данного обсуждения я бы хотел: - понять почему это происходит - понять, как от этого защищаться Я надеюсь, что проблема воспроизведется на тестовом стенде, и тогда можно будет точно понять, какие шаги помогают Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SergeiK Posted May 31, 2013 Этот сервер - он же Кор? Или только NAT? Можно ли завернуть трафик на этого клиента через другой NAT? Может особенность бага именного данного проца/сетевухи/ОС-и? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted May 31, 2013 как от этого защищаться Ограничивать кол-во сессий ДО сервера с NAT. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
srg555 Posted May 31, 2013 snark Как? Основная задача NAT - построение таблицы xlat. Чтобы отслеживать кол-во сессий до сервера NAT, надо поставить ещё один сервер до него, который, по сути, будет делать ровно тоже самое Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Tosha Posted May 31, 2013 Считать сессии, при превышении всех разумных порогов перекидывать в другой VLAN и на любой адрес показывать страницу "у вас вирус, полечите компьютер и нажмите эту кнопку и в течение 10 минут все включится". Или, если железо умеет, ограничить количество сессий. Или выдать ему реальный IP Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 Если отключить всех абонентов и включить только одного КЛИЕНТА, сеть всё равно ложится. То есть, это не усталось на фоне общей нагрузки, это проблема в конкретном трафике. Суммарное количество трансляций абонента около 30-40 тысяч в момент проблемы. Наш сервер может прокачать такое количество трансляций Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted May 31, 2013 Как? Например так: Интернеты <-> Cisco SCE <-> NAT <-> юзер Ну или так: Интернеты <-> NAT <-> Cisco SCE <-> юзер SCE Вам и трафик отшейпит и сессии порежет и много чего еще сделает. cmhungry, у которого много NAT трафика, тут расписывал как у них NAT + SCE работает - почитайте, думаю будет полезно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
srg555 Posted May 31, 2013 snark Понятно, это примерно то что я и подумал. Но ставить SCE только ради ограничения сессий на абонента это мегаоверкилл. И вообще у автора похоже не в кол-ве проблема... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
EShirokiy Posted May 31, 2013 Извините, у вас чисто спортивный интерес? Не проще ли пообщаться с абонентом или вообще отключить его (за вирусную активность, например) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 (edited) Извините, у вас чисто спортивный интерес? Не проще ли пообщаться с абонентом или вообще отключить его (за вирусную активность, например) Проблема очень сложно локализуется, и когда это начнется у другого абонента, мы простоим час без интернета пока узнаем его адрес. Я думал, что установка двух серверов и параллелизация (с резервированием) решит проблему, но так как такой абонент в одиночку кладёт мою текущую конфигурацию - проблема таким образом не решается. Анализатор показывает, что с каждым хостом клиент пообщался максимум 12-20ю пакетами. Это значит, что установка ограничения количества потоков на шейпере проблему не решит: примерно такое же количество пакетов проходит и в случае отбрасывания. А ставить шейпер перед Натом (ближе к интернету) нельзя, т.к. у нас нат один ко многим Edited May 31, 2013 by В Густелёв Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
bos9 Posted May 31, 2013 (edited) отгрепать все хосты из дампа, с которыми общался клиент и, отсеивая их последовательно, попытаться выделить тот самый? Edited May 31, 2013 by bos9 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
BiWiS Posted May 31, 2013 FIN,SYN,RST,ACK порубить для начала на абоненте? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 Пока я делаю вывод, что проблема связана с большим количеством трансляций на один ip. До 45 000 трансляций все в порядке, а потом растет по 1% н а каждую тысячу трансляций. Тысячу трансляций клиент генерит за пару секунд. С каждым хостом он общается маленьким количеством пакетов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Axen Posted May 31, 2013 (edited) А может быть там не простой клиент,а целый "зоопарк хомячков"? Edited May 31, 2013 by Axen Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 А может быть там не простой клиент,а целый "зоопарк хомячков"? тогда модель использования траффика была бы похожа на офис - много http, ютуба и торрентов а тут фигня какая-то Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DruGoe_DeLo Posted May 31, 2013 Все подозрения на nat. Ради интереса я поднимал на торрент клиенте 4 милиона соединений. Конечно портов в нате не хватило и только тупо у меня был интернет. Причём параллельно с этим ложился и сервис pppoe. Ограничьте количество соединений с интернетом для каждого IP и настройте очереди на полу открытые сессии. Если этому пользователю дать белый IP проблема повторяется? Если не повторяется то это почти 99% разобраться с nat соединениями и очередями. Если проблема повторяется даже с белым IP то нужно анализировать трафик. Например читал статью (к сожалению не смог найти на неё ссылку) про juniper. Всем хороша железочка но при отсалании определённого пакета на её порт железяка просто дико висла. Так же похожие статьи читал и про интоловские сетевые (серверные) карты. Но вроде бы и там и там ошибку учли и исправили. Так же совет внимательно изучить на какие IP он делает запросы, проследить так сказать куда он зализиет. И если будет онамальное обращение например на соц сети ютуб контакт и тд и тп. То скорее всего он раздаёт трафик другим пользователям. Проблема решается просто. Едим к нему на адрес. Опрашиваем людей мол к какому бы интернету подключится да подешевле. И если раздаёт он. И он у вас подключен как физ лицо. Его к себе на ковёр. Ну а станет рыпаться заявку в рос надзор. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted May 31, 2013 Посмотрел траффик, все очень просто, SYN flood на порт 6881, из 275894 пакетов - 99988 SYN на оный, и это за минуту. 1666 SYN запросов в секунду! И еще море UDP сессий,которые засрут connection state. Что интересно, тут советуют поставить SCE перед NAT... не поможет! Данный индивидуум _раздает_ и долбят запросами видимо NAT сервер. Причем раздает видимо очень много. Фактически это новый метод атаки, после DNS amplification :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
BiWiS Posted May 31, 2013 Ну вот, подтвердили, я же написал - рубите. Поставте лимит 10000 в минуту, должно хватить. Можно и поменьше. Не понимаю как вы до сих пор на такое не напоролись, я регулярно наблюдаю похожих индивидов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 Посмотрел траффик, все очень просто, SYN flood на порт 6881, из 275894 пакетов - 99988 SYN на оный, и это за минуту. 1666 SYN запросов в секунду! И еще море UDP сессий,которые засрут connection state. Что интересно, тут советуют поставить SCE перед NAT... не поможет! Данный индивидуум _раздает_ и долбят запросами видимо NAT сервер. Причем раздает видимо очень много. Фактически это новый метод атаки, после DNS amplification :) да, тоже уже получил результаты анализа какие будут предложения, коллега, если учитывать, что у нас два freebsd сервера? Шейпить syn-пакеты? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alkanaft Posted May 31, 2013 а без ната совсем никак? выдать клиенту белый адрес и поглядеть трафик. ну или сделать нат на pf c set optimization aggressive set limit states 50000 тут по количеству трансляций на одного хомячка вполне может быть проблема Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted May 31, 2013 BiWiS - как рубить, если он раздает? :) Просто анонсирует кучу торрентов видимо, и прилетает траффик на НАТ сервер. Учитывая что это не его реальник, а сервера, получается сессии к нему не относятся, и будет флуд. Таких только вручную вычислять, видимо... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alkanaft Posted May 31, 2013 ну и вообще, sysctl.conf ф студию! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
В Густелёв Posted May 31, 2013 BiWiS - как рубить, если он раздает? :) Просто анонсирует кучу торрентов видимо, и прилетает траффик на НАТ сервер. Учитывая что это не его реальник, а сервера, получается сессии к нему не относятся, и будет флуд. Таких только вручную вычислять, видимо... так если мы не будем в какой-то момент создавать новые трансляции абоненту, то все будет ок, пакеты на новые дестинейшны не будут проходить нат пока не состарятся старые. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...