Compare commits

..

5 Commits

Author SHA1 Message Date
MAXIMILI
9e641f1ca1
Merge 6695245357 into abe507c9c3 2024-11-07 20:49:23 +00:00
maximilionus
6695245357 docs: quickstart, bsd fix formatting and structure 2024-11-07 23:48:05 +03:00
maximilionus
ca39017d10 docs: Fix bsd structure issues 2024-11-07 21:04:02 +03:00
maximilionus
7129923a70 docs: Fix formatting of bsd footer 2024-11-07 19:53:17 +03:00
maximilionus
9f1687ffec docs: Add TOC to bsd.md 2024-11-07 19:46:23 +03:00
2 changed files with 51 additions and 26 deletions

View File

@ -1,5 +1,38 @@
# Настройка 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** +
@ -13,6 +46,7 @@
## Особенности BSD систем ## Особенности BSD систем
### Отсутствие nfqueue ### Отсутствие nfqueue
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с [`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
@ -64,7 +98,7 @@ tables. Это прямой аналог ipset. lookup tables не раздел
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего. выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw. Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
### PF с файла ### Загрузка ip таблиц из файла
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
следует отключить сжатие gzip для листов через параметр файла config: следует отключить сжатие gzip для листов через параметр файла config:
`GZIP_LISTS=0`. `GZIP_LISTS=0`.
@ -76,12 +110,13 @@ 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`.
@ -132,8 +167,7 @@ $ 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 #### Трафик только на таблицу zapret, за исключением таблицы nozapret
> За исключением таблицы nozapret
```sh ```sh
$ ipfw delete 100 $ ipfw delete 100
@ -178,8 +212,7 @@ $ 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 #### Трафик только на таблицу zapret, за исключением таблицы nozapret
> За исключением таблицы nozapret
```sh ```sh
$ ipfw delete 100 $ ipfw delete 100
@ -223,23 +256,22 @@ $ /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) собраны под **FreeBSD Бинарики из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под
11**. Они должны работать и на последующих версиях **FreeBSD**, включая **FreeBSD 11**. Они должны работать и на последующих версиях **FreeBSD**,
pfsense. Можно пользоваться `install_bin.sh`. включая pfsense. Можно пользоваться `install_bin.sh`.
#### Автозапуск #### Автозапуск
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
@ -377,7 +409,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`:
@ -392,8 +424,7 @@ $ pfctl -f /etc/pf.conf
$ ./dvtws --port=989 --dpi-desync=split2 $ ./dvtws --port=989 --dpi-desync=split2
``` ```
#### Трафик только на таблицу zapret #### Трафик только на таблицу zapret, за исключением таблицы nozapret
> За исключением таблицы nozapret
`/etc/pf.conf`: `/etc/pf.conf`:
``` ```
@ -438,8 +469,6 @@ $ ./dvtws --port=989 --dpi-desync=split2
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
нет. нет.
### Возможная оптимизация трафика
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
массивный трафик через `dvtws`. массивный трафик через `dvtws`.
@ -481,6 +510,7 @@ $ pfctl -Tl -f /etc/pf.conf
## MacOS ## MacOS
### Введение ### Введение
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
@ -584,12 +614,6 @@ 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`
@ -631,6 +655,7 @@ $ /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
@ -693,7 +718,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.