Как добавить правило брандмауэра в iptables, чтобы разрешать пакеты только для определенного соединения SSL.

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

iptables -I FORWARD 1 -p tcp -m state --state NEW,ESTABLISHED  -m u32 --u32   "0>>22&0x3C@ 12>>26&0x3C@ 0 & 0xFF000000=0x17000000" -j DROP

Если в определенный момент в будущем я хочу, чтобы конечные точки сообщали, как разрешить пакеты только для одного соединения ssl.

Насколько я знаю, следующие соображения применяются на месте -

1.В одном TCP-соединении может быть только один сеанс ssl.

2.Между двумя конечными точками может быть несколько соединений tcp и, следовательно, несколько соединений ssl для IP-адреса src и dst.

3.Я могу получить значение рукопожатия соединений ssl как уникальные идентификаторы.

4.В случае повторного принятия сеанса будет использовано новое соединение TCP.

Я хочу разрешить пакет, специфичный для ssl-соединения. Можно ли использовать модуль conntrack/state для разрешения пакетов только для одного сеанса TCP. ?

1 ответ1

0

Повторное использование сеанса TLS - это процесс, состоящий из нескольких этапов. Сначала происходит полное рукопожатие TLS, при котором сервер может предоставить клиенту идентификатор сеанса и / или билет сеанса для возобновления сеанса позднее. В более позднем рукопожатии TLS (т.е. новом соединении TCP) клиент может предложить этот идентификатор сеанса или маркер сеанса в рукопожатии TLS. Если сервер согласен и сеанс фактически используется повторно, это можно увидеть только путем анализа следующих сообщений в рукопожатии, т.е. если это полное рукопожатие (без возобновления) или нет (успешное возобновление). Для отслеживания всего этого вам понадобится код с более подробным пониманием сообщений TLS, который также может хранить не только состояние TCP в нескольких пакетах. Я сомневаюсь, что это может быть сделано с обычными iptables, то есть не без каких-то специальных (и, вероятно, не существующих) модулей.

В общем случае фильтр уровня 3..4 (т.е. IP, TCP, UDP), такой как iptables, не является адекватным инструментом для фильтрации уровня 5..7 (TLS, HTTP ...). Хотя может показаться, что в некоторых случаях это работает, его часто легко обойти, разделив данные на несколько пакетов, так что занесенные в черный список пакеты, как в вашем примере, больше не будут соответствовать одному пакету, который они анализируют.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .