## Типы фильтров в 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-стратегии на нужные соединения, минимизируя нагрузку на систему!