Code Monkey home page Code Monkey logo

Comments (33)

Ranger21 avatar Ranger21 commented on August 20, 2024

а где находится этот лог? не пойму почему у меня не работает(

from antizapret.

Ranger21 avatar Ranger21 commented on August 20, 2024

Перепробовал уже по всякому - всё равно не обходится блокировка. У меня используется DNS Pi-Hole локально, но похоже всё равно утекает на днс провайдера запросы

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

лог находится: System - Log files - General

Проверить, если ли записи в созданном Alias: Firewall - Diagnostics - pfTables и выбрать в выпадающем меню вверху нужный Alias

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Блокировка не обходится потому, что Alias не может наполниться данными - загрузка из файла из локальной файловой системы не работает, я об этом написал в первом сообщении.

from antizapret.

Limych avatar Limych commented on August 20, 2024

Спасибо за информацию.
Так получилось, что я этот репозиторий (да и вообще тему обхода блокировок) на какое-то время забросил.

Да, действительно, произошло какое-то изменение в работе ipfw, что он теперь не хочет брать локальные данные.
Я сейчас решил попробовать сделать аналогичный обходной путь через сервисный web-хост на той же машине, но в итоге пока не получилось исправить работу системы (см. ниже):

  1. Из-под рута исполнил команду install -d /srv для создания сервисного каталога;
  2. Оттуда же с помощью nano исправил файл opnsense/actions_antizapret.conf, изменяя место расположения файла данных:
...
[cron-iplist-renew]
command:/root/antizapret/antizapret.pl >/srv/ipfw_antizapret.dat
...
  1. Аналогично исправил последнюю строчку в файле opnsense/install.sh:
...
# Initially fetch data file
${DIR}/../antizapret.pl >/srv/ipfw_antizapret.dat
  1. Запустил sh opnsense/install.sh для внесения изменений в настройки работы cron.
  2. Настроил локальный HTTP-сервер для отдачи этих данных в пределах локальной сети (и только локальной сети!):
    1. Services: Nginx: Configuration -> HTTP(s) -> Locations
      Добавляем настройку:
      Description: Local Service Host
      URL Pattern: /
      File System Root: /srv
    2. Services: Nginx: Configuration -> HTTP(s) -> HTTP Server
      Добавляем сервер:
      HTTP Listen Port: 8081
      HTTPS Listen Port: —
      Server Name: localhost
      Locations: Local Service Host
      Block Configuration Files: Enable
      Enable Sendfile: Enable
  3. Проверил отдачу данных с разных точек через curl "http://<my_gateway_ip>:8081/ipfw_antizapret.dat"
  4. Особо проверил, чтобы этот сервер НЕ отвечал извне локальной сети;
  5. В настройках ipfw исправил алиас AntiZapret_IPs на Content = http://<my_gateway_ip>:8081/ipfw_antizapret.dat
  6. Перезапустил ipfw

Увы, в итоге выдаётся в логах error fetching alias url http://127.0.0.1:8081/ipfw_antizapret.dat [http_code:403] (я пробовал разные варианты написания адреса сервера, не только этот).

Возможно, кто-то из вас сможет найти решение без использования других машин…

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Я вчера перешёл на pfsense, т.к. они наконец-то разродились выкатить поддержку wireguard (мне он нужен), но пока только в DEVELOPMENT версии. В отличие от opnsense, в pfsense wireguard реализован в ядре, а не в userspace, соответственно, его производительность намного лучше.
Но это лирика. Так как я перешёл на pfsense, я решил проверить, как настроить обход блокировок на нём.
Накопал следующее: команда pfctl умеет наполнять Alias данными с локального файла.
Синтаксис следующий:
pfctl -t <имя Alias> -T replace -f <файл, откуда брать>
В моём случае это pfctl -t Antizapret_list -T replace -f /root/iptable
В iptable я загружаю данные через тот же /root/antizapret/antizapret.pl > /root/iptable

Я сделал файл /usr/local/etc/rc.d/update_antizapret.sh, с содержимым pfctl -t Antizapret_list -T replace -f /root/iptable
сделал его исполняемым chmod +x /usr/local/etc/rc.d/update_antizapret.sh
Соответственно, так как он в папке /usr/local/etc/rc.d и имеет расширение sh и он исполняемый, он автоматически выполняется после загрузки операционной системы, затем у меня этот файл присутствует в cron, выполняется через некоторое время после выполнения /root/antizapret/antizapret.pl > /root/iptable

Ну и да, перед настройкой всего этого нужно создать Alias с именем Antizapret_list типа URL Table (IPs), указать в качестве источника любой адрес, я указал http://127.0.0.1, ведь всё равно этот Alias перезатирается по cron командой pfctl

К чему я это пишу. Так как у меня теперь нет под рукой opnsense, я не могу проверить, есть ли в opnsense команда pfctl

Если есть, то можно использовать её. Данное сообщение чисто как наводка.

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Сейчас провёл эксперимент.
Создал простой Alias типа Hosts (там, где ручками через веб морду надо IP или имена хостов вписывать)
Не вносил ни одной записи, лишь просто создал пустой Alias.
Затем выполнил команду pfctl -t New_Alias -T replace -f /root/iptable

Итог - через веб интерфейс если открываю этот Alias - он как и был пустым, так и остаётся - ведь веб интерфейс не знает ничего о том, что я через shell его модифицировал.
Если проверяю через Diagnostics / Tables (в opnsense это Firewall - Diagnostics - pfTables) - то видно, что alias содержит нужные нам данные.
Наверное, после ребута этот alias очистится, для этого нужно наполнять его скриптом после загрузки, я написал ранее, как.
И да, если попытаться руками в этот alias добавить какую-нить запись, я имею в виду штатный редактор через веб интерфейс, то данные там могут испортиться, нужно будет заново применять команду pfctl

Так как pfctl - это часть FreeBSD, а не pfsense, то полагаю, что в opnsense она тоже отработает.

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Один большой недостаток - в pfsense при каждом изменении конфига, содержимое alias, которые было модифицировано через pfctl - сбрасывается.
Как временный костыль - выполнение команды из cron раз в минуту.
А вообще, просто помещу файл на соседний веб сервер, как и раньше, буду его по-нормальному загружать через URL Table.

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Ну или просто не забывать принудительно запускать скрипт обновления таблиц после каждого изменения конфига. Конфиг то менятся часто только при настройке. Потом, когда всё налажено - настроил и забыл.

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Поставил на виртуалку тестовый opnsense 21.1 (версию специально пишу, т.к. проверял на ней).
Нашёл рабочий способ (работает и на pfsense по такой методике)
Workaround следующий:

  1. Нужно создать дополнительную папку в /usr/local/www, например, aliases:
    mkdir /usr/local/www/aliases
  2. Через cron или ручками делаем /root/antizapret/antizapret.pl > /usr/local/www/aliases/ipfw_antizapret.dat
    при этом в папке /usr/local/www/aliases создаётся файл ipfw_antizapret.dat с перечнем заблокированных IP адресов, этот файл будет доступен из локалочки по адресу https://<LAN IP адрес>/aliases/ipfw_antizapret.dat, например у меня на тестовом стенде это https://10.5.5.250/aliases/ipfw_antizapret.dat
  3. Создаём Alias типа "URL Table (IPs)", в качестве Content указываем https://<LAN IP адрес>/aliases/ipfw_antizapret.dat
    Не забываем жать Apply
  4. Через Firewall - Diagnostics - pfTables проверям результат - выбираем Alias в выпадающем меню - содержимое должно выдать список IP адресов, которые содержатся в файле /usr/local/www/aliases/ipfw_antizapret.dat

P.S.
команда pfctl -t <имя Alias> -T replace -f /usr/local/www/aliases/ipfw_antizapret.dat также работает - наполняет заданный Alias данными

А команда pfctl -t <имя Alias> -T show выводит в консоль содержимое запрошенного Alias

P.P.S.

Подпапку можно и не создавать. Если загружать файл прямо в корень /usr/local/www - то оттуда загрузка тоже работает... Странно, вроде я так пробовал раньше - не работало. Может быть в 21.1 это исправили - хз.... непонятно.

from antizapret.

Limych avatar Limych commented on August 20, 2024

Спасибо за чудесную идею -- я почему-то в этот раз не догадался использовать уже имеющийся HTTP-сервер.
Я положил файл в /usr/local/www/ipfw_antizapret.dat. Всё заработало. Более того, заработало и получение данных напрямую из файловой системы, без всяких костылей. Правда при этом в любом случае в логах пишется ошибка

error fetching alias url /usr/local/www/ipfw_antizapret.dat

Но данные при этом корректно в таблицу загружаются.

Оставлю как основной этот вариант, т.к. он более универсален.

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Из файловой системы скорее всего не заработало.
Оно пишет error fetching alias, но существующие данные просто не затирает. А так как до этого в алиас были загружены данные через урл - они там есть.
Если создать новый алиас и попробовать туда загрузить данные из ФС - в алиасе будет пусто, я сегодня проверял.

from antizapret.

Limych avatar Limych commented on August 20, 2024

Что-то какие-то чудеса у меня творятся.
Проверил локальное заполнение списка — из файловой системы и с локального веб-сервера. В обоих случаях у меня ничего не работает, увы. Выдаёт ошибку, что выше я упоминал.

Далее попробовал установить генератор списка на внешний веб-сервер в пределах локалки. Судя по логам, список корректно стал скачиваться файрволлом, но через pfTables видно, что таблица пуста. Пока ничего не понимаю. Буду дальше копать...

Из приятностей: основной скрипт сделал универсальным, чтобы он работал на любой операционке, насколько это возможно.

from antizapret.

Limych avatar Limych commented on August 20, 2024
# pfctl -t "A_test2" -T show                                              
   192.168.0.1
   192.168.0.2
# pfctl -t "A_test2" -T replace -f /usr/local/www/ipfw_antizapret.dat 
pfctl: Invalid argument.
# pfctl -t "A_test2" -T replace -f /usr/local/etc/bogons              
1320 addresses added.
2 addresses deleted.
# pfctl -t "A_test2" -T show |wc -l
    1320
#

Чудеса да и только... Ума не приложу, в чём проблема... :(

from antizapret.

Limych avatar Limych commented on August 20, 2024

Всё. я понял в чём причина...

# tail -n 32768 /usr/local/www/ipfw_antizapret.dat >/tmp/iptable
# pfctl -t "A_test2" -T replace -f /tmp/iptable && pfctl -t "A_test2" -T show | wc -l
1 addresses added.
   32768
# tail -n 32769 /usr/local/www/ipfw_antizapret.dat >/tmp/iptable
# pfctl -t "A_test2" -T replace -f /tmp/iptable && pfctl -t "A_test2" -T show | wc -l
pfctl: Invalid argument.
#

Максимально допустимый размер таблицы — 32768 адресов. :-/

Как лечить будем?..

from antizapret.

Limych avatar Limych commented on August 20, 2024

Оказывается, есть лимит на размер таблицы. Он задаётся полем Firewall> Settings> Advanced> Firewall Maximum Table Entries. Упомянутую выше ошибку получаем когда там стоит здачение по-умолчанию, которое подразумевает лимит в 200 000 записей.
Если в это поле поставить в явном виде "200000", получаем уже иную границу сбоя — при 131072 адресах всё нормально, при 131073 — сбой.

В общем, я тупо вписал в это поле 500 000 лимит... и (о чудо!) всё заработало. Притом, вообще всё! Даже локальное взятие данных из файловой системы, как это было задумано изначально.

Уже написал багрепорт создателям. Путь исправляют...

from antizapret.

Limych avatar Limych commented on August 20, 2024

Внёс исправления в код и добавил описание, как лечить ситуацию.
Проблему пока считаю исчерпаной, посему этот issue закрываю.
Всем спасибо за помощь и подсказки... :)

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

ага, у меня изначально стоит 400000
Ставил руками после установки, на всякий случай... т.к. на железке 4гб ОЗУ, могу позволить..
Не знал даже, что вот так повлияет

from antizapret.

Limych avatar Limych commented on August 20, 2024

Это не баг — это фича!.. :-D
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235754#c0

from antizapret.

Limych avatar Limych commented on August 20, 2024

@Ranger21
Перепробовал уже по всякому - всё равно не обходится блокировка. У меня используется DNS Pi-Hole локально, но похоже всё равно утекает на днс провайдера запросы

Кстати о ДНС запросах...
Я себе настроил DNS-over-TLS, чтобы провайдер никак не мог видеть, куда я хожу. Но это не помогало, пока не включилась работа антизапрета. Часть сайтов была доступна нормально, а другая часть — нет. Причина, как я понял, в том, что провайдер ловит трафик по IP и пытается вместо отдать редирект на заглушку. А если не получается, то просто роняет соединение.

from antizapret.

Ranger21 avatar Ranger21 commented on August 20, 2024

Я почти сразу Firewall Maximum Table Entries повысил до больших пределов и проблемы из этого топика не было, но столкнулся с тем, что пока не могу понять как подружить две Pi-hole (в режиме резервирования), роутер и антизапрет.

Либо попадаю на заглушку, либо сайт не грузится вообще и прост таймаут. Наверное тоже надо смотреть в сторону DNS-over-TLS

from antizapret.

Limych avatar Limych commented on August 20, 2024

Я сторонник не делать костылей там, где можно без них. Сначала тоже делал какие-то обходные пути, а потом перешёл на DoT. Тем более, что он легко штатно включается.
В итоге внутри локалки DNS бегает по-старинке, а при попытке выхода наружу он заворачивается в DoT. Дополнительно на всякий случай я сделал аналогичное антизапрету прозрачное заворачивание любого исходящего трафика на 53 порт на локальный DNS сервер.
Вместе с антизапретом выходит, что для провайдера я весь такой белый и пушистый. Не запрашиваю ни одного адреса, не хожу на запрещённые ресурсы... Просто гоняю непонятно зачем огромную тучу трафика на толпу других машин. ;)

from antizapret.

Limych avatar Limych commented on August 20, 2024

Коль скоро тут идёт такое милое общение...

Я сделал версию скрипта, который умеет корректно оптимизировать диапазоны и IPv6.
https://github.com/Limych/antizapret/tree/feature/ipv6

Но он требует дополнительную (правда, весьма распространённую) библиотеку, что уменьшает его универсальность использования.

Как считаете, есть ли смысл сделать эту версию основной?

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

На будущее лишним не будет, но прям сейчас это важно далеко не для всех. Например, мой провайдер вообще не даёт IPv6, я его в домашней сети и в настройках везде задисаблил за ненадобностью.

from antizapret.

Ranger21 avatar Ranger21 commented on August 20, 2024

Сейчас вроде добился того, что по днс отдаётся правильный айпишник, но при настройке транспарент прокси + правила в фаерфоле сайты не открываются с ошибкой
ERR_EMPTY_RESPONSE (хром)
PR_END_OF_FILE_ERROR (фаерфокс)

причём пытался в фаерволе указать как 127.0.0.1, так и 192.168.0.1, разницы нет

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Когда в качестве файрвола у меня стоял opnsense, я пробовал настроить по инструкции, используя tor. Не взлетело.
Также, я пробовал использовать 3proxy в качестве transparent proxy - тоже не заработало.
В итоге, я просто поднял туннель до vps, создал интерфейс с этим vps, обозначил gateway новый и просто обычным правилом заворачиваю весь трафик с заблокированных IP на этот gateway.
По поводу DNS - дома у меня провайдер не подменяет IP адреса, поэтому, я ничего не мутил с этим. Можно, конечно, на vps поднять свой резолвер, но буду это делать только тогда, когда будут проблемы.

А на работе - да, там даже пинг на любой из заблокированных ресурсов возвращал ip адрес странички-заглушки.
На работе 4 своих dns сервера, пришлось для каждого мутить дополнительную прокладку в виде DoH прокси, ибо любые запросы к сторонним DNS серверам (неважно, провайдерским или публичным 1.1.1.1, 8.8.8.8 и т.п.) - подменялись.
В качестве DNS используется bind, та версия, что собрана в качестве продакшн - не умеет работать с DoH.
Почему так пишу - потому что не слежу за версиями, я не знаю, умеет ли bind работать с DoH в принципе )))

from antizapret.

Limych avatar Limych commented on August 20, 2024

@Resquer

И да, я не стал использовать tor, у меня есть vps в Европе, я просто поднял wireguard туннель, и пускаю весь antizapret траффик туда, на дополнительный gateway.

А можно поподробнее узнать, как конкретно отправляется запретный трафик в тунель? А то у меня тоже появился свой VPS. Хочу попробовать работать через него, но что-то запутался в настройках...
Что там за правило такое волшебное?

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

На vps поднимается openvpn сервер (сначала я делал через wireguard, но потом пришлось всё переделать на openvpn, т.к. через через wg были проблемы - не все сайты через него открывались, глубокое изучение проблемы указало на то, что причина в маленьком mtu у туннеля wg - лень было искать решение, мне проще было переделать на openvpn).
На том же vps нужно включить маршрутизацию и через iptables настроить маскарадинг, чтобы там работал NAT.
Далее, настраивается простенький туннель, можно без сертификатов, просто на основе TLS ключа.
На стороне pfsense/opnsense поднимается openvpn клиент, затем нужно создать новый интерфейс - придумать ему имя и назначить его на появившийся ovpnc интерфейс. В pfsense при этом автоматически настраивается новый gateway с внутренним opnenvpn ip адресом vps сервера, в opnsense вроде надо руками новый gateway создавать... Затем в настройках NAT - Outbound нужно включить гибридный режим и настроить исходящий мапинг, по аналогии с автоматически созданными правилами, но на новом vpn интерфейсе.
Ну а затем - в правилах LAN создаётся новое: протоколы - все, источник - LAN subnet, назначение - Antizapret_alias, в адвансед настройках указать gateway - тот, который создавали. Всё.

from antizapret.

Ranger21 avatar Ranger21 commented on August 20, 2024

Я пытался применить какую-то инструкцию по овпн и роутингу трафика для впн с https://antizapret.prostovpn.org/, но не получилось(
у антизапрета какая-то особенность, что ещё надо, чтобы днс был ихний, тогда сайты будут работать. Было бы прикольно, если бы кто-то смог настроить на opnsense и описать весь процесс, я как только не тыкался, не работает(

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Там если скачать конфиг антизапрета и открыть блокнотом, то можно прочитать:

NOTE TO LINUX USERS

OpenVPN does not handle DNS on Linux.

This also applies to ROUTERS.

You have two workarounds:

1. Configure OpenVPN connection using NetworkManager.

This is preferrable method.

2. Uncomment the lines below

For Debian, Ubuntu and derivatives:

script-security 2

up /etc/openvpn/update-resolv-conf

down /etc/openvpn/update-resolv-conf

For Fedora:

script-security 2

up /usr/share/doc/openvpn/contrib/pull-resolv-conf/client.up

down /usr/share/doc/openvpn/contrib/pull-resolv-conf/client.down

For routers, contact your router manufacturer.

###############################

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Про FreeBSD - ни слова ))

from antizapret.

Resquer avatar Resquer commented on August 20, 2024

Надо, чтобы системный DNS менялся исключительно на антизапретовский, только при поднятом туннеле.
Сомневаюсь, что это можно сделать на текущих сборках opnsense/pfsense

from antizapret.

Ranger21 avatar Ranger21 commented on August 20, 2024

http://127.0.0.1/ipfw_antizapret.dat
ВСё решение для тора
надо в описании поправить

from antizapret.

Related Issues (6)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.