Comments (33)
а где находится этот лог? не пойму почему у меня не работает(
from antizapret.
Перепробовал уже по всякому - всё равно не обходится блокировка. У меня используется DNS Pi-Hole локально, но похоже всё равно утекает на днс провайдера запросы
from antizapret.
лог находится: System - Log files - General
Проверить, если ли записи в созданном Alias: Firewall - Diagnostics - pfTables и выбрать в выпадающем меню вверху нужный Alias
from antizapret.
Блокировка не обходится потому, что Alias не может наполниться данными - загрузка из файла из локальной файловой системы не работает, я об этом написал в первом сообщении.
from antizapret.
Спасибо за информацию.
Так получилось, что я этот репозиторий (да и вообще тему обхода блокировок) на какое-то время забросил.
Да, действительно, произошло какое-то изменение в работе ipfw, что он теперь не хочет брать локальные данные.
Я сейчас решил попробовать сделать аналогичный обходной путь через сервисный web-хост на той же машине, но в итоге пока не получилось исправить работу системы (см. ниже):
- Из-под рута исполнил команду
install -d /srv
для создания сервисного каталога; - Оттуда же с помощью
nano
исправил файлopnsense/actions_antizapret.conf
, изменяя место расположения файла данных:
...
[cron-iplist-renew]
command:/root/antizapret/antizapret.pl >/srv/ipfw_antizapret.dat
...
- Аналогично исправил последнюю строчку в файле
opnsense/install.sh
:
...
# Initially fetch data file
${DIR}/../antizapret.pl >/srv/ipfw_antizapret.dat
- Запустил
sh opnsense/install.sh
для внесения изменений в настройки работыcron
. - Настроил локальный HTTP-сервер для отдачи этих данных в пределах локальной сети (и только локальной сети!):
Services: Nginx: Configuration -> HTTP(s) -> Locations
Добавляем настройку:
Description: Local Service Host
URL Pattern: /
File System Root: /srvServices: 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
- Проверил отдачу данных с разных точек через
curl "http://<my_gateway_ip>:8081/ipfw_antizapret.dat"
- Особо проверил, чтобы этот сервер НЕ отвечал извне локальной сети;
- В настройках ipfw исправил алиас
AntiZapret_IPs
на Content =http://<my_gateway_ip>:8081/ipfw_antizapret.dat
- Перезапустил ipfw
Увы, в итоге выдаётся в логах error fetching alias url http://127.0.0.1:8081/ipfw_antizapret.dat [http_code:403]
(я пробовал разные варианты написания адреса сервера, не только этот).
Возможно, кто-то из вас сможет найти решение без использования других машин…
from antizapret.
Я вчера перешёл на 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.
Сейчас провёл эксперимент.
Создал простой 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.
Один большой недостаток - в pfsense при каждом изменении конфига, содержимое alias, которые было модифицировано через pfctl - сбрасывается.
Как временный костыль - выполнение команды из cron раз в минуту.
А вообще, просто помещу файл на соседний веб сервер, как и раньше, буду его по-нормальному загружать через URL Table.
from antizapret.
Ну или просто не забывать принудительно запускать скрипт обновления таблиц после каждого изменения конфига. Конфиг то менятся часто только при настройке. Потом, когда всё налажено - настроил и забыл.
from antizapret.
Поставил на виртуалку тестовый opnsense 21.1 (версию специально пишу, т.к. проверял на ней).
Нашёл рабочий способ (работает и на pfsense по такой методике)
Workaround следующий:
- Нужно создать дополнительную папку в /usr/local/www, например, aliases:
mkdir /usr/local/www/aliases - Через 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 - Создаём Alias типа "URL Table (IPs)", в качестве Content указываем https://<LAN IP адрес>/aliases/ipfw_antizapret.dat
Не забываем жать Apply - Через 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.
Спасибо за чудесную идею -- я почему-то в этот раз не догадался использовать уже имеющийся HTTP-сервер.
Я положил файл в /usr/local/www/ipfw_antizapret.dat
. Всё заработало. Более того, заработало и получение данных напрямую из файловой системы, без всяких костылей. Правда при этом в любом случае в логах пишется ошибка
error fetching alias url /usr/local/www/ipfw_antizapret.dat
Но данные при этом корректно в таблицу загружаются.
Оставлю как основной этот вариант, т.к. он более универсален.
from antizapret.
Из файловой системы скорее всего не заработало.
Оно пишет error fetching alias, но существующие данные просто не затирает. А так как до этого в алиас были загружены данные через урл - они там есть.
Если создать новый алиас и попробовать туда загрузить данные из ФС - в алиасе будет пусто, я сегодня проверял.
from antizapret.
Что-то какие-то чудеса у меня творятся.
Проверил локальное заполнение списка — из файловой системы и с локального веб-сервера. В обоих случаях у меня ничего не работает, увы. Выдаёт ошибку, что выше я упоминал.
Далее попробовал установить генератор списка на внешний веб-сервер в пределах локалки. Судя по логам, список корректно стал скачиваться файрволлом, но через pfTables видно, что таблица пуста. Пока ничего не понимаю. Буду дальше копать...
Из приятностей: основной скрипт сделал универсальным, чтобы он работал на любой операционке, насколько это возможно.
from antizapret.
# 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.
Всё. я понял в чём причина...
# 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.
Оказывается, есть лимит на размер таблицы. Он задаётся полем Firewall> Settings> Advanced> Firewall Maximum Table Entries
. Упомянутую выше ошибку получаем когда там стоит здачение по-умолчанию, которое подразумевает лимит в 200 000 записей.
Если в это поле поставить в явном виде "200000", получаем уже иную границу сбоя — при 131072 адресах всё нормально, при 131073 — сбой.
В общем, я тупо вписал в это поле 500 000 лимит... и (о чудо!) всё заработало. Притом, вообще всё! Даже локальное взятие данных из файловой системы, как это было задумано изначально.
Уже написал багрепорт создателям. Путь исправляют...
from antizapret.
Внёс исправления в код и добавил описание, как лечить ситуацию.
Проблему пока считаю исчерпаной, посему этот issue закрываю.
Всем спасибо за помощь и подсказки... :)
from antizapret.
ага, у меня изначально стоит 400000
Ставил руками после установки, на всякий случай... т.к. на железке 4гб ОЗУ, могу позволить..
Не знал даже, что вот так повлияет
from antizapret.
Это не баг — это фича!.. :-D
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235754#c0
from antizapret.
@Ranger21
Перепробовал уже по всякому - всё равно не обходится блокировка. У меня используется DNS Pi-Hole локально, но похоже всё равно утекает на днс провайдера запросы
Кстати о ДНС запросах...
Я себе настроил DNS-over-TLS, чтобы провайдер никак не мог видеть, куда я хожу. Но это не помогало, пока не включилась работа антизапрета. Часть сайтов была доступна нормально, а другая часть — нет. Причина, как я понял, в том, что провайдер ловит трафик по IP и пытается вместо отдать редирект на заглушку. А если не получается, то просто роняет соединение.
from antizapret.
Я почти сразу Firewall Maximum Table Entries повысил до больших пределов и проблемы из этого топика не было, но столкнулся с тем, что пока не могу понять как подружить две Pi-hole (в режиме резервирования), роутер и антизапрет.
Либо попадаю на заглушку, либо сайт не грузится вообще и прост таймаут. Наверное тоже надо смотреть в сторону DNS-over-TLS
from antizapret.
Я сторонник не делать костылей там, где можно без них. Сначала тоже делал какие-то обходные пути, а потом перешёл на DoT. Тем более, что он легко штатно включается.
В итоге внутри локалки DNS бегает по-старинке, а при попытке выхода наружу он заворачивается в DoT. Дополнительно на всякий случай я сделал аналогичное антизапрету прозрачное заворачивание любого исходящего трафика на 53 порт на локальный DNS сервер.
Вместе с антизапретом выходит, что для провайдера я весь такой белый и пушистый. Не запрашиваю ни одного адреса, не хожу на запрещённые ресурсы... Просто гоняю непонятно зачем огромную тучу трафика на толпу других машин. ;)
from antizapret.
Коль скоро тут идёт такое милое общение...
Я сделал версию скрипта, который умеет корректно оптимизировать диапазоны и IPv6.
https://github.com/Limych/antizapret/tree/feature/ipv6
Но он требует дополнительную (правда, весьма распространённую) библиотеку, что уменьшает его универсальность использования.
Как считаете, есть ли смысл сделать эту версию основной?
from antizapret.
На будущее лишним не будет, но прям сейчас это важно далеко не для всех. Например, мой провайдер вообще не даёт IPv6, я его в домашней сети и в настройках везде задисаблил за ненадобностью.
from antizapret.
Сейчас вроде добился того, что по днс отдаётся правильный айпишник, но при настройке транспарент прокси + правила в фаерфоле сайты не открываются с ошибкой
ERR_EMPTY_RESPONSE (хром)
PR_END_OF_FILE_ERROR (фаерфокс)
причём пытался в фаерволе указать как 127.0.0.1, так и 192.168.0.1, разницы нет
from antizapret.
Когда в качестве файрвола у меня стоял 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.
И да, я не стал использовать tor, у меня есть vps в Европе, я просто поднял wireguard туннель, и пускаю весь antizapret траффик туда, на дополнительный gateway.
А можно поподробнее узнать, как конкретно отправляется запретный трафик в тунель? А то у меня тоже появился свой VPS. Хочу попробовать работать через него, но что-то запутался в настройках...
Что там за правило такое волшебное?
from antizapret.
На 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.
Я пытался применить какую-то инструкцию по овпн и роутингу трафика для впн с https://antizapret.prostovpn.org/, но не получилось(
у антизапрета какая-то особенность, что ещё надо, чтобы днс был ихний, тогда сайты будут работать. Было бы прикольно, если бы кто-то смог настроить на opnsense и описать весь процесс, я как только не тыкался, не работает(
from antizapret.
Там если скачать конфиг антизапрета и открыть блокнотом, то можно прочитать:
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.
Про FreeBSD - ни слова ))
from antizapret.
Надо, чтобы системный DNS менялся исключительно на антизапретовский, только при поднятом туннеле.
Сомневаюсь, что это можно сделать на текущих сборках opnsense/pfsense
from antizapret.
http://127.0.0.1/ipfw_antizapret.dat
ВСё решение для тора
надо в описании поправить
from antizapret.
Related Issues (6)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from antizapret.