
Как Envoy xDS, но для eBPF-фильтров
Как Envoy xDS, но для eBPF-фильтров.
Netfence работает как демон на ваших хостах с ВМ/контейнерами и автоматически внедряет eBPF-фильтры в cgroups и сетевые интерфейсы, со встроенным DNS-сервером, который разрешает разрешённые домены и заполняет IP-список разрешений.
Демоны Netfence могут управляться через локальный Unix-socket API или подключаться к центральной панели управления, которую вы реализуете через gRPC для синхронизации списков разрешений/запретов с вашим бэкендом.
Ваша панель управления отправляет сетевые правила, такие как ALLOW *.pypi.org или ALLOW 10.0.0.0/16, к прикреплённым интерфейсам/cgroups. Когда ВМ/контейнер запрашивает DNS, Netfence разрешает его, добавляет IP-адреса в eBPF-фильтр и отбрасывает трафик к неизвестным IP-адресам до того, как он покинет хост, с накладными расходами на прогретом пути, которые в текущих бенчмарках практически неотличимы от обычного сокетного соединения.
В режиме списка разрешений IPv4 link-local (169.254.0.0/16) больше не разрешён по умолчанию — поэтому облачная служба метаданных (169.254.169.254) блокируется, если явно не добавлена в список разрешений. Это сделано намеренно: служба метаданных является целью для кражи учётных данных, и изолированные рабочие нагрузки не должны иметь к ней неявного доступа. Localhost (127.0.0.0/8, ::1) и обнаружение соседей IPv6 (fe80::/10, ff02::/16) остаются разрешёнными по умолчанию, чтобы базовая связность и NDP продолжали работать. Чтобы разрешить службу метаданных для рабочей нагрузки, добавьте в список разрешений 169.254.169.254/32 (переопределение исключения для конкретного прикрепления через панель управления запланировано в будущем).
IPv4 broadcast (255.255.255.255) и multicast (224.0.0.0/4) не имеют исключений и подчиняются политике, поэтому в режиме TC со списком разрешений широковещательный трафик, такой как продление DHCP, блокируется, если не разрешён явно. Проверки исключений выполняются до списка запретов, поэтому исключённый диапазон можно заблокировать, только отключив его исключение — а поскольку IPv4 link-local теперь отключён по умолчанию, режим списка запретов также может блокировать службу метаданных.
Несколько ключевых преимуществ этого решения, которые обычно не поддерживаются другими:
secretdata.someattacker.com)Насколько мне известно, ни одно другое решение не предлагает все эти функции вместе.
Известное ограничение: прикрепления к cgroups фильтруют на уровне сокетов (хуки connect/sendmsg), поэтому процесс с CAP_NET_RAW может создавать сырые пакеты, обходящие их. Для рабочих нагрузок, которые могут иметь CAP_NET_RAW, используйте прикрепление к TC (интерфейсу), которое фильтрует на уровне устройства.
Однако это имеет немного больше накладных расходов, чем что-то вроде httpjail.
Эти числа были измерены на привилегированном Docker Linux gate на linux/arm64 с использованием make bench-docker. Значения — медианы пяти выборок.
Бенчмарк прогретого сокета использует подключённые UDP-сокеты, чтобы изолировать стоимость хука eBPF cgroup/connect4 от задержки TCP-рукопожатия. На этом пути DNS уже разрешил домен, IP ещё в пределах TTL, и IP/CIDR уже присутствует в карте eBPF.
| Путь | Медианная задержка |
|---|---|
| Обычное подключение сокета, без eBPF | ~2,647 мкс |
| Прогретый список разрешений, попадание в защищённый LPM | ~2,691 мкс |
| Прогретый список разрешений, точное совпадение DNS-хоста | ~2,741 мкс |
| Промах списка разрешений, локальная блокировка | ~1,652 мкс |
Измеренный разброс между путями обычного подключения, защищённого LPM и точного совпадения DNS-хоста находится в пределах шума выборки.
На сегодняшний день нет пути «промах ядра, запрос к родительскому процессу». Промах списка разрешений в cgroup решается локально eBPF и немедленно блокируется.
Эти числа измеряют путь DNS-сервера, а не прогретый путь подключения сокета.
| Путь | Медианная задержка |
|---|---|
| Холодный прокси-запрос, внутрипроцессная функция политики | ~31,336 мкс |
| Прогретый прокси-запрос | ~27,964 мкс |
| Холодный запрос списка разрешений с локальным вышестоящим сервером | ~53,510 мкс |
| Прогретый запрос списка разрешений с локальным вышестоящим сервером | ~53,432 мкс |
Холодные строки синхронизируются через барьер мутации реального прикрепления, очищают граф владения бенчмарка и фиктивный снимок точного совпадения между запросами. Таймер работает непрерывно для сохранения локальности планировщика UDP, в то время как ns/op вычитает отдельно сообщаемое fixture-reset-ns/op стенное время (включая любой хвост предыдущего обработчика после того, как клиент получил свой пакет) и таким образом измеряет текущий клиентский Exchange. raw-total-ns/op сообщает оба вместе. Сброс сохраняет настроенные политики доменов и резервное хранилище, а бенчмарк утверждает одно физическое добавление точного совпадения на запрос. Прогретые строки устанавливают владение один раз и утверждают одно физическое добавление за весь запуск.
Внутренние микробенчмарки владения ниже являются диагностиками масштабируемости, а не критериями приёма для полного пути DNS-запроса. Кешированный помощник сохраняется только для тестов и бенчмарков; он оборачивает одну запись за раз и повторяет проверку домена. Как он, так и обычный трафик резолвера проходят через барьер мутации прикрепления, в то время как обычный трафик резолвера принимает каждый полный ответ как одну транзакцию.
| Внутренняя диагностика масштабируемости | Текущая медиана | Память / выделения |
|---|---|---|
| Холодное добавление нового ключа, пустой граф владения | ~370,3 нс | 232 Б, 5 выделений/оп |
| Холодное добавление нового ключа, 4 095 посторонних записей | ~451,2 нс | 232 Б, 5 выделений/оп |
| Давление физической ёмкости и замена LRU | ~3,820 мс | ~4,23 МБ (4 226 243 Б), 4 336 выделений/оп |
| Предварительная проверка исчерпанного физического бюджета | ~611,9 нс | 344 Б, 9 выделений/оп |
| Давление максимального количества рёбер, ответ с 64 адресами | ~6,849 мс | ~7,66 МБ (7 658 774 Б), 2 233 выделений/оп |
| Ограничитель максимальной работы графа, разрешённый полный план | ~2,763 мс | ~4,26 МБ (4 264 386 Б), 3 074 выделений/оп |
| Ограничитель максимальной работы графа, отклонение из-за исчерпания до проекции | ~10,935 мкс | 8,76 КБ (8 760 Б), 14 выделений/оп |
| Операция с бюджетом изменений вблизи числового предела | ~18,98 нс | 0 Б, 0 выделений/оп |
| Согласованный снимок статистики владения | ~2,094 нс | 0 Б, 0 выделений/оп |
| Сканирование без истечения срока по 4 095 записям | ~74,849 мкс/скан | 0 Б, 0 выделений/оп |