Zapret: обсуждение

Простой способ для openwrt:
Создать файл 20-except по пути \opt\zapret\init.d\openwrt\custom.d
Содержание файла (поменять на нужные ip устройств)

EXCEPT_SRC=‘{ 192.168.3.228, 192.168.11.11}’
nft insert rule inet zapret postrouting_hook index 0
ip saddr $EXCEPT_SRC meta mark set meta mark | 0x40000000

Сделать рестарт службы /etc/init.d/zapret restart

Есть еще оригинальный способ от болавана, сложный и наверно лучше чем этот Zapret: what's new - #192 by bolvan

Не сработает для ipv4 в postnat режиме. saddr уже переписан NAT.
Лучше способ от болвана

Правильно ли я понял последовательность шагов для OpenwRT?

  1. Раскомментируем в /opt/zapret/config переменную FILTER_MARK.
  2. Создаём /etc/nftables/99-my.nft и опсываем там правила установки метки 0x10000000.
  3. Рестарт firewall.
  4. Рестарт zapret.
    Осталось прописать исключение в 99-my.nft, т.к. ip saddr 192.168.1.0/24 mark set mark or 0x10000000; пометит всю подсеть.

Значит у меня не postnat, мне помогает.

chain my_pre {
    type nat hook prerouting priority -102;
    ip saddr 192.168.1.162 return; # Исключаем IP
    ip saddr 192.168.1.0/24 mark set mark or 0x10000000;
}

chain my_out {
    type nat hook output priority -102;
    mark set mark or 0x10000000;
}

@bolvan , так будет работать?

Так может быть не очень хорошо, потому что не прописаны фильтры по ifname.
У вас pre будет на роутере срабатывать на всех интерфейсах.
wan и lan
Хотя, saddr 192.168 вряд ли появится на wan, но лучше все же добавить iifname
Можно использоватьiifname @lanif, если это zapret1.
На zapret2 lanif отсутствует

Впрочем, даже если придет 192.168 откуда не надо, при наличии wanif фильтра zapret не будет дурить трафик с выхода LAN. wanif будет автоматом на openwrt, на обычном linux - только если прописан IFACE_WAN.
Если есть кроме LAN /WAN всякие VPN линки тоже с 192.168., то там фильтр по интерфейсам крайне желателен, и не всегда он сгодится по умолчанию на OPENWRT. VPN канал дурить не надо, если он идет вне RU

Спасибо за разъяснения.
Переполз на zapret2, перенёс страты от zapret1 - пока работает. Да, впны тоже есть, так что выглядит вполне целесообразным добавление условия.
В итоге что-то вроде такого получилось, если добавить условие по интерфейсу - марксируем весь трафик с локалки, кроме одного адреса:

chain my_pre {
    type nat hook prerouting priority -102;
    iifname "br-lan" ip saddr 192.168.1.162 return;
    iifname "br-lan" ip saddr 192.168.1.0/24 mark set mark or 0x10000000;
}

Хочу на отдельной машине (mini pc) несколько дней погонять blockchek2 для сборы информации о текущей ситуации.

Так и не смог завести обход запрета через метки. Это вообще возможно для nfqws2?

С учётом этого замечания.

Для nftables основная схема процессинга nfqws - POSTNAT. nfqws не видит исходных адресов локальной сети, потому даже если вписать дополнительные условия в правила, это не сработает, если надо отсеивать отдельные клиенты в локалке.

Накосячил в том своем давнем посте
Заменить в хуке nat => filter
Проверил : nat - нет, filter - да

То, что только сейчас вскрылось, говорит о запредельной сложности решения для большинства :slight_smile: И о малой востребованности такой фильтрации

аксиома, на форумах видел что люди используют https://ntc.party/t/zapret-обсуждение/726/8616 и жалоб что это не сработало не было как ни странно, но ни разу не видел что кто то использовал оригинальный сложный метод, artemklevtsov будет первым)

ip saddr $EXCEPT_SRC meta mark set meta mark | 0x40000000

В postrouting - да, еще видны адреса локалки. В posnat уже нет.
Здесь используется desync mark, чтобы исключить перенаправление на очередь

Но зачем это делать, если с таким же уровнем сложности в кастоме можно поставить FILTER_MARK ?

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

Так оно не легше, оно такое же по сложности.
Только кто-то додумался поместить это в кастом.
Соглашусь - в этом есть резон, но чем не угодил FILTER_MARK ?
Что надо еще раскоментировать переменную в config ?

Используя desync mark, можно получить нежелательные эффекты.
Я считаю, что этот бит означает генерированный nfqws трафик, соответственно строю логику таблиц вокруг этого. так я буду считать ваши исключения nfqws трафиком, и что я с ними сделаю сегодня или завтра - неведомо даже мне.
Сегодня - да, наложений в таком варианте использования не вижу, но ведь поломать смогу в zapret2, куда вы обязательно это понесете

Наверно кто-то попробовал оригинальный вариант, увидел, что он не работает из-за ошибки, и сделал свой, а потом разошлось

Успеха я пока так и не добился. Возможно, при причине, о которой @bolvan написал (это я проверю), а возможно потому, что для nfqws2 нет решения.

В nfqws2 ничего не поменялось в этой сфере. Он вообще тут не при делах, поскольку не проверяет никакие IP адреса. Единственное, что он проверяет, это mark, чтобы там не было desync mark. Иначе просто отпускает пакет.

С исправлением nat на filter у меня все нормально работает

Подтверждаю. Теперь всё работает.
Итого, что нужно сделать:

  1. Раскомментировать в /opt/zapret2/config строку с FILTER_MARK.
  2. Создать /etc/nftables.d/99-zapret2.nft:
chain zapret2_pre {
    type filter hook prerouting priority -102; policy accept;
    iifname "br-lan" ip saddr 192.168.1.162 return;
    iifname "br-lan" ip saddr 192.168.1.0/24 mark set mark or 0x10000000;
}

chain zapret2_out {
    type nat hook output priority -102; policy accept;
    mark set mark or 0x10000000;
}
  1. Перезапустить сервисы zapret2 и firewall.

Имя интерфейса локальной сети уточнить через ip addr или создать в nft файле set.

Всем добрый вечер.

Пишу такой вот интересный вопрос. У меня на даче стоит Wii U, которая работает как примитивный медиацентр. Единственная польза от неё - рабочий youtube.

Проблема следующая. Насколько я понимаю принцип работы этого чуда техники, то оно весь интернет толкает в TLS 1.1. Я копировал стратегии тут, делал свои, т.д., пришёл к одному выводу: дробить пакет бессмысленно, помогает только seq overlap на TLS. Чётко не помню, что и как, но последняя рабочая стратегия у меня выглядит таким образом:

--new 
--filter-tcp=443 --hostlist-domains=googlevideo.com --hostlist=/opt/zapret/lists/russia-youtube.txt --hostlist=/opt/zapret/lists/whatsapp.txt --hostlist-exclude-domains=youtube.com,ggpht.com,ytimg.com,ytimg.l.google.com,jnn-pa.googleapis.com,manifest.googlevideo.com,youtube-nocookie.com,youtube-ui.l.google.com --dpi-desync=multisplit --dpi-desync-split-seqovl=1 --dpi-desync-split-pos=sld+1 --new 
--filter-tcp=443,2053,2083,2087,2096 --hostlist=/opt/zapret/lists/russia-discord.txt --hostlist=/opt/zapret/lists/myhostlist.txt --hostlist-domains=[всё что там выше] --dpi-desync=multisplit --dpi-desync-split-pos=2 --dpi-desync-split-seqovl=681 --dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_sberbank_ru.bin

Месиво неоспоримо страшное, но на удивление рабочее. Дискорд и ютуб работают на всех устройствах дома (с перебоями, но повторная попытка помогает). В pattern я ещё кидал фейк от vk.com (там TLS 1.3), подкручивал split-pos+seqovl, т.д., и в октябре оно работало, а 7го декабря я заметил, что всё рухнуло. Для контекста - стоит zapret 72.2.

Я попробовал открыть сайт youtube.com через браузер. Прошла минута, затем вылезла “112-1035”, что насколько я понял расшифровывается как “ошибка в версиях TLS” - чёткой документации ни у кого нет, извините. Но на правду что-то не очень похоже.

Также я попробовал сделать curl на youtube.com с флагом tls1.1 c роутера. Работает без вопросов, замедлений и всего прочего. Спросил у человека из Германии - говорит, что у него работает без нареканий.

В сентябре (когда использовал первую стратегию в вышеуказанных), я сделал захват пакетов, как оказалось на client hello у меня не шли в ответ server hello. Сейчас я всё ещё до этого не дошёл.

Вопросы следующие:

  1. Разумно ли тут попробовать сделать TLS-фейк с разрешённого сайта на TLS1.1, подставить, и посмотреть что выйдет? + можно ли сделать фильтр, который будет действовать только на MAC Wii U (т.е. все остальные идут с нормальными стратегиями)?
  2. К чему стоит стремиться - нахождению рабочей стратегии или банальной покупке приставки на android?

Прочитать документацию. Я сам новичок, но есть пара советов. Объединить все домены в один хостлист. Имхо tls1.1 большинство сайтов уже не поддерживает, может вы имели в виду tls1.2 ? Фильтр для wi-fi есть попадалось в документации.

Там TLS 1.1.

Снимки с сентября, но суть та же.

С wi-fi хорошо, приятно знать, но там можно на отдельный MAC? Если у меня сейчас все устройства рухнут, то будет неприятно.