Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

как правильно протестировать #2

Closed
fedya opened this issue Dec 16, 2016 · 13 comments
Closed

как правильно протестировать #2

fedya opened this issue Dec 16, 2016 · 13 comments

Comments

@fedya
Copy link

fedya commented Dec 16, 2016

  • собрал прошивку с нужными модулями
  • настроил файрволл как указано под билайн
  • проверил что nfqws работает
root@OpenWrt:/etc/ppp# ps | grep zap
 5930 root      1028 S    /opt/zapret/nfq/nfqws --qnum=200 --hostspell=HOST
  • проверил что правило применилось
root@OpenWrt:/etc/ppp# iptables-save | grep -i zap
-A POSTROUTING -p tcp -m tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass

Пробую открыть страничку на 80 порту и ничего.

Есть ли какой-то способ протестировать, что оно работает?

@bol-van
Copy link
Owner

bol-van commented Dec 16, 2016

В ридмях же все написано.
Вручную запустить nfqws. Он выдает сообщения по факту произведенной замены.
Может быть ipset zapret пустой.

@fedya
Copy link
Author

fedya commented Dec 18, 2016

root@OpenWrt:~# /etc/init.d/zapret start
Creating ipset
Adding to ipset zapret : /opt/zapret/ipset/zapret-ip.txt
Adding to ipset zapret : /opt/zapret/ipset/zapret-ip-user.txt
Adding to ipset ipban : /opt/zapret/ipset/zapret-ip-user-ipban.txt
Starting /opt/zapret/nfq/nfqws

дальше вижу такое

opening library handle
unbinding existing nf_queue handler for AF_INET (if any)
binding nfnetlink_queue as nf_queue handler for AF_INET
binding this socket to queue '200'
setting copy_packet mode

Пытаюсь открыть rutracker.org
и вижу страницу заглушку
http://blackhole.beeline.ru

В логе ничего нет.

@fedya
Copy link
Author

fedya commented Dec 18, 2016

UPD

Получилось.
почему-то правила файрволла юзеркие не применились при старте.

packet: id=1 len=60
packet: id=2 len=60
packet: id=3 len=60
packet: id=4 len=40
packet: id=5 len=40
packet: id=6 len=40
packet: id=7 len=435
modifying Host: => HOST:
packet: id=8 len=40
packet: id=9 len=706
modifying Host: => HOST:
packet: id=10 len=40

@bol-van
Copy link
Owner

bol-van commented Dec 18, 2016

Init скрипт не занимается применением iptables.
Это делает фаервол fw3.
Init скрипт меняет только настройку в /etc/config/firewall чтобы /etc/firewall.user запускалось не
только при fw3 restart, но и при fw3 reload.
Если в firewall.user рекомендованное содержимое из firewall.user.beeline, то должно срабатывать. Там нет ничего, что могло бы вызвать ошибку. Разве что очень старая версия iptables, где нет ключа "-C".

@bol-van
Copy link
Owner

bol-van commented Dec 18, 2016

А нет, может быть один момент с ошибкой.
Он случается если фаервол применяется до старта /etc/init.d/zapret, который создает ipset.
Если ipset-а еще нет , то будет ошибка.
Поэтому я сделал в zapret START=18, когда как у firewall START=19.
Но кто знает, может они выполняются асинхронно ? Вроде не должны, иначе зачем START sequence number. Да и у себя таких проблем никогда не встречал ни на 1 роутере.

/etc/init.d/zapret enable
было сделано ?
это включает автостарт. если автостарта нет, то при загрузке фаервол не приментся из-за ошибки ipset

@ebkjiud
Copy link

ebkjiud commented Dec 21, 2016

Решил попробовать все возможные способы на себе. Провайдер westcall СПБ (север города). Ряд ip полностью блокируются. DPI обход с точкой в конце оказался единственным рабочим для меня описанным трюком (найденный мною). При этом ряд заблокированных ресурсов возвращают 403 ошибку (в частности pornhub - протестирован). Еще не мало удивительное наблюдение: обнаружился ресурс, который блокировался - моим провайдером, трюк с точкой позволяет обойти, но далее трафик улетал на прозрачный squid ТТК. Который я честно уже не знаю как обойти (drop первого пакета по строке совпадения, drop RST пакетов приводят к долгому SYN и RST с моей стороны, не более). Как результат всех испытаний, имеется ряд сайтов которые обходить возможно через точку, остальное необходимо пропускать через VPN и PROXY. Буду благодарен, если кто подскажет, как автоматизировать - чтобы заблокированные ресурсы по ip шли через VPN/PROXY и сайты приводящие к squid ТТК, так же шли по VPN/PROXY. (Железка не мощная openwrt 15 400Mhz 32mb Hynix).

@bol-van
Copy link
Owner

bol-van commented Dec 21, 2016

ebkjiud, можно попробовать комбинацию методов через tpws. Они почти все могут быть применены одновременно. Если не работает ничего, то тогда действительно придется проксировать.
Глянь https.txt.
У меня протестированы и работают 2 метода : через соксификатор и через vpn с policy routing.

Главное чтобы на openwrt было как минимум 8 мб flash или extroot. Если 4 мб и нет USB, то можно даже не думать. Ничего не влезет. А на 32 мб памяти вполне успешно у меня работают и tpws, и соксификатор, и openssh. Если все сделать аккуратно - будет норм

@ebkjiud
Copy link

ebkjiud commented Dec 21, 2016

bol-van, да я совмещал все возможные твики для обхода DPI (только "точка" мой провайдер позволяет обходит, а второй тот что после в squid прозрачный кидает - никак обойти не удалось) - то есть часть трафика к некоторым ресурсам мой провайдер пропускает через прозрачный squid другого провайдера. OpenWRT TP-Link TL-WR1043N/ND v1, swap на флэшке и extroot (USB2.0). Хотелось бы бесплатное решение позволяющее автоматически определить блокировку по IP и блокировку вторым провайдером (squid). Пока особо не могу придумать в голове другие мысли. (Самое простое приходит на ум сделать скриптик из доменов собирать список ip адресов, ручками пополнять их ряды и пропускать их правилом iptables выше вашего решения [с обходом через точку]).

@bol-van
Copy link
Owner

bol-van commented Dec 21, 2016

squid это значит, что соединения из списка заблокированных IP заворачиваются на прокси. Совершенно логично, что от этого не помогают никакие методы, связанные с фрагментацией, да и трюки скуид наверняка распознает надежно в отличие от на коленке составленых regexp для DPI.
Поэтому раз используется там список IP, то и мы должны его использовать.
В моем решении применяется ipset. Вот по нему и надо прозрачно заворачивать соединения куда-нибудь. ipset подтягивается по крону, можно своими ручными правилами дополнить. Все же написано.

@ebkjiud
Copy link

ebkjiud commented Dec 21, 2016

bol-van, да за ваши методы спасибо, я ими пользуюсь. Получается у моего провайдера, срабатывает солянка, часть ресурсов обхожу через "точку" имея к ним полноценный вход, а часть заворачивается на сквид или блокируется весь ip. Я подумываю через curl прогонять весь список скриптом раз в неделю, ночью. То что по таймауту будет и то что отдает заглушку второго провайдера запихивать в отдельную ipset группу и пропускать через прокси. Но боюсь будет проблема со скриптом в плане оперативы. Плюс пока не знаю curl ли использовать. И еще есть сайты, которые возможно плохо понимают запросы с "точкой" (в частности я уже писал про pornhub.com - 403 ошибка) такое я готов и руками добавлять, т.к. непредсказуемо, что ответит другая сторона и как ее фильтровать...

@bol-van
Copy link
Owner

bol-van commented Dec 21, 2016

С оперативой от курла проблема вряд ли будет. Раз есть USB, то можно сделать swap на всякий случай, чтобы внезапно не случился OOM.
Курлить десятки тысяч адресов - это очень плохая идея. займет вечность
Но можно и не заморачиваться так. Можно сделать фиксированный список адресов, на которых squid, и зачислять их в ipset для проксирования. Ведь реально не нужен доступ ко всяким там курилкам и игралкам, нужен только к определенным сайтам, а если понадобится к чему-то еще - всегда можно добавить ручками. Все примеры как ресолвить домены из списка и заносить в ipset есть

@ebkjiud
Copy link

ebkjiud commented Dec 21, 2016

@bol-van swap имеется, место свободного 6,5gb. Фиксированный не хотелось бы, буду придумывать скрипт, потом если что опишу результат. Конечно без ручного списка никуда, но большую часть хотелось бы автоматом. Спасибо еще раз за проект, за ваше мнение и подсказки.

@bol-van
Copy link
Owner

bol-van commented Dec 21, 2016

Можно, конечно, дописать код на C в tpws, который будет анализировать ответ от веб сервера, и при обнаружении заглушки что-то делать. Например, заносить такие хосты в файл. Но это потребует программирования под частный сценарий.

@bol-van bol-van closed this as completed Dec 29, 2016
anphsw added a commit to anphsw/zapret that referenced this issue Aug 3, 2024
==3801== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==3801==    at 0x49622E2: sendto (in /tmp/debug/lib/libc-2.22.so)
==3801==    by 0x11093D: rawsend (darkmagic.c:1778)
==3801==    by 0x114F47: dpi_desync_tcp_packet_play (desync.c:1021)
==3801==    by 0x117879: dpi_desync_packet_play (desync.c:1645)
==3801==    by 0x117A35: replay_queue (desync.c:1676)
==3801==    by 0x113F44: dpi_desync_tcp_packet_play (desync.c:781)
==3801==    by 0x117879: dpi_desync_packet_play (desync.c:1645)
==3801==    by 0x11797B: dpi_desync_packet (desync.c:1662)
==3801==    by 0x11A045: processPacketData (nfqws.c:106)
==3801==    by 0x11A1C3: nfq_cb (nfqws.c:140)
==3801==    by 0x4846B20: ??? (in /usr/lib/libnetfilter_queue.so.1.3.0)
==3801==    by 0x4851ABD: nfnl_handle_packet (in /usr/lib/libnfnetlink.so.0.2.0)
==3801==  Address 0xbecb2f81 is on thread 1's stack
==3801==  in frame bol-van#2, created by dpi_desync_tcp_packet_play (desync.c:478)
==3801==  Uninitialised value was created by a stack allocation
==3801==    at 0x112C35: dpi_desync_tcp_packet_play (desync.c:478)
bol-van pushed a commit that referenced this issue Oct 12, 2024
Fix code scanning alert no. 2: Incorrect return-value check for a 'scanf'-like function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants