Назад | Перейти на главную страницу

Файлы cookie SYN на внутренних машинах

Наша система использует Cassandra, работающую на Ubuntu 10.04, и во время последнего всплеска трафика мы наблюдали в журналах следующее сообщение:

possible SYN flooding on port 9160. Sending cookies.

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

Кто-нибудь знает, каковы последствия перехода ядра в режим "cookie" для вызывающей стороны? Я понимаю, что сервер перестает добавлять полуоткрытые соединения (SYN_RECV) в очередь невыполненных работ, но влияет ли это каким-либо образом на вызывающего абонента (т.е. на наше приложение .NET)? Есть ли какое-то дросселирование / задержка, которые могут запустить порочный круг?

Имеет ли смысл эта защита, учитывая, что это внутренние машины? Как насчет значения по умолчанию tcp_max_syn_backlog=1024?

Учитывая, что это действительный трафик, вы захотите отключить это поведение - использование файлов cookie SYN на каждой стороне соединения значительно снижает производительность. Идея состоит в том, чтобы предотвратить истощение ресурсов ОЗУ при SYN-потоке, переложив нагрузку на ЦП (память не выделяется с куки-файлами до тех пор, пока не будет получен действительный ответ).

Однако вычисление последовательности требует больших вычислительных ресурсов и может повлиять как на ваше приложение, так и на сервер, ограничивающим фактором будет ЦП. Это механизм предотвращения DDoS-атак, а не то, что вы должны запускать, когда известно, что трафик хороший, а в таком случае это, по сути, трата ресурсов. Почему вам не нужны интенсивные вычисления для всего вашего трафика?

Если вы отключили файлы cookie синхронизации и считаете, что в результате ваш сервер потенциально уязвим, вы можете либо добавить на сервер логику для повторного включения файлов cookie при обнаружении переполнения на других портах, либо разместить IDS / LoadBalancer или аналогичный посередине, где есть выделенные ресурсы для обработки такого рода атак.

Вы можете просто отключить их, используя:

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

Чтобы сделать изменение постоянным, отредактируйте /etc/sysctl.conf добавьте строку вроде:

net.ipv4.tcp_syncookies=0

Я не думаю, что это будет проблемой, если трафик будет генерироваться локально и законно, если вы сами не залите свой сервер :)