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

Как установить таймаут TCP Fast Open cookie?

TCP Fast Open: сервер должен периодически изменять ключ шифрования, используемый для создания файлов cookie TFO, чтобы злоумышленники не собирали со временем множество файлов cookie для использования в скоординированной атаке на сервер.

Как я могу получить период по умолчанию (если он существует) или установить его в Linux?

Насколько я понимаю, есть два способа установить ключи быстрого открытия TCP в Linux - общесистемные и для каждого сокета.

На сокет

Если приложение знает о TCP Fast Open, приложение может запросить поведение TCP Fast Open, используя TCP_FASTOPEN вариант в setsockopt(). Когда это установлено, как видно на реализация do_tcp_setsockopt, ключ генерируется путем вызова tcp_fastopen_init_key_once() из некоторых случайных байтов.

Насколько я понимаю, приложение может повторно сгенерировать ключ, вызвав setsockopt() снова с TCP_FASTOPEN или, альтернативно, установить конкретный ключ, вызвав TCP_FASTOPEN_KEY с правильными ключевыми данными. Вы также можете сделать это изначально, вместо того, чтобы устанавливать TCP_FASTOPEN. я догадываюсь TCP_FASTOPEN_KEY полезен для синхронизации ключей в кластере одноадресных серверов.

Общесистемный

Вы можете использовать настраиваемый sysctl net.ipv4.tcp_fastopen_key для установки общесистемного ключа TFO, который будет использоваться процессами, которые не знают о TFO. Вот обсуждение TFO в технической вики-странице Викимедиа. - который, как я полагаю, предназначен для управления поддержкой TFO серверов Викимедиа - в конце у них есть образец кода для обновления системного ключа TFO.

Резюме

В Linux нет плановой ротации ключей TCP Fast Open - это либо ответственность приложения, либо системный администратор должен что-то настроить.

Насколько я понимаю, если приложение поддерживает TFO, то это все - приложение несет ответственность за любые меры безопасности, которые они используют, и системный администратор не может это отменить. Для меня это имеет смысл, поскольку снижает затраты на управление и синхронизацию ключей TFO в настраиваемой среде программного кластера.

Заметка

В Linux, начиная с версии 5.3, есть два ключа TFO - основной и резервный. Это было сделано, чтобы снизить стоимость сброса ключа - каждый раз, когда вы сбрасываете ключ, предыдущий ключ копируется в резервную позицию, так что если клиент, у которого есть cookie со старым ключом, отправляет SYN, этот пакет все равно будет быть действительным. Поэтому, если вы хотите сбросить все файлы cookie на всех клиентах, вам нужно дважды установить ключ TFO.