## Типы фильтров в zapret2 и их параметры Фильтры в nfqws2 определяют, какие пакеты/соединения будут обрабатываться профилем мультистратегии. --- ## 📋 **Основные типы фильтров** ### 1. **`--filter-l3`** - Фильтр L3 протокола (IP версия) **Синтаксис:** ```bash --filter-l3=ipv4|ipv6 ``` **Параметры:** - `ipv4` - только IPv4 пакеты - `ipv6` - только IPv6 пакеты - Можно указывать несколько через запятую **Примеры:** ```bash --filter-l3=ipv4 # только IPv4 --filter-l3=ipv6 # только IPv6 --filter-l3=ipv4,ipv6 # оба (по умолчанию) ``` --- ### 2. **`--filter-tcp`** - Фильтр TCP портов **Синтаксис:** ```bash --filter-tcp=[~]port1[-port2]|* ``` **Параметры:** - `port` - конкретный порт (например: `80`) - `port1-port2` - диапазон портов (например: `1000-2000`) - `~port` - отрицание (все кроме указанного) - `*` - все порты - Можно указывать несколько через запятую **Особенности:** - Если указан `--filter-tcp` и НЕ указан `--filter-udp`, то UDP **блокируется** - Фильтрует как source, так и destination порты **Примеры:** ```bash --filter-tcp=80,443 # только порты 80 и 443 --filter-tcp=80-443 # диапазон от 80 до 443 --filter-tcp=~443 # все порты КРОМЕ 443 --filter-tcp=* # все TCP порты ``` --- ### 3. **`--filter-udp`** - Фильтр UDP портов **Синтаксис:** ```bash --filter-udp=[~]port1[-port2]|* ``` **Параметры:** (аналогично TCP) - `port` - конкретный порт - `port1-port2` - диапазон портов - `~port` - отрицание - `*` - все порты - Можно указывать несколько через запятую **Особенности:** - Если указан `--filter-udp` и НЕ указан `--filter-tcp`, то TCP **блокируется** **Примеры:** ```bash --filter-udp=443 # QUIC (UDP/443) --filter-udp=53,443 # DNS и QUIC --filter-udp=* # все UDP порты ``` --- ### 4. **`--filter-l7`** - Фильтр L7 протокола **Синтаксис:** ```bash --filter-l7=proto[,proto,...] ``` **Доступные протоколы:** 1. `all` - все протоколы 2. `unknown` - неопознанные протоколы 3. `known` - все известные протоколы 4. `http` - HTTP протокол 5. `tls` - TLS/SSL (HTTPS) 6. `quic` - QUIC (HTTP/3) 7. `wireguard` - WireGuard VPN 8. `dht` - DHT (BitTorrent) 9. `discord` - Discord протокол 10. `stun` - STUN 11. `xmpp` - XMPP (Jabber) 12. `dns` - DNS 13. `mtproto` - MTProto (Telegram) **Примеры:** ```bash --filter-l7=http # только HTTP --filter-l7=tls,http # TLS и HTTP --filter-l7=quic # только QUIC --filter-l7=known # все известные протоколы ``` --- ### 5. **`--filter-ssid`** - Фильтр по WiFi SSID (только на некоторых платформах) **Синтаксис:** ```bash --filter-ssid=ssid1[,ssid2,ssid3,...] ``` **Параметры:** - Список SSID через запятую - Применяется только к указанным WiFi сетям **Пример:** ```bash --filter-ssid=MyHomeWiFi,OfficeNetwork ``` --- ## 🎯 **Фильтры по IP адресам** ### 6. **`--ipset`** - Включающий IP фильтр **Синтаксис:** ```bash --ipset=<filename> ``` **Параметры:** - `filename` - путь к файлу с IP адресами/подсетями - Формат файла: один IP/CIDR на строку - Поддержка IPv4 и IPv6 - Поддержка gzip сжатия - Можно указывать несколько раз **Формат файла:** ``` 192.168.1.0/24 10.0.0.1 2001:db8::/32 ``` **Примеры:** ```bash --ipset=/path/to/iplist.txt --ipset=/path/to/list1.txt.gz --ipset=/path/to/list2.txt ``` --- ### 7. **`--ipset-ip`** - Фиксированный список IP **Синтаксис:** ```bash --ipset-ip=<ip_list> ``` **Параметры:** - Список IP/подсетей через запятую - Без файла, прямо в командной строке **Примеры:** ```bash --ipset-ip=192.168.1.0/24,10.0.0.1 --ipset-ip=8.8.8.8,1.1.1.1 ``` --- ### 8. **`--ipset-exclude`** - Исключающий IP фильтр **Синтаксис:** ```bash --ipset-exclude=<filename> ``` **Параметры:** (аналогично `--ipset`) - Файл с IP адресами, которые НЕ должны обрабатываться **Примеры:** ```bash --ipset-exclude=/path/to/exclude.txt ``` --- ### 9. **`--ipset-exclude-ip`** - Фиксированный список исключений **Синтаксис:** ```bash --ipset-exclude-ip=<ip_list> ``` **Примеры:** ```bash --ipset-exclude-ip=192.168.0.0/16,10.0.0.0/8 ``` --- ## 🌐 **Фильтры по доменам (hostlist)** ### 10. **`--hostlist`** - Включающий список доменов **Синтаксис:** ```bash --hostlist=<filename> ``` **Параметры:** - `filename` - путь к файлу с доменами - Формат: один домен на строку - Поддомены применяются автоматически - Поддержка gzip - Можно указывать несколько раз **Формат файла:** ``` youtube.com google.com facebook.com ``` **Особенности:** - `youtube.com` автоматически включает `www.youtube.com`, `m.youtube.com` и т.д. **Примеры:** ```bash --hostlist=/path/to/domains.txt --hostlist=/path/to/list1.txt --hostlist=/path/to/list2.txt.gz ``` --- ### 11. **`--hostlist-domains`** - Фиксированный список доменов **Синтаксис:** ```bash --hostlist-domains=<domain_list> ``` **Параметры:** - Список доменов через запятую **Примеры:** ```bash --hostlist-domains=youtube.com,google.com,facebook.com ``` --- ### 12. **`--hostlist-exclude`** - Исключающий список доменов **Синтаксис:** ```bash --hostlist-exclude=<filename> ``` **Параметры:** (аналогично `--hostlist`) - Домены, которые НЕ должны обрабатываться **Примеры:** ```bash --hostlist-exclude=/path/to/exclude_domains.txt ``` --- ### 13. **`--hostlist-exclude-domains`** - Фиксированный список исключений **Синтаксис:** ```bash --hostlist-exclude-domains=<domain_list> ``` **Примеры:** ```bash --hostlist-exclude-domains=local.domain,internal.net ``` --- ## 🤖 **Автоматический hostlist** ### 14. **`--hostlist-auto`** - Автоматическое определение блокировок **Синтаксис:** ```bash --hostlist-auto=<filename> ``` **Параметры:** - `filename` - файл для сохранения автоматически обнаруженных доменов - Система автоматически определяет DPI блокировки и добавляет домены в список **Примеры:** ```bash --hostlist-auto=/var/lib/zapret/auto.txt ``` --- ### 15. **`--hostlist-auto-fail-threshold`** - Порог неудачных попыток **Синтаксис:** ```bash --hostlist-auto-fail-threshold=<int> ``` **Параметры:** - Количество неудачных попыток для добавления домена в автолист - **По умолчанию:** зависит от реализации **Примеры:** ```bash --hostlist-auto-fail-threshold=3 ``` --- ### 16. **`--hostlist-auto-fail-time`** - Временное окно для неудач **Синтаксис:** ```bash --hostlist-auto-fail-time=<int> ``` **Параметры:** - Время в секундах, в течение которого должны произойти неудачи - **По умолчанию:** зависит от реализации **Примеры:** ```bash --hostlist-auto-fail-time=60 # все неудачи в течение 60 секунд ``` --- ### 17. **`--hostlist-auto-retrans-threshold`** - Порог ретрансмиссий **Синтаксис:** ```bash --hostlist-auto-retrans-threshold=<int> ``` **Параметры:** - Количество ретрансмиссий запроса, которые считаются неудачей - **По умолчанию:** зависит от реализации **Примеры:** ```bash --hostlist-auto-retrans-threshold=2 ``` --- ### 18. **`--hostlist-auto-debug`** - Отладка автолиста (глобальный параметр) **Синтаксис:** ```bash --hostlist-auto-debug=<logfile> ``` **Параметры:** - Путь к файлу логов для отладки автоматического определения **Примеры:** ```bash --hostlist-auto-debug=/var/log/zapret-auto.log ``` --- ## 💡 **Комбинированные примеры** ### Пример 1: Базовая фильтрация HTTP/HTTPS ```bash nfqws2 \ --filter-tcp=80,443 \ --filter-l7=http,tls \ --lua-desync=fake:blob=fake_default_tls ``` ### Пример 2: QUIC с hostlist ```bash nfqws2 \ --filter-udp=443 \ --filter-l7=quic \ --hostlist=/path/to/youtube.txt \ --lua-desync=fake:blob=fake_default_quic:repeats=6 ``` ### Пример 3: Мультипрофиль с разными фильтрами ```bash nfqws2 \ --filter-tcp=80 --filter-l7=http \ --hostlist=/path/to/list1.txt \ --lua-desync=multisplit \ --new \ --filter-tcp=443 --filter-l7=tls \ --hostlist-exclude=/path/to/exclude.txt \ --lua-desync=fake:blob=fake_default_tls \ --new \ --filter-udp=443 --filter-l7=quic \ --lua-desync=fake:blob=fake_default_quic ``` ### Пример 4: Автоматический hostlist ```bash nfqws2 \ --filter-tcp=443 --filter-l7=tls \ --hostlist-auto=/var/lib/zapret/auto.txt \ --hostlist-auto-fail-threshold=3 \ --hostlist-auto-fail-time=60 \ --hostlist-auto-retrans-threshold=2 \ --lua-desync=fake:blob=fake_default_tls ``` ### Пример 5: IP фильтрация ```bash nfqws2 \ --filter-tcp=443 \ --ipset=/path/to/blocked_ips.txt \ --ipset-exclude-ip=192.168.0.0/16,10.0.0.0/8 \ --lua-desync=fake:blob=fake_default_tls ``` --- ## 📝 **Важные особенности** 1. **Порядок фильтров:** Фильтры применяются последовательно (AND логика) 2. **TCP/UDP взаимоисключение:** Указание только TCP фильтра блокирует UDP и наоборот 3. **Hostlist subdomains:** Поддомены включаются автоматически 4. **Множественные файлы:** Можно указывать несколько `--ipset`, `--hostlist` и т.д. 5. **Gzip поддержка:** Файлы могут быть сжаты gzip 6. **Профили:** Каждый профиль (разделенный `--new`) имеет свои фильтры Фильтры позволяют точно таргетировать desync-стратегии на нужные соединения, минимизируя нагрузку на систему!