Loading docs/readme.md +73 −74 Original line number Diff line number Diff line Loading @@ -47,9 +47,9 @@ zapret является свободным и open source. - [СЛУЖЕБНЫЕ ПАРАМЕТРЫ](#служебные-параметры) - [IPTABLES ДЛЯ TPWS](#iptables-для-tpws) - [NFTABLES ДЛЯ TPWS](#nftables-для-tpws) - [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip) - [ip2net](#ip2net) - [mdig](#mdig) - [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip) - [Фильтрация по именам доменов](#фильтрация-по-именам-доменов) - [Режим фильтрации autohostlist](#режим-фильтрации-autohostlist) - [Проверка провайдера](#проверка-провайдера) Loading Loading @@ -1127,6 +1127,78 @@ nft add rule inet ztest dnat_pre meta iifname $IFACE_LAN tcp dport { 80, 443 } d nft delete table inet ztest ``` ## ip2net Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в `stdout`. ``` -4 ; лист - ipv4 (по умолчанию) -6 ; лист - ipv6 --prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6) --v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4 --v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети ``` В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений. Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix. ipfw из FreeBSD понимает ip/prefix, но не понимает ip1-ip2. ip2net фильтрует входные данные, выкидывая неправильные IP адреса. Выбирается подсеть, в которой присутствует указанный минимум адресов. Для ipv4 минимум задается как процент от размера подсети (mul/div. например, 3/4), для ipv6 минимум задается напрямую. Размер подсети выбирается следующим алгоритмом: Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально. Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше). Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 : ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 Результат будет : 1234:5678:aaa8::/45 ``` Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой, когда те же самые адреса вполне влезают в /45 и их ровно столько же. Если изменить v6_threshold=4, то результат будет: ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 ``` То есть ip не объединятся в подсеть, потому что их слишком мало. Если изменить `prefix_length=56-64`, результат будет: ``` 1234:5678:aaaa::/64 1234:5678:aaac::5 ``` Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа. Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов. Учтите, что арифметика mul/div - целочисленная. При превышении разрядной сетки 32 bit результат непредсказуем. Не надо делать такое: 5000000/10000000. 1/2 - гораздо лучше. ## mdig Программа предназначена для многопоточного ресолвинга больших листов через системный DNS. Она берет из stdin список доменов и выводит в stdout результат ресолвинга. Ошибки выводятся в stderr. ``` --threads=<threads_number> ; количество потоков. по умолчанию 1. --family=<4|6|46> ; выбор семейства IP адресов : ipv4, ipv6, ipv4+ipv6 --verbose ; дебаг-лог на консоль --stats=N ; выводить статистику каждые N доменов --log-resolved=<file> ; сохранять успешно отресолвленные домены в файл --log-failed=<file> ; сохранять неудачно отресолвленные домены в файл --dns-make-query=<domain> ; вывести в stdout бинарный DNS запрос по домену. если --family=6, запрос будет AAAA, иначе A. --dns-parse-query ; распарсить бинарный DNS ответ и выдать все ivp4 и ipv6 адреса из него в stdout ``` Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал. Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl : ``` mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query ``` ## Способы получения списка заблокированных IP Loading Loading @@ -1225,79 +1297,6 @@ ipfw таблицы в отличие от ipset могут содержать Это особенно полезно на BSD системах с PF. LISTS_RELOAD=- отключает перезагрузку листов. ## ip2net Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в `stdout`. ``` -4 ; лист - ipv4 (по умолчанию) -6 ; лист - ipv6 --prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6) --v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4 --v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети ``` В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений. Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix. ipfw из FreeBSD понимает ip/prefix, но не понимает ip1-ip2. ip2net фильтрует входные данные, выкидывая неправильные IP адреса. Выбирается подсеть, в которой присутствует указанный минимум адресов. Для ipv4 минимум задается как процент от размера подсети (mul/div. например, 3/4), для ipv6 минимум задается напрямую. Размер подсети выбирается следующим алгоритмом: Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально. Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше). Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 : ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 Результат будет : 1234:5678:aaa8::/45 ``` Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой, когда те же самые адреса вполне влезают в /45 и их ровно столько же. Если изменить v6_threshold=4, то результат будет: ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 ``` То есть ip не объединятся в подсеть, потому что их слишком мало. Если изменить `prefix_length=56-64`, результат будет: ``` 1234:5678:aaaa::/64 1234:5678:aaac::5 ``` Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа. Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов. Учтите, что арифметика mul/div - целочисленная. При превышении разрядной сетки 32 bit результат непредсказуем. Не надо делать такое: 5000000/10000000. 1/2 - гораздо лучше. ## mdig Программа предназначена для многопоточного ресолвинга больших листов через системный DNS. Она берет из stdin список доменов и выводит в stdout результат ресолвинга. Ошибки выводятся в stderr. ``` --threads=<threads_number> ; количество потоков. по умолчанию 1. --family=<4|6|46> ; выбор семейства IP адресов : ipv4, ipv6, ipv4+ipv6 --verbose ; дебаг-лог на консоль --stats=N ; выводить статистику каждые N доменов --log-resolved=<file> ; сохранять успешно отресолвленные домены в файл --log-failed=<file> ; сохранять неудачно отресолвленные домены в файл --dns-make-query=<domain> ; вывести в stdout бинарный DNS запрос по домену. если --family=6, запрос будет AAAA, иначе A. --dns-parse-query ; распарсить бинарный DNS ответ и выдать все ivp4 и ipv6 адреса из него в stdout ``` Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал. Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl : ``` mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query ``` ## Фильтрация по именам доменов Альтернативой ipset является использование tpws или nfqws со списком доменов. Loading Loading
docs/readme.md +73 −74 Original line number Diff line number Diff line Loading @@ -47,9 +47,9 @@ zapret является свободным и open source. - [СЛУЖЕБНЫЕ ПАРАМЕТРЫ](#служебные-параметры) - [IPTABLES ДЛЯ TPWS](#iptables-для-tpws) - [NFTABLES ДЛЯ TPWS](#nftables-для-tpws) - [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip) - [ip2net](#ip2net) - [mdig](#mdig) - [Способы получения списка заблокированных IP](#способы-получения-списка-заблокированных-ip) - [Фильтрация по именам доменов](#фильтрация-по-именам-доменов) - [Режим фильтрации autohostlist](#режим-фильтрации-autohostlist) - [Проверка провайдера](#проверка-провайдера) Loading Loading @@ -1127,6 +1127,78 @@ nft add rule inet ztest dnat_pre meta iifname $IFACE_LAN tcp dport { 80, 443 } d nft delete table inet ztest ``` ## ip2net Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в `stdout`. ``` -4 ; лист - ipv4 (по умолчанию) -6 ; лист - ipv6 --prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6) --v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4 --v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети ``` В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений. Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix. ipfw из FreeBSD понимает ip/prefix, но не понимает ip1-ip2. ip2net фильтрует входные данные, выкидывая неправильные IP адреса. Выбирается подсеть, в которой присутствует указанный минимум адресов. Для ipv4 минимум задается как процент от размера подсети (mul/div. например, 3/4), для ipv6 минимум задается напрямую. Размер подсети выбирается следующим алгоритмом: Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально. Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше). Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 : ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 Результат будет : 1234:5678:aaa8::/45 ``` Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой, когда те же самые адреса вполне влезают в /45 и их ровно столько же. Если изменить v6_threshold=4, то результат будет: ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 ``` То есть ip не объединятся в подсеть, потому что их слишком мало. Если изменить `prefix_length=56-64`, результат будет: ``` 1234:5678:aaaa::/64 1234:5678:aaac::5 ``` Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа. Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов. Учтите, что арифметика mul/div - целочисленная. При превышении разрядной сетки 32 bit результат непредсказуем. Не надо делать такое: 5000000/10000000. 1/2 - гораздо лучше. ## mdig Программа предназначена для многопоточного ресолвинга больших листов через системный DNS. Она берет из stdin список доменов и выводит в stdout результат ресолвинга. Ошибки выводятся в stderr. ``` --threads=<threads_number> ; количество потоков. по умолчанию 1. --family=<4|6|46> ; выбор семейства IP адресов : ipv4, ipv6, ipv4+ipv6 --verbose ; дебаг-лог на консоль --stats=N ; выводить статистику каждые N доменов --log-resolved=<file> ; сохранять успешно отресолвленные домены в файл --log-failed=<file> ; сохранять неудачно отресолвленные домены в файл --dns-make-query=<domain> ; вывести в stdout бинарный DNS запрос по домену. если --family=6, запрос будет AAAA, иначе A. --dns-parse-query ; распарсить бинарный DNS ответ и выдать все ivp4 и ipv6 адреса из него в stdout ``` Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал. Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl : ``` mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query ``` ## Способы получения списка заблокированных IP Loading Loading @@ -1225,79 +1297,6 @@ ipfw таблицы в отличие от ipset могут содержать Это особенно полезно на BSD системах с PF. LISTS_RELOAD=- отключает перезагрузку листов. ## ip2net Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в `stdout`. ``` -4 ; лист - ipv4 (по умолчанию) -6 ; лист - ipv6 --prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6) --v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4 --v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети ``` В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений. Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix. ipfw из FreeBSD понимает ip/prefix, но не понимает ip1-ip2. ip2net фильтрует входные данные, выкидывая неправильные IP адреса. Выбирается подсеть, в которой присутствует указанный минимум адресов. Для ipv4 минимум задается как процент от размера подсети (mul/div. например, 3/4), для ipv6 минимум задается напрямую. Размер подсети выбирается следующим алгоритмом: Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально. Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше). Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 : ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 Результат будет : 1234:5678:aaa8::/45 ``` Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой, когда те же самые адреса вполне влезают в /45 и их ровно столько же. Если изменить v6_threshold=4, то результат будет: ``` 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 ``` То есть ip не объединятся в подсеть, потому что их слишком мало. Если изменить `prefix_length=56-64`, результат будет: ``` 1234:5678:aaaa::/64 1234:5678:aaac::5 ``` Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа. Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов. Учтите, что арифметика mul/div - целочисленная. При превышении разрядной сетки 32 bit результат непредсказуем. Не надо делать такое: 5000000/10000000. 1/2 - гораздо лучше. ## mdig Программа предназначена для многопоточного ресолвинга больших листов через системный DNS. Она берет из stdin список доменов и выводит в stdout результат ресолвинга. Ошибки выводятся в stderr. ``` --threads=<threads_number> ; количество потоков. по умолчанию 1. --family=<4|6|46> ; выбор семейства IP адресов : ipv4, ipv6, ipv4+ipv6 --verbose ; дебаг-лог на консоль --stats=N ; выводить статистику каждые N доменов --log-resolved=<file> ; сохранять успешно отресолвленные домены в файл --log-failed=<file> ; сохранять неудачно отресолвленные домены в файл --dns-make-query=<domain> ; вывести в stdout бинарный DNS запрос по домену. если --family=6, запрос будет AAAA, иначе A. --dns-parse-query ; распарсить бинарный DNS ответ и выдать все ivp4 и ipv6 адреса из него в stdout ``` Параметры `--dns-make-query` и `--dns-parse-query` позволяют провести ресолвинг одного домена через произвольный канал. Например, следующим образом можно выполнить DoH запрос, используя лишь mdig и curl : ``` mdig --family=6 --dns-make-query=rutracker.org | curl --data-binary @- -H "Content-Type: application/dns-message" https://cloudflare-dns.com/dns-query | mdig --dns-parse-query ``` ## Фильтрация по именам доменов Альтернативой ipset является использование tpws или nfqws со списком доменов. Loading