diff --git a/docs/manual.md b/docs/manual.md index 322a88f..ed13239 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -738,6 +738,10 @@ ipcache представляет собой структуру в памяти Параметр `--dry-run` позволяет протестировать корректность опций командной строки и доступность используемых файлов под сброшенными привилегиями. `--dry-run` не инициализирует движок LUA, и поэтому не может обнаружить синтаксические ошибки LUA. +## Виртуальные машины + +Большинство десктопных гипервизоров ломают техники обхода при подключении сети через встроенный в гипервизор NAT. Это настройка по умолчанию. Необходимо подключение через мост (bridge). Проблема точно есть в vmware и virtualbox. + ## Песочница В целях безопасности nfqws2 после инициализации сбрасывает свои привилегии. @@ -4159,3 +4163,106 @@ nft_first_packets() ## Инсталлятор +Состоит из файлов `install_bin.sh`, `install_prereq.sh`, `install_easy.sh`, `uninstall_easy.sh`. + +* `install_bin.sh` - средство автоматического поиска и настройки подходящих по архитектуре бинарных файлов из `binaries`. Создает линки в директориях nfq2, mdig, ip2net на файлы внутри одной из субдиректорий из binaries. Заточено на максимально обрезанные прошивки, где много чего нет. Работает почти на всем, но не 100%. Отсутствие или обрезанный вариант какой-нибудь стандартной программы может сломать скрипт - типично для неподдерживаемых прошивок типа padavan, merlin и тому подобных. Если не работает - создайте линки вручную. +* `install_prepreq.sh` - установщик пре-реквизитов - требуемых пакетов для работы zapret. Работает в OpenWRT и на большинстве дистрибутивов Linux, но не на всех, поскольку могут использоваться очень разные системы управления пакетами и иметься индивидуальные особенности, которые все учесть невозможно. Если скрипт не справляется - требуется установить пакеты вручную. +* `install_easy.sh` - основной установщик. Рассчитан на запуск из любого расположения. Работает в диалоговом режиме, задает вопросы. Автоматически настраивает binaries и устанавливает пре-реквизиты (отдельный запуск предыдущих скриптов не требуется). На неподдерживаемых системах Linux не может прописать автозапуск - вам это придется сделать вручную. +* `uninstall_easy.sh` - деинсталлятор. Не может убрать автозапуск на неподдерживаемых системах. Предлагает удалить пре-реквизиты только на OpenWRT, на остальных системах - нет. Не удаляет саму директорию установки - для полного удаления ее надо удалить самостоятельно. + +Отдельные файлы `install_bin.sh` и `install_prereq.sh` полезны, когда вы не собираетесь запускать установку, но вам нужен рабочий [blockcheck2](#blockcheck2) или есть необходимость запускать [стартовые скрипты](#стартовые-скрипты) самостоятельно. + +Инсталлятор всегда копирует файлы в `/opt/zapret2`, если исходный вариант находится где-то в другом месте. При замещении целевой директории удаляет все файлы оттуда. Опционально сохраняет стандартные файлы - config, [custom скрипты](#custom-скрипты), [user-листы](#стандартные-файлы-листов) из ipset, автохостлист. + +При копировании в `/opt/zapret2` выставляет нужные права на файлы и директории, даже если они были испорчены (например, перепаковкой в Windows) в исходном расположении. Для запуска из расположения с испорченными правами достаточно вызвать "sh install_easy.sh". + +Бинарные файлы присутствуют только в релизах. После git clone их нет. В случае отсутствия binaries инсталлятор попытается их собрать. Для этого ему нужен компилятор C, make и несколько dev пакетов. Подробности см в `docs/compile`. + +Ниже описаны действия, выполняемые инсталлятором для интеграции с различными вариантами Linux. Можно отказаться от инсталлятора, сделав эти действия самостоятельно и настроив [config](#файл-config). + +### Принципы интеграции с OpenWRT + +1. Автозапуск. +``` +ln -s /opt/zapret2/init.d/openwrt/zapret2 /etc/init.d +/etc/init.d/zapret2 enable +``` +2. Обновление правил firewall по событию поднятия/опускания интерфейсов. +``` +ln -s /opt/zapret2/init.d/openwrt/90-zapret2 /etc/hotplug.d/iface +``` +3. (только для fw3) Интеграция с firewall. +``` +ln -s /opt/zapret2/init.d/openwrt/firewall.zapret2 /etc +uci add firewall include +uci set firewall.@include[-1].path="/etc/firewall.zapret" +uci set firewall.@include[-1].reload=1 +uci commit +``` +4. Обновление листов - cron job на вызов `/opt/zapret2/ipset/get_config.sh` ночью в случайное время каждые 2 дня - для обновления листов. Рассчет идет на роутер, работающий круглосуточно. + +### Шпаргалка OpenWRT + +* Запуск службы : /etc/init.d/zapret2 start +* Останов службы : /etc/init.d/zapret2 stop +* Рестарт службы : /etc/init.d/zapret2 restart +* Состояние службы : /etc/init.d/zapret2 status +* Отключение автозапуска : /etc/init.d/zapret2 disable +* Включение автозапуска : /etc/init.d/zapret2 enable + +### Принципы интеграции с systemd + +1. Автозапуск +``` +cp /opt/zapret2/init.d/systemd/zapret2.service /lib/systemd/system +systemctl daemon-reload +systemctl enable zapret2 +``` +2. Таймер для обновления листов - в случайное время суток каждые 2 дня. Рассчет идет на любую систему, в том числе десктопную, которую могут включать только днем. +``` +cp /opt/zapret2/init.d/systemd/zapret2-list-update.* /lib/systemd/system +systemctl daemon-reload +systemctl enable zapret2-list-update.timer +systemctl start zapret2-list-update.timer +``` + +### Шпаргалка systemd + +* Запуск службы : systemctl start zapret2 +* Останов службы : systemctl stop zapret2 +* Рестарт службы : systemctl restart zapret2 +* Состояние службы : systemctl status zapret2 +* Отключение автозапуска : systemctl disable zapret2 +* Включение автозапуска : systemctl enable zapret2 + +### Принципы интеграции с openrc + +1. Автозапуск +``` +ln -s /opt/zapret2/init.d/openrc/zapret2 /etc/init.d +rc-update add zapret2 +``` +2. Обновление листов - cron job на вызов `/opt/zapret2/ipset/get_config.sh` днем в случайное время каждые 2 дня. Рассчет идет на любую систему, в том числе десктопную, которую могут включать только днем. + +### Шпаргалка openrc + +* Запуск службы : rc-service zapret2 start +* Останов службы : rc-service zapret2 stop +* Рестарт службы : rc-service zapret2 restart +* Состояние службы : rc-service zapret2 status +* Отключение автозапуска : rc-update del zapret2 +* Включение автозапуска : rc-update add zapret2 + +## Альтернативная установка на systemd + +На классическом Linux с systemd можно использовать готовый шаблонный юнит `init.d/systemd/nfqws2@.service` для запуска инстансов nfqws2. + +1. `cp /opt/zapret2/init.d/systemd/nfqws2\@.service /lib/systemd/system` +2. `systemctl daemon-reload` +3. `mkdir /etc/zapret2` +4. Создаете в `/etc/zapret2` текстовый файл с параметрами коммандной строки nfqws2. Файл называется INSTANCE.conf, где INSTANCE - название инстанса, которое вы придумываете сами. +5. Запуск : `systemctl start nfqws2@INSTANCE` +6. Останов : `systemctl stop nfqws2@INSTANCE` +7. Перезапуск : `systemctl restart nfqws2@INSTANCE` + +Этот способ не поднимает правила ip/nf tables - вам это придется сделать отдельно, как и написать сами правила. Правила нужно прописать куда-то, чтобы они поднимались после старта системы. Например, можно сделать отдельный systemd unit с запуском шелл скрипта или `nft -f /path/to/file.nft`.