Zapret2 для новичков — 03: перехват пакетов и вердикты (NFQUEUE/WinDivert)
Цель: понять “где” стоит zapret2 и что значит PASS/MODIFY/DROP.
1) Где стоит программа в системе
Linux (nfqws2)
Обычно схема такая:
- правила nftables/iptables направляют некоторые пакеты в NFQUEUE
nfqws2читает их в userspace- программа решает: пропустить/изменить/дропнуть
- ядро применяет решение и продолжает обработку
По коду это видно в nfq2/nfqws.c: callback NFQUEUE получает raw байты и вызывает обработчик, который возвращает вердикт.
Windows (winws2)
Аналогичная идея, но вместо NFQUEUE используется перехват на уровне драйвера WinDivert:
- драйвер отдаёт пакеты в userspace
- winws2 решает, что делать
- пакет либо возвращается обратно (modified/unmodified), либо отбрасывается
2) Что такое “вердикт”
В zapret2 есть три ключевых исхода для перехваченного пакета:
- PASS: “пропусти пакет дальше как есть”
- DROP: “не отдавай этот пакет дальше” (он как будто “потерялся”)
- MODIFY: “пропусти, но с изменёнными байтами”
Важно:
- MODIFY обычно означает, что пакет пересобран из диссекта (reconstruct), а не “чуть поправлен в сыром виде”.
3) Почему отправка фейков не равна MODIFY
fake и похожие функции часто делают:
- отправляют дополнительный пакет “сами” (rawsend),
- но не обязаны менять перехваченный пакет.
Поэтому возможна типичная комбинация:
fakeотправил “лишний” пакет,- перехваченный пакет дальше пошёл как обычно (PASS), если его никто не дропнул.
Это нормальная модель: “сделали дополнительный шум” и “не трогали оригинал” (или трогали другим инстансом).
4) Почему нужно ограничивать перехват (производительность)
Перехватывать “весь порт” — дорого:
- каждый пакет будет идти в userspace,
- Lua будет запускаться часто,
- CPU может улететь в 100%.
Поэтому в zapret2 активно используют:
- фильтры
--filter-* --payload=...--in-range/--out-rangecutoff(чтобы перестать вызываться после “критической фазы”)
5) Мини‑практика: “увидеть вердикты в логах”
Самое простое для обучения:
- включить
--debug - добавить
--lua-desync=passили--lua-desync=pktdebug
Цель: заметить, что каждый перехваченный пакет даёт лог “что пришло” → “какие Lua инстансы вызвались” → “какой verdict вернулся”.