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-систем)
* [Отсутствие 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** +
@ -13,6 +46,7 @@
## Особенности BSD систем
### Отсутствие nfqueue
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
@ -64,7 +98,7 @@ tables. Это прямой аналог ipset. lookup tables не раздел
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
### PF с файла
### Загрузка ip таблиц из файла
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
следует отключить сжатие gzip для листов через параметр файла config:
`GZIP_LISTS=0`.
@ -76,12 +110,13 @@ PF может загружать ip таблицы из файла. Чтобы
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
на базе kqueue.
### mdig, ip2net
### mdig и ip2net
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
системо-зависимого.
## FreeBSD
### Подгрузка 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
```
#### Трафик только на таблицу zapret
> За исключением таблицы nozapret
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
```sh
$ 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
```
#### Трафик только на таблицу zapret
> За исключением таблицы nozapret
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
```sh
$ ipfw delete 100
@ -223,23 +256,22 @@ $ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
### pfsense
#### Что это
#### Описание
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
версий pfsense. Их можно подгрузить через `kldload`.
#### Особенности
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
отсутствуют, но система работает как надо и без них. В некоторых случаях
фаервол PF может ограничивать возможности `dvtws`, в частности в области
фрагментации ip.
#### Исполняемые файлы
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов. Бинарики
из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под **FreeBSD
11**. Они должны работать и на последующих версиях **FreeBSD**, включая
pfsense. Можно пользоваться `install_bin.sh`.
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов.
Бинарики из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под
**FreeBSD 11**. Они должны работать и на последующих версиях **FreeBSD**,
включая pfsense. Можно пользоваться `install_bin.sh`.
#### Автозапуск
Пример скрипта автозапуска лежит в [`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**.
### Запуск `dvtws`
### Запуск dvtws
#### Весь трафик
`/etc/pf.conf`:
@ -392,8 +424,7 @@ $ pfctl -f /etc/pf.conf
$ ./dvtws --port=989 --dpi-desync=split2
```
#### Трафик только на таблицу zapret
> За исключением таблицы nozapret
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
`/etc/pf.conf`:
```
@ -438,8 +469,6 @@ $ ./dvtws --port=989 --dpi-desync=split2
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
нет.
### Возможная оптимизация трафика
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
массивный трафик через `dvtws`.
@ -481,6 +510,7 @@ $ pfctl -Tl -f /etc/pf.conf
## MacOS
### Введение
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
@ -584,12 +614,6 @@ local. Скрывать link local не имеет смысла, а динами
$ make -C /opt/zapret mac
```
> [!IMPORTANT]
> Скрипты получения листов [`ipset/*.sh`](../ipset/) работают. Если будете
> пользоваться [`get_combined.sh`](../ipset/get_combined.sh), нужно установить
> GNU grep через `brew`. Имеющийся очень старый и безумно медленный с оцией
> `-f`.
### Простая установка
В **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 stop-daemons
$ /opt/zapret/init.d/macos/zapret restart-daemons
```
Работа только с PF:
```sh
@ -693,7 +718,7 @@ custom firewall отличается от linux варианта. Вместо
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
\- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
в v4, `zapret6` и `zapret6-user`.
Cм. пример [в файле](../init.d/macos/custom.d.examples/50-extra-tpws).

View File

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