Можно как-то добавить такую штуку простым способом?

Привет всем, вопрос к разработчикам наверное
Каким простым способом можно сделать такую штуку

  1. метим пакеты в iptables, типа такого iptables -t mangle -A PREROUTING -m set --match-set marked_ips src -j MARK --set-mark 1
  2. в логах/контексте http или server получаем зарезервированную переменну с этим значение
  3. можно использовать в map/if и логах

Добрый день.

Какого-либо простого способа не видится. Демон работает в пространстве пользователя и вообще ничего не знает об отдельных пакетах, а читает уже декапсулированные данные из сокетного буфера. Более того, уже на программном уровне модуль HTTP оперирует L7-концепциями, отдельными HTTP запросами.

В man 7 socket упоминается опция SO_MARK, но я подозреваю, что getsockopt(SO_MARK) на соединении просто вернет ранее установленное через setsockopt(SO_MARK) значение. Возможно, что я ошибаюсь.

Что-то типа getsockopt(fd, SOL_SOCKET, SO_MARK, &mark, &len);
По примерам это похоже на точто нужно
Получается нужно “поднять” эту маркировку до контекст соединения angie по аналогии с remote_addr/remote_port/server_port

Я полагаю, что все же getsockopt(fd, SOL_SOCKET, SO_MARK, &mark, &len); не вернет то, что было прислано. Оно лишь вернет то значение, что могло быть ранее установлено через setsockopt() для этого дескриптора (т.е. никакого) и потому смысла не имеет.

Я рекомендую всё же проверить на простом тестовом примере, прежде чем пытаться что-то делать дальше.

Возможно вот релевантный модуль GitHub - m4ttr/skmark: netfilter skmark - который мог бы устанавливать то, что затем можно прочитать через getsockopt().

Сделал побыстрому исправления и собрал.

  1. Да - не получаю что было в iptables, оно не попадает на сокет,
  2. нужны права CAP_NET_ADMIN
  3. похоже, что тут нужен TPROXY, чтобы это реализовать
  4. для TPROXY нужен еще и IP_TRANSPARENT и больше доработок

Из быстрых и готовых решений, видимо - взять HAProxy в режиме transparent и передать маркировку через свой заголовок в angie

Не очень понимаю, а как HAProxy в режиме transparent тут поможет?
У Angie есть аналогичный режим: Proxy — Angie Software