diff --git a/docs/changes.txt b/docs/changes.txt index e35efe1..e325a71 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -446,3 +446,4 @@ v70 blockcheck: override all dialog questions and enable batch mode blockcheck: parallel attempts +nfqws: weaken wireguard initiation recognition. use len=148 and data[0]=1 signature diff --git a/docs/readme.md b/docs/readme.md index 9c49dd8..0927481 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -71,14 +71,14 @@ zapret является свободным и open source. ## Зачем это нужно Автономное средство противодействия DPI, которое не требует подключения каких-либо сторонних серверов. Может помочь -обойти блокировки или замедление сайтов http(s), сигнатурный анализ tcp и udp протоколов, например с целью блокировки +обойти блокировки или замедление сайтов HTTP(S), сигнатурный анализ TCP и UDP протоколов, например, с целью блокировки VPN. -Проект нацелен прежде всего на маломощные embedded устройства - роутеры, работающие под openwrt. Поддерживаются -традиционные Linux системы, FreeBSD, OpenBSD, частично MacOS. В некоторых случаях возможна самостоятельная прикрутка +Проект нацелен прежде всего на маломощные embedded устройства - роутеры, работающие под OpenWRT. Поддерживаются +традиционные Linux-системы, FreeBSD, OpenBSD, частично macOS. В некоторых случаях возможна самостоятельная прикрутка решения к различным прошивкам. -Большая часть функционала работает на windows. +Большая часть функционала работает на Windows. ## Быстрый старт @@ -89,25 +89,25 @@ VPN. В самом простейшем случае вы имеете дело с пассивным DPI. Пассивный DPI может читать трафик из потока, может инжектить свои пакеты, но не может блокировать проходящие пакеты. Если запрос "плохой", пассивный DPI инжектит пакет RST, -опционально дополняя его пакетом http redirect. Если фейк пакет инжектится только для клиента, в этом случае можно -обойтись командами iptables для дропа RST и/или редиректа на заглушку по определенным условиям, которые нужно подбирать +опционально дополняя его пакетом HTTP redirect. Если фейк пакет инжектится только для клиента, в этом случае можно +обойтись командами iptables для дропа RST и/или редиректа на заглушку по определённым условиям, которые нужно подбирать для каждого провайдера индивидуально. Так мы обходим последствия срабатывания триггера запрета. Если пассивный DPI -направляет пакет RST в том числе и серверу, то вы ничего с этим не сможете сделать. Ваша задача - не допустить -срабатывания триггера запрета. Одними iptables уже не обойдетесь. Этот проект нацелен именно на предотвращение +направляет пакет RST в том числе и серверу, то вы ничего с этим не сможете сделать. Ваша задача — не допустить +срабатывания триггера запрета. Одними iptables уже не обойтись. Этот проект нацелен именно на предотвращение срабатывания запрета, а не ликвидацию его последствий. -Активный DPI ставится в разрез провода и может дропать пакеты по любым критериям, в том числе распознавать TCP потоки и +Активный DPI ставится в разрез провода и может дропать пакеты по любым критериям, в том числе распознавать TCP-потоки и блокировать любые пакеты, принадлежащие потоку. -Как не допустить срабатывания триггера запрета ? Послать то, на что DPI не рассчитывает и что ломает ему алгоритм +Как не допустить срабатывания триггера запрета? Послать то, на что DPI не рассчитывает и что ломает ему алгоритм распознавания запросов и их блокировки. -Некоторые DPI не могут распознать http запрос, если он разделен на TCP сегменты. Например, запрос +Некоторые DPI не могут распознать HTTP-запрос, если он разделен на TCP-сегменты. Например, запрос вида `GET / HTTP/1.1\r\nHost: kinozal.tv......` -мы посылаем 2 частями : сначала идет `GET`, затем `/ HTTP/1.1\r\nHost: kinozal.tv.....`. Другие DPI спотыкаются, когда -заголовок `Host:` пишется в другом регистре : например,`host:`. Кое-где работает добавление дополнительного пробела -после метода : `GET /` => `GET /` -или добавление точки в конце имени хоста : `Host: kinozal.tv.` +мы посылаем двумя частями: сначала идет `GET`, затем `/ HTTP/1.1\r\nHost: kinozal.tv.....`. Другие DPI спотыкаются, когда +заголовок `Host:` пишется в другом регистре: например, `host:`. Кое-где работает добавление дополнительного пробела +после метода: `GET /` → `GET /` +или добавление точки в конце имени хоста: `Host: kinozal.tv.` Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне. diff --git a/nfq/protocol.c b/nfq/protocol.c index 1817aa0..3be2ad8 100644 --- a/nfq/protocol.c +++ b/nfq/protocol.c @@ -938,7 +938,7 @@ bool IsQUICInitial(const uint8_t *data, size_t len) bool IsWireguardHandshakeInitiation(const uint8_t *data, size_t len) { - return len==148 && data[0]==1 && data[1]==0 && data[2]==0 && data[3]==0; + return len==148 && data[0]==1; } bool IsDhtD1(const uint8_t *data, size_t len) {