Overview

HTTPS SSH

АнтиЗапрет

Данный репозиторий содержит набор скриптов, который используется на http://antizapret.prostovpn.org/. С их помощью вы сможете генерировать файл автоконфигурации прокси (PAC), содержащий список IP-адресов, внесенный в реестр запрещенных сайтов, конфигурацию для OpenVPN, которая отправит клиентам список маршрутов на заблокированные адреса, и настроки DNS-сервера dnsmasq, чтобы он отвечал определенным IP-адресом на запросы к заблокированным сайтам.
Другими словами, вы сможете поднять аналог сервиса АнтиЗапрет на своих мощностях.

Зависимости

Чтобы скрипты работали корректно, в вашей системе должны быть следующие утилиты:

  • coreutils
  • GNU awk
  • grep
  • curl
  • iconv
  • idn
  • GNU parallel
  • Python 3
  • dig (пакет dnsutils или bind-tools)
  • OpenVPN, dnsmasq и/или прокси-сервер
  • Опционально: ipset

Логика работы

Первым делом скачивается свежий лист заблокированных сайтов с репозитория zapret-info на github, далее все хосты из этого списка резолвятся, т.к. реестр может содержать устаревшие IP, через один или два DNS-сервера, объединяются с IP из реестра, после чего генерируется PAC-файл.

Прежде чем сгенерировать конфигурационный файл OpenVPN, запускается скрипт collapse.py, который конвертирует несколько подряд идущих адресов в подсеть, если это возможно.

Назначение файлов и скриптов

config.sh — конфигурационный файл. Укажите в нем адрес прокси, который будет использоваться в PAC; адрес DNS для dnsmasq и адреса DNS-серверов, через которые будет произвозводится резолвинг; количество потоков и адресов для резолва в потоке; изменить необходимые пути для хранения конфигов и PAC файлов.

doall.sh — главный скрипт, который скачивает список заблокированных сайтов и запускает другие скрипты. Раскомментируйте ту функциональность, которая вам нужна, и закомментируйте вызовы тех скриптов, которые вам не требуются.

genpac-ip.sh и genpac-hostname.sh - генерируют PAC-файл со списком IP-адресов и хостов соответственно.

gendnsmasq.sh - создает конфигурационный файл с алиасами для dnsmasq.

genopenvpn.sh - создает дефолтный control-config-file для OpenVPN

setiptables.sh и setipset.sh - добавляют все заблокированные IP-адреса в таблицу "zapret" netfilter (iptables) и ipset соответственно (подробнее ниже).

customhosts.txt и customips.txt — текстовые файлы, содержащие хосты и IP-адреса соответственно, которые нужно пометить в качестве неисключаемых проксируемых.

ignorehosts.txt и ignoreips.txt — текстовые файлы с хостами и IP-адресами, которые не будут проксироваться, если они находятся в списке.

Настройка iptables

Если вы хотите разрешить маршрутизировать трафик через прокси-сервер и OpenVPN только на те IP, которые есть в списке, вам необходимо использовать скрипты setiptables.sh или setipset.sh для заполнения таблиц с IP-адресами запрещенных сайтов, и настроить фильтр таким образом, чтобы пользоваль, из-под которым запущен прокси-сервер, и таблица, фильтрующая транзитные пакеты FORWARD для OpenVPN, могли открывать только IP из этой таблицы. Пример для ipset:

iptables -N zapret
iptables -A FORWARD -j zapret
iptables -A FORWARD -o antizapretvpn -j ACCEPT # antizapretvpn — название VPN-интерфейса
iptables -A FORWARD -j REJECT --reject-with icmp-admin-prohibited
iptables -A OUTPUT -p tcp -m owner --uid-owner 999 -j zapret # 999 — ID пользователя прокси-сервера
iptables -A OUTPUT -p tcp -m owner --uid-owner 999 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REJECT --reject-with tcp-reset
iptables -A zapret -m set --match-set zapret dst -j ACCEPT