mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-30 19:02:59 +03:00
421 lines
16 KiB
Markdown
421 lines
16 KiB
Markdown
- [Пример ручной установки на Debian-подобную систему](#пример-ручной-установки-на-debian-подобную-систему)
|
||
- [CentOS 7+, Fedora](#centos-7-fedora)
|
||
- [openSUSE](#opensuse)
|
||
- [Arch Linux](#arch-linux)
|
||
- [Gentoo](#gentoo)
|
||
- [Ручная установка на OpenWrt/LEDE 15.xx-21.xx](#ручная-установка-на-openwrtlede-15xx-21xx)
|
||
|
||
Пример ручной установки на Debian-подобную систему
|
||
--------------------------------------------------
|
||
|
||
На Debian основано большое количество дистрибутивов Linux, включая Ubuntu.
|
||
Здесь рассматриваются прежде всего Debian 8+ и Ubuntu 16+.
|
||
Но с большой вероятностью может сработать и на производных от них.
|
||
Главное условие - наличие `systemd`, `apt` и нескольких стандартных пакетов в репозитории.
|
||
|
||
Установить пакеты:
|
||
|
||
```sh
|
||
apt-get update
|
||
apt-get install ipset curl dnsutils git
|
||
```
|
||
|
||
Если хотите использовать `nftables`, то нужен пакет `nftables`, а `ipset` не обязателен.
|
||
|
||
Скопировать директорию `zapret` в `/opt` или скачать через `git`:
|
||
|
||
```sh
|
||
cd /opt
|
||
git clone --depth 1 https://github.com/bol-van/zapret
|
||
```
|
||
|
||
Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники.
|
||
|
||
```sh
|
||
/opt/zapret/install_bin.sh
|
||
```
|
||
|
||
**АЛЬТЕРНАТИВА:** `make -C /opt/zapret`. Получите динамические бинарники под вашу ось.
|
||
Для сборки требуются dev пакеты: `zlib1g-dev`, `libcap-dev`, `libnetfilter-queue-dev`.
|
||
|
||
Создать конфиг по умолчанию:
|
||
|
||
```sh
|
||
cp /opt/zapret/config.default /opt/zapret/config
|
||
```
|
||
|
||
Настроить параметры согласно разделу "Выбор параметров".
|
||
|
||
Создать user листы по умолчанию:
|
||
|
||
```sh
|
||
cp /opt/zapret/ipset/zapret-hosts-user-exclude.txt.default /opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||
echo nonexistent.domain > /opt/zapret/ipset/zapret-hosts-user.txt
|
||
touch /opt/zapret/ipset/zapret-hosts-user-ipban.txt
|
||
```
|
||
|
||
Создать ссылку на service unit в `systemd`:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system
|
||
```
|
||
|
||
Удалить старые листы, если они были созданы ранее:
|
||
|
||
```sh
|
||
/opt/zapret/ipset/clear_lists.sh
|
||
```
|
||
|
||
По желанию прописать в `/opt/zapret/ipset/zapret-hosts-user.txt` свои домены.
|
||
|
||
Выполнить скрипт обновления листа:
|
||
|
||
```sh
|
||
/opt/zapret/ipset/get_config.sh
|
||
```
|
||
|
||
Настроить таймер `systemd` для обновления листа:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /lib/systemd/system
|
||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /lib/systemd/system
|
||
```
|
||
|
||
Принять изменения в `systemd`: `systemctl daemon-reload`
|
||
|
||
Включить автозапуск службы: `systemctl enable zapret`
|
||
|
||
Включить таймер обновления листа: `systemctl enable zapret-list-update.timer`
|
||
|
||
Запустить службу: `systemctl start zapret`
|
||
|
||
Шпаргалка по управлению службой и таймером :
|
||
|
||
- enable auto start: `systemctl enable zapret`
|
||
- disable auto start: `systemctl disable zapret`
|
||
- start: `systemctl start zapret`
|
||
- stop: `systemctl stop zapret`
|
||
- status, output messages: `systemctl status zapret`
|
||
- timer info: `systemctl list-timer`
|
||
- delete service: `systemctl disable zapret; rm /lib/systemd/system/zapret.service`
|
||
- delete timer: `systemctl disable zapret-list-update.timer; rm /lib/systemd/system/zapret-list-update.*`
|
||
|
||
CentOS 7+, Fedora
|
||
-----------------
|
||
|
||
CentOS с 7 версии и более-менее новые федоры построены на `systemd`.
|
||
В качестве пакетного менеджера используется `yum`.
|
||
|
||
Установить пакеты:
|
||
|
||
```sh
|
||
yum install -y curl ipset dnsutils git
|
||
```
|
||
|
||
Далее все аналогично Debian.
|
||
|
||
openSUSE
|
||
--------
|
||
|
||
Новые openSUSE основаны на `systemd` и менеджере пакетов `zypper`.
|
||
|
||
Установить пакеты:
|
||
|
||
```sh
|
||
zypper --non-interactive install curl ipset
|
||
```
|
||
|
||
Далее все аналогично Debian, кроме расположения `systemd`.
|
||
В openSUSE он находится не в `/lib/systemd`, а в `/usr/lib/systemd`.
|
||
Правильные команды будут:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/systemd/zapret.service /usr/lib/systemd/system
|
||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /usr/lib/systemd/system
|
||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /usr/lib/systemd/system
|
||
```
|
||
|
||
Arch Linux
|
||
----------
|
||
|
||
Построен на базе `systemd`.
|
||
|
||
Установить пакеты:
|
||
|
||
```sh
|
||
pacman -Syy
|
||
pacman --noconfirm -S ipset curl
|
||
```
|
||
|
||
Далее все аналогично Debian.
|
||
|
||
Gentoo
|
||
------
|
||
|
||
Эта система использует OpenRC - улучшенную версию sysvinit.
|
||
Установка пакетов производится командой: `emerge <package_name>`
|
||
Пакеты собираются из исходников.
|
||
|
||
Требуются все те же `ipset`, `curl`, `git` для скачивания с GitHub.
|
||
`git` и `curl` по умолчанию могут присутствовать, `ipset` отсутствует.
|
||
|
||
```sh
|
||
emerge ipset
|
||
```
|
||
|
||
Настроить параметры согласно разделу "Выбор параметров".
|
||
|
||
Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники:
|
||
|
||
```sh
|
||
/opt/zapret/install_bin.sh
|
||
```
|
||
|
||
**АЛЬТЕРНАТИВА:** `make -C /opt/zapret`. Получите динамические бинарники под вашу ось.
|
||
|
||
Удалить старые листы, если они были созданы ранее:
|
||
|
||
```sh
|
||
/opt/zapret/ipset/clear_lists.sh
|
||
```
|
||
|
||
По желанию прописать в `/opt/zapret/ipset/zapret-hosts-user.txt` свои домены.
|
||
|
||
Выполнить скрипт обновления листа:
|
||
|
||
```sh
|
||
/opt/zapret/ipset/get_config.sh
|
||
```
|
||
|
||
Зашедулить обновление листа:
|
||
|
||
```sh
|
||
crontab -e
|
||
```
|
||
|
||
Создать для крона строчку `0 12 */2* * /opt/zapret/ipset/get_config.sh`
|
||
|
||
Подключить init скрипт:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d
|
||
rc-update add zapret
|
||
```
|
||
|
||
Запустить службу:
|
||
|
||
```sh
|
||
rc-service zapret start
|
||
```
|
||
|
||
Шпаргалка по управлению службой:
|
||
|
||
- enable auto start: `rc-update add zapret`
|
||
- disable auto start: `rc-update del zapret`
|
||
- start: `rc-service zapret start`
|
||
- stop: `rc-service zapret stop`
|
||
|
||
Ручная установка на OpenWrt/LEDE 15.xx-21.xx
|
||
--------------------------------------------
|
||
|
||
**ВАЖНО:** Данная инструкция написана для систем, основанных на `iptables`+`firewall3`.
|
||
В новых версиях OpenWrt переходит на `nftables`+`firewall4`, инструкция неприменима. Пользуйтесь `install_easy.sh`
|
||
|
||
Установить дополнительные пакеты:
|
||
|
||
```sh
|
||
opkg update
|
||
opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl
|
||
# (IPv6) opkg install ip6tables-mod-nat
|
||
# (опционально) opkg install gzip
|
||
# (опционально) opkg install coreutils-sort
|
||
```
|
||
|
||
**ЭКОНОМИЯ МЕСТА:**
|
||
|
||
`gzip` от `busybox` в разы медленней полноценного варианта. `gzip` используется скриптами получения листов.
|
||
`sort` от `busybox` медленней полноценного варианта и жрет намного больше памяти. `sort` используется скриптами получения листов.
|
||
`iptables-mod-nfqueue` можно выкинуть, если не будем пользоваться `nfqws`.
|
||
`curl` можно выкинуть, если для получения IP листа будет использоваться только `get_user.sh`
|
||
|
||
Самая главная трудность - скомпилировать программы на C. Это можно сделать на Linux x64 при помощи SDK, который можно скачать с официального сайта OpenWrt или LEDE. Но процесс кросс-компиляции - это всегда сложности.
|
||
Недостаточно запустить `make` как на традиционной Linux системе.
|
||
Поэтому в `binaries/` имеются готовые статические бинарники для всех самых распространенных архитектур.
|
||
Статическая сборка означает, что бинарник не зависит от типа `libc` (`glibc`, `uclibc` или `musl`) и наличия установленных `*.so`.
|
||
Его можно использовать сразу. Лишь бы подходил тип CPU. У ARM и MIPS есть несколько версий.
|
||
Скорее всего найдется рабочий вариант. Если нет - вам придется собирать самостоятельно.
|
||
Для всех поддерживаемых архитектур бинарники запакованы `upx`. На текущий момент все, кроме `mips64`.
|
||
|
||
Скопировать директорию `zapret` в `/opt` на роутер.
|
||
|
||
Если места достаточно, самый простой способ:
|
||
|
||
```sh
|
||
opkg update
|
||
opkg install git-http
|
||
mkdir /opt
|
||
cd /opt
|
||
git clone --depth 1 https://github.com/bol-van/zapret
|
||
```
|
||
|
||
Если места немного:
|
||
|
||
```sh
|
||
opkg update
|
||
opkg install openssh-sftp-server unzip
|
||
ifconfig br-lan
|
||
```
|
||
|
||
Скачать на комп с GitHub zip архив кнопкой "Clone or download" -> Download ZIP
|
||
Скопировать средствами `sftp` zip архив на роутер в `/tmp`.
|
||
|
||
```sh
|
||
mkdir /opt
|
||
cd /opt
|
||
unzip /tmp/zapret-master.zip
|
||
mv zapret-master zapret
|
||
rm /tmp/zapret-master.zip
|
||
```
|
||
|
||
Если места совсем мало:
|
||
На Linux системе скачать и распаковать zapret. Оставить необходимый минимум файлов.
|
||
Запаковать в архив `zapret.tar.gz`.
|
||
|
||
```sh
|
||
nc -l -p 1111 < zapret.tar.gz
|
||
```
|
||
|
||
На роутере:
|
||
|
||
```sh
|
||
cd /tmp
|
||
nc <linux_system_ip> 1111 >zapret.tar.gz
|
||
```
|
||
|
||
Не стоит работать с распакованной версией `zapret` на Windows. Потеряются ссылки и `chmod`.
|
||
|
||
Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники:
|
||
|
||
```sh
|
||
/opt/zapret/install_bin.sh
|
||
```
|
||
|
||
Создать ссылку на скрипт запуска:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/openwrt/zapret /etc/init.d
|
||
```
|
||
|
||
Создать ссылку на скрипт события поднятия интерфейса:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/openwrt/90-zapret /etc/hotplug.d/iface
|
||
```
|
||
|
||
Создать конфиг по умолчанию:
|
||
|
||
```sh
|
||
cp /opt/zapret/config.default /opt/zapret/config
|
||
```
|
||
|
||
Настроить параметры согласно разделу "Выбор параметров".
|
||
|
||
Создать user листы по умолчанию:
|
||
|
||
```sh
|
||
cp /opt/zapret/ipset/zapret-hosts-user-exclude.txt.default /opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||
echo nonexistent.domain > /opt/zapret/ipset/zapret-hosts-user.txt
|
||
touch /opt/zapret/ipset/zapret-hosts-user-ipban.txt
|
||
```
|
||
|
||
Удалить старые листы, если они были созданы ранее:
|
||
|
||
```sh
|
||
/opt/zapret/ipset/clear_lists.sh
|
||
```
|
||
|
||
По желанию прописать в `/opt/zapret/ipset/zapret-hosts-user.txt` свои домены.
|
||
Выполнить скрипт обновления листа:
|
||
|
||
```sh
|
||
/opt/zapret/ipset/get_config.sh
|
||
```
|
||
|
||
Зашедулить обновление листа:
|
||
|
||
```sh
|
||
crontab -e
|
||
```
|
||
|
||
Создать для крона строчку `0 12 */2* * /opt/zapret/ipset/get_config.sh`
|
||
|
||
Включить автозапуск службы и запустить ее:
|
||
|
||
```sh
|
||
/etc/init.d/zapret enable
|
||
/etc/init.d/zapret start
|
||
```
|
||
|
||
**ПРИМЕЧАНИЕ:** на этапе старта системы интерфейсы еще не подняты.
|
||
В некоторых случаях невозможно правильно сформировать параметры запуска демонов, не зная имя физического интерфейса LAN.
|
||
Скрипт из /etc/hotplug.d/iface перезапустит демоны по событию поднятия LAN.
|
||
|
||
Создать ссылку на firewall include:
|
||
|
||
```sh
|
||
ln -fs /opt/zapret/init.d/openwrt/firewall.zapret /etc/firewall.zapret
|
||
```
|
||
|
||
Проверить была ли создана ранее запись о firewall include:
|
||
|
||
```sh
|
||
uci show firewall | grep firewall.zapret
|
||
```
|
||
|
||
Если `firewall.zapret` нет, значит добавить:
|
||
|
||
```sh
|
||
uci add firewall include
|
||
uci set firewall.@include[-1].path="/etc/firewall.zapret"
|
||
uci set firewall.@include[-1].reload="1"
|
||
uci commit firewall
|
||
```
|
||
|
||
Проверить, не включен ли flow offload:
|
||
|
||
```sh
|
||
uci show firewall.@defaults[0]
|
||
```
|
||
|
||
Если `flow_offloading=1` или `flow_offloading_hw=1`:
|
||
|
||
```sh
|
||
uci set firewall.@defaults[0].flow_offloading=0
|
||
uci set firewall.@defaults[0].flow_offloading_hw=0
|
||
uci commit firewall
|
||
```
|
||
|
||
Перезапустить фаервол:
|
||
|
||
```sh
|
||
fw3 restart
|
||
```
|
||
|
||
Посмотреть через `iptables -nL`, `ip6tables -nL` или через `luci` вкладку "firewall", появились ли нужные правила.
|
||
|
||
**ЭКОНОМИЯ МЕСТА:** если его мало, то можно оставить в директории `zapret` лишь подкаталоги `ipset/`, `common/`, файл `config/`, `init.d/openwrt/`.
|
||
Далее нужно создать подкаталоги с реально используемыми бинарниками (`ip2net`, `mdig`, `tpws`, `nfq`) и скопировать туда из `binaries/` рабочие executables.
|
||
|
||
**ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ:** откажитесь от работы со списком РКН. используйте только `get_user.sh`.
|
||
|
||
**ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ:** берете `tpws` и делаете все своими руками. поднятие `iptables`, автостарт бинарника.
|
||
С некоторых версий скрипты запуска zapret без `ipset` не работают (он требуется для IP exclude).
|
||
|
||
**СОВЕТ:** Покупайте только роутеры с USB.
|
||
В USB можно воткнуть флэшку и вынести на нее корневую файловую систему или использовать ее в качестве оверлея.
|
||
Не надо мучить себя, запихивая незапихиваемое в 8 мб встроенной флэшки.
|
||
Для комфортной работы с zapret нужен роутер с 16 Mb встроенной памяти или USB разъемом и 128+ Mb RAM.
|
||
На 64 Mb без swap будут проблемы с листами РКН. Если у вас только 64 Mb, и вы хотите листы РКН, подключите swap.
|
||
32 Mb для современных версий OpenWrt - конфигурация на грани живучести. Возможны хаотические падения процессов в oom.
|
||
Работа с листами РКН невозможна в принципе.
|