Compare commits

..

No commits in common. "66952453577ff602ca8fb82b19de1b4bcbfda58c" and "e1e55b16538b579454c54ce791d507e2b4b21d4f" have entirely different histories.

2 changed files with 26 additions and 51 deletions

View File

@ -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).

View File

@ -252,4 +252,4 @@
довольно безобидные, а есть сильно ломающие, которые подходят только для довольно безобидные, а есть сильно ломающие, которые подходят только для
точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая точечного пробития отдельных ресурсов, когда ничего лучше нет. Хорошая
стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков
\- ttl, fooling. - ttl, fooling.