SYN cookie - техника противодействия SYN-флуд атаке. Изобретатель техники J. Bernstein (недоступная ссылка) определил SYN cookie как "особый выбор начальной TCP-последовательности со стороны сервера". Использование SYN cookie позволяет серверу избегать сброса новых соединений, когда очередь TCP-соединений переполнена. Сервер отправляет обратно клиенту правильную последовательность SYN+ACK, но не сохраняет новое соединение в очереди. Если сервер затем получит ACK ответ от клиента, то он сможет восстановить своё значение SYN последовательности по принятому от клиента значению.
Для создания TCP-соединения клиент отправляет серверу TCP-пакет с флагом SYN и своим номером последовательности. В ответ сервер отправляет пакет с флагами SYN+ACK. номером последовательности клиента и своим собственным номером последовательности. По этим номерам собирается весь TCP-поток. Спецификация TCP определяет что начальные значение этих номеров последовательности определяются самими клиентом и сервером. SYN cookies - это как раз такой номер последовательности, который аккуратно собирается сервером по следующим правилам:
Тогда SYN cookie вычисляется как:
Когда клиент отправляет на сервер завершающий рукопожатие пакет с флагом ACK, то он отправляет первоначальный номер последовательности сервера увеличенный на единицу. Для проверки корректности SYN cookie, сервер отнимает от неё единицу и выполняет следующие проверки:
С этого момента соединение работает как обычно.
Использование SYN cookie не нарушает работу ТСP и других протоколов. Однако в данной технике есть два ограничения [1]:
В то время как эти ограничения ведут к не оптимальному использованию протокола TCP, негативные последствия редко отражаются на клиентах, т.к. SYN cookie должны использоваться только при атаках на сервер. Игнорирование некоторых возможностей протокола TCP в угоду доступности сервера является разумным компромиссом.
Однако проблема возрастает когда теряется финальный ACK-пакет от клиента, а протокол прикладного уровня требует, чтобы сервер был инициатором дальнейшего взаимодействия (например, протоколы SMTP и SSH). В этом случае клиент предполагает, что соединение установлено успешно и ждёт от сервера пригласительный баннер или повторную пересылку SYN+ACK пакета. Однако сервер не будет отправлять такой пакет, т.к. забракует сессию. В конечном итоге клиент тоже сбросит сессию, но для этого может потребоваться много времени.
В ядро Линукс 2.6.26 добавлена ограниченная поддержка некоторых опций TCP, которые кодируются в метку времени.
Более новый стандарт TCP Cookie Transactions (TCPCT) спроектирован для избежания подобных проблем и улучшает ещё некоторые аспекты. Но это надстройка над TCP и поэтому должна поддерживаться обеими сторонами.
Простые межсетевые экраны, которые разрешают любой исходящий трафик и разрешают входящий трафик только к определённым портам, будут блокировать SYN-запросы только к закрытым портам. Если SYN cookie включены, то необходимо обратить внимание, что злоумышленник не может обойти такие межсетевые экраны отправкой ACK-пакетов с произвольным номером последовательности пока не подберёт правильный. SYN cookies нужно включать только для публично доступных портов.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .