mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-30 05:50:53 +03:00
Compare commits
No commits in common. "66952453577ff602ca8fb82b19de1b4bcbfda58c" and "e1e55b16538b579454c54ce791d507e2b4b21d4f" have entirely different histories.
6695245357
...
e1e55b1653
75
docs/bsd.md
75
docs/bsd.md
@ -1,38 +1,5 @@
|
|||||||
# Настройка BSD-подобных систем
|
# Настройка BSD-подобных систем
|
||||||
|
|
||||||
* [Поддерживаемые версии](#поддерживаемые-версии)
|
|
||||||
* [Особенности BSD систем](#особенности-bsd-систем)
|
|
||||||
* [Отсутствие nfqueue](#отсутствие-nfqueue)
|
|
||||||
* [Типы Firewall](#типы-firewall)
|
|
||||||
* [Сборка](#сборка)
|
|
||||||
* [Divert сокеты](#divert-сокеты)
|
|
||||||
* [Lookup Tables](#lookup-tables)
|
|
||||||
* [Загрузка ip таблиц из файла](#загрузка-ip-таблиц-из-файла)
|
|
||||||
* [Отсутствие splice](#отсутствие-splice)
|
|
||||||
* [mdig и ip2net](#mdig-и-ip2net)
|
|
||||||
* [FreeBSD](#freebsd)
|
|
||||||
* [Подгрузка ipdivert](#подгрузка-ipdivert)
|
|
||||||
* [Авто-восстановление правил ipfw и работа в фоне](#авто-восстановление-правил-ipfw-и-работа-в-фоне)
|
|
||||||
* [tpws в прозрачном режиме](#tpws-в-прозрачном-режиме)
|
|
||||||
* [Запуск dvtws](#запуск-dvtws)
|
|
||||||
* [PF в FreeBSD](#pf-в-freebsd)
|
|
||||||
* [pfsense](#pfsense)
|
|
||||||
* [OpenBSD](#openbsd)
|
|
||||||
* [tpws бинд на ipv4](#tpws-бинд-на-ipv4)
|
|
||||||
* [tpws для проходящего трафика](#tpws-для-проходящего-трафика)
|
|
||||||
* [Запуск dvtws](#запуск-dvtws)
|
|
||||||
* [Проблемы с badsum](#проблемы-с-badsum)
|
|
||||||
* [Особенность отправки fake пакетов](#особенность-отправки-fake-пакетов)
|
|
||||||
* [Перезагрузка PF таблиц](#перезагрузка-pf-таблиц)
|
|
||||||
* [MacOS](#macos)
|
|
||||||
* [Введение](#введение)
|
|
||||||
* [dvtws бесполезен](#dvtws-бесполезен)
|
|
||||||
* [tpws](#tpws)
|
|
||||||
* [Проблема link-local адреса](#проблема-link-local-адреса)
|
|
||||||
* [Сборка](#сборка)
|
|
||||||
* [Простая установка](#простая-установка)
|
|
||||||
* [Вариант Custom](#вариант-custom)
|
|
||||||
|
|
||||||
|
|
||||||
## Поддерживаемые версии
|
## Поддерживаемые версии
|
||||||
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra** +
|
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra** +
|
||||||
@ -46,7 +13,6 @@
|
|||||||
|
|
||||||
|
|
||||||
## Особенности BSD систем
|
## Особенности BSD систем
|
||||||
|
|
||||||
### Отсутствие nfqueue
|
### Отсутствие nfqueue
|
||||||
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
|
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
|
||||||
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
|
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
|
||||||
@ -98,7 +64,7 @@ tables. Это прямой аналог ipset. lookup tables не раздел
|
|||||||
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
|
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
|
||||||
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
|
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
|
||||||
|
|
||||||
### Загрузка ip таблиц из файла
|
### PF с файла
|
||||||
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
|
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
|
||||||
следует отключить сжатие gzip для листов через параметр файла config:
|
следует отключить сжатие gzip для листов через параметр файла config:
|
||||||
`GZIP_LISTS=0`.
|
`GZIP_LISTS=0`.
|
||||||
@ -110,13 +76,12 @@ PF может загружать ip таблицы из файла. Чтобы
|
|||||||
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
|
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
|
||||||
на базе kqueue.
|
на базе kqueue.
|
||||||
|
|
||||||
### mdig и ip2net
|
### mdig, ip2net
|
||||||
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
|
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
|
||||||
системо-зависимого.
|
системо-зависимого.
|
||||||
|
|
||||||
|
|
||||||
## FreeBSD
|
## FreeBSD
|
||||||
|
|
||||||
### Подгрузка ipdivert
|
### Подгрузка ipdivert
|
||||||
Divert сокеты требуют специального модуля ядра - `ipdivert`.
|
Divert сокеты требуют специального модуля ядра - `ipdivert`.
|
||||||
|
|
||||||
@ -167,7 +132,8 @@ $ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
|||||||
$ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
$ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
#### Трафик только на таблицу zapret
|
||||||
|
> За исключением таблицы nozapret
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ ipfw delete 100
|
$ ipfw delete 100
|
||||||
@ -212,7 +178,8 @@ $ ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not div
|
|||||||
$ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
$ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
#### Трафик только на таблицу zapret
|
||||||
|
> За исключением таблицы nozapret
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ ipfw delete 100
|
$ ipfw delete 100
|
||||||
@ -256,22 +223,23 @@ $ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
|||||||
|
|
||||||
### pfsense
|
### pfsense
|
||||||
|
|
||||||
#### Описание
|
#### Что это
|
||||||
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
|
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
|
||||||
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
|
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
|
||||||
версий pfsense. Их можно подгрузить через `kldload`.
|
версий pfsense. Их можно подгрузить через `kldload`.
|
||||||
|
|
||||||
|
#### Особенности
|
||||||
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
|
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
|
||||||
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
|
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
|
||||||
отсутствуют, но система работает как надо и без них. В некоторых случаях
|
отсутствуют, но система работает как надо и без них. В некоторых случаях
|
||||||
фаервол PF может ограничивать возможности `dvtws`, в частности в области
|
фаервол PF может ограничивать возможности `dvtws`, в частности в области
|
||||||
фрагментации ip.
|
фрагментации ip.
|
||||||
|
|
||||||
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов.
|
#### Исполняемые файлы
|
||||||
|
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов. Бинарики
|
||||||
Бинарики из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под
|
из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под **FreeBSD
|
||||||
**FreeBSD 11**. Они должны работать и на последующих версиях **FreeBSD**,
|
11**. Они должны работать и на последующих версиях **FreeBSD**, включая
|
||||||
включая pfsense. Можно пользоваться `install_bin.sh`.
|
pfsense. Можно пользоваться `install_bin.sh`.
|
||||||
|
|
||||||
#### Автозапуск
|
#### Автозапуск
|
||||||
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
|
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
|
||||||
@ -409,7 +377,7 @@ $ tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
|||||||
> `/dev/pf`, поэтому прозрачный режим **требует root**.
|
> `/dev/pf`, поэтому прозрачный режим **требует root**.
|
||||||
|
|
||||||
|
|
||||||
### Запуск dvtws
|
### Запуск `dvtws`
|
||||||
|
|
||||||
#### Весь трафик
|
#### Весь трафик
|
||||||
`/etc/pf.conf`:
|
`/etc/pf.conf`:
|
||||||
@ -424,7 +392,8 @@ $ pfctl -f /etc/pf.conf
|
|||||||
$ ./dvtws --port=989 --dpi-desync=split2
|
$ ./dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
#### Трафик только на таблицу zapret
|
||||||
|
> За исключением таблицы nozapret
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
`/etc/pf.conf`:
|
||||||
```
|
```
|
||||||
@ -469,6 +438,8 @@ $ ./dvtws --port=989 --dpi-desync=split2
|
|||||||
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
|
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
|
||||||
нет.
|
нет.
|
||||||
|
|
||||||
|
|
||||||
|
### Возможная оптимизация трафика
|
||||||
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
|
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
|
||||||
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
|
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
|
||||||
массивный трафик через `dvtws`.
|
массивный трафик через `dvtws`.
|
||||||
@ -510,7 +481,6 @@ $ pfctl -Tl -f /etc/pf.conf
|
|||||||
|
|
||||||
|
|
||||||
## MacOS
|
## MacOS
|
||||||
|
|
||||||
### Введение
|
### Введение
|
||||||
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
|
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
|
||||||
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
|
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
|
||||||
@ -614,6 +584,12 @@ local. Скрывать link local не имеет смысла, а динами
|
|||||||
$ make -C /opt/zapret mac
|
$ make -C /opt/zapret mac
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Скрипты получения листов [`ipset/*.sh`](../ipset/) работают. Если будете
|
||||||
|
> пользоваться [`get_combined.sh`](../ipset/get_combined.sh), нужно установить
|
||||||
|
> GNU grep через `brew`. Имеющийся очень старый и безумно медленный с оцией
|
||||||
|
> `-f`.
|
||||||
|
|
||||||
|
|
||||||
### Простая установка
|
### Простая установка
|
||||||
В **MacOS** поддерживается `install_easy.sh`
|
В **MacOS** поддерживается `install_easy.sh`
|
||||||
@ -655,7 +631,6 @@ $ /opt/zapret/init.d/macos/zapret restart
|
|||||||
$ /opt/zapret/init.d/macos/zapret start-daemons
|
$ /opt/zapret/init.d/macos/zapret start-daemons
|
||||||
$ /opt/zapret/init.d/macos/zapret stop-daemons
|
$ /opt/zapret/init.d/macos/zapret stop-daemons
|
||||||
$ /opt/zapret/init.d/macos/zapret restart-daemons
|
$ /opt/zapret/init.d/macos/zapret restart-daemons
|
||||||
```
|
|
||||||
|
|
||||||
Работа только с PF:
|
Работа только с PF:
|
||||||
```sh
|
```sh
|
||||||
@ -718,7 +693,7 @@ custom firewall отличается от linux варианта. Вместо
|
|||||||
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
|
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
|
||||||
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
|
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
|
||||||
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
|
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
|
||||||
\- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
|
- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
|
||||||
в v4, `zapret6` и `zapret6-user`.
|
в v4, `zapret6` и `zapret6-user`.
|
||||||
|
|
||||||
Cм. пример [в файле](../init.d/macos/custom.d.examples/50-extra-tpws).
|
Cм. пример [в файле](../init.d/macos/custom.d.examples/50-extra-tpws).
|
||||||
|
@ -252,4 +252,4 @@
|
|||||||
довольно безобидные, а есть сильно ломающие, которые подходят только для
|
довольно безобидные, а есть сильно ломающие, которые подходят только для
|
||||||
точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая
|
точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая
|
||||||
стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков
|
стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков
|
||||||
\- ttl, fooling.
|
- ttl, fooling.
|
||||||
|
Loading…
Reference in New Issue
Block a user