zapret/docs/manual_setup.md
2024-09-17 17:12:49 +03:00

16 KiB
Raw Blame History

Пример ручной установки на Debian-подобную систему

На Debian основано большое количество дистрибутивов Linux, включая Ubuntu. Здесь рассматриваются прежде всего Debian 8+ и Ubuntu 16+. Но с большой вероятностью может сработать и на производных от них. Главное условие - наличие systemd, apt и нескольких стандартных пакетов в репозитории.

Установить пакеты:

apt-get update
apt-get install ipset curl dnsutils git

Если хотите использовать nftables, то нужен пакет nftables, а ipset не обязателен.

Скопировать директорию zapret в /opt или скачать через git:

cd /opt
git clone --depth 1 https://github.com/bol-van/zapret

Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники.

/opt/zapret/install_bin.sh

АЛЬТЕРНАТИВА: make -C /opt/zapret. Получите динамические бинарники под вашу ось. Для сборки требуются dev пакеты: zlib1g-dev, libcap-dev, libnetfilter-queue-dev.

Создать конфиг по умолчанию:

cp /opt/zapret/config.default /opt/zapret/config

Настроить параметры согласно разделу "Выбор параметров".

Создать user листы по умолчанию:

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:

ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system

Удалить старые листы, если они были созданы ранее:

/opt/zapret/ipset/clear_lists.sh

По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.

Выполнить скрипт обновления листа:

/opt/zapret/ipset/get_config.sh

Настроить таймер systemd для обновления листа:

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.

Установить пакеты:

yum install -y curl ipset dnsutils git

Далее все аналогично Debian.

openSUSE

Новые openSUSE основаны на systemd и менеджере пакетов zypper.

Установить пакеты:

zypper --non-interactive install curl ipset

Далее все аналогично Debian, кроме расположения systemd. В openSUSE он находится не в /lib/systemd, а в /usr/lib/systemd. Правильные команды будут:

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.

Установить пакеты:

pacman -Syy
pacman --noconfirm -S ipset curl

Далее все аналогично Debian.

Gentoo

Эта система использует OpenRC - улучшенную версию sysvinit. Установка пакетов производится командой: emerge <package_name> Пакеты собираются из исходников.

Требуются все те же ipset, curl, git для скачивания с GitHub. git и curl по умолчанию могут присутствовать, ipset отсутствует.

emerge ipset

Настроить параметры согласно разделу "Выбор параметров".

Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники:

/opt/zapret/install_bin.sh

АЛЬТЕРНАТИВА: make -C /opt/zapret. Получите динамические бинарники под вашу ось.

Удалить старые листы, если они были созданы ранее:

/opt/zapret/ipset/clear_lists.sh

По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.

Выполнить скрипт обновления листа:

/opt/zapret/ipset/get_config.sh

Зашедулить обновление листа:

crontab -e

Создать для крона строчку 0 12 */2* * /opt/zapret/ipset/get_config.sh

Подключить init скрипт:

ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d
rc-update add zapret

Запустить службу:

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

Установить дополнительные пакеты:

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 на роутер.

Если места достаточно, самый простой способ:

opkg update
opkg install git-http
mkdir /opt
cd /opt
git clone --depth 1 https://github.com/bol-van/zapret

Если места немного:

opkg update
opkg install openssh-sftp-server unzip
ifconfig br-lan

Скачать на комп с GitHub zip архив кнопкой "Clone or download" -> Download ZIP Скопировать средствами sftp zip архив на роутер в /tmp.

mkdir /opt
cd /opt
unzip /tmp/zapret-master.zip
mv zapret-master zapret
rm /tmp/zapret-master.zip

Если места совсем мало: На Linux системе скачать и распаковать zapret. Оставить необходимый минимум файлов. Запаковать в архив zapret.tar.gz.

nc -l -p 1111 < zapret.tar.gz

На роутере:

cd /tmp
nc <linux_system_ip> 1111 >zapret.tar.gz

Не стоит работать с распакованной версией zapret на Windows. Потеряются ссылки и chmod.

Запустить автоинсталлятор бинарников. Он сам определит рабочую архитектуру и настроит все бинарники:

/opt/zapret/install_bin.sh

Создать ссылку на скрипт запуска:

ln -fs /opt/zapret/init.d/openwrt/zapret /etc/init.d

Создать ссылку на скрипт события поднятия интерфейса:

ln -fs /opt/zapret/init.d/openwrt/90-zapret /etc/hotplug.d/iface

Создать конфиг по умолчанию:

cp /opt/zapret/config.default /opt/zapret/config

Настроить параметры согласно разделу "Выбор параметров".

Создать user листы по умолчанию:

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

Удалить старые листы, если они были созданы ранее:

/opt/zapret/ipset/clear_lists.sh

По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены. Выполнить скрипт обновления листа:

/opt/zapret/ipset/get_config.sh

Зашедулить обновление листа:

crontab -e

Создать для крона строчку 0 12 */2* * /opt/zapret/ipset/get_config.sh

Включить автозапуск службы и запустить ее:

/etc/init.d/zapret enable
/etc/init.d/zapret start

ПРИМЕЧАНИЕ: на этапе старта системы интерфейсы еще не подняты. В некоторых случаях невозможно правильно сформировать параметры запуска демонов, не зная имя физического интерфейса LAN. Скрипт из /etc/hotplug.d/iface перезапустит демоны по событию поднятия LAN.

Создать ссылку на firewall include:

ln -fs /opt/zapret/init.d/openwrt/firewall.zapret /etc/firewall.zapret

Проверить была ли создана ранее запись о firewall include:

uci show firewall | grep firewall.zapret

Если firewall.zapret нет, значит добавить:

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:

uci show firewall.@defaults[0]

Если flow_offloading=1 или flow_offloading_hw=1:

uci set firewall.@defaults[0].flow_offloading=0
uci set firewall.@defaults[0].flow_offloading_hw=0
uci commit firewall

Перезапустить фаервол:

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. Работа с листами РКН невозможна в принципе.