Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
nfqws [2025/02/03 01:34] – [Запуск] mirocownfqws [2025/02/04 23:19] (текущий) mirocow
Строка 1: Строка 1:
-====== Zapret DPI bypass multi platform Topics (NFQWS)  ======+====== nfqws Эта программа - модификатор пакетов и обработчик очереди NFQUEUE ======
  
-===== Entware Software repository =====+Эта программа модификатор пакетов и обработчик очереди NFQUEUE.
  
-<code bash> +Для BSD систем существует адаптированный вариант - dvtws, собираемый из тех же исходников.
-$ amtm ep +
-</code>+
  
-===== Установка и настройка zapret ===== 
- 
-https://github.com/bol-van/zapret 
- 
-<code bash> 
-$ wget https://github.com/bol-van/zapret/releases/download/v70/zapret-v70.tar.gz 
-$ tar -xvzf zapret-v70.tar.gz 
-$ cd zapret-v70 
-$ ./install_easy.sh 
-- Y 
-- Y 
-- Y 
-- 1 
-- Y 
-- N 
-- N 
-- Y 
-- N 
-- 3 - br0 
-- 8 - eth3 
-- 3 
-</code> 
- 
-{{:network:7e86e3fac7f44f9d13c3a737d882a845.jpg?600|}} 
- 
-Выбираем имя внутреннего сетевого интерфейса (LAN), br0 - обычно в роутере: 
- 
-{{:network:7e777b8bf042462347c3d9ff20170beb.jpg?600|}} 
- 
-Но заворот трафика на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN, так что LAN в этом режиме работы неважен. 
- 
-<note tip>Важно: выбираем режим фильтрации трафика (none, ipset, hostlist, autohostlist).</note> 
- 
-  * none - фильтрация отключена, весь трафик обрабатывается утилитой. Простейший вариант. Рекомендую его использовать, если не хотите заморачиваться настройкой списков адресов, а хотите просто, чтобы быстро и просто все работало. 
-  * ipset - фильтрация трафика с помощью ipset. Сложный режим, как работает читаем в инструкции. 
-  * hostlist - фильтрация списком хостов из файлов: /opt/zapret/ipset/zapret-hosts-user.txt - прописывайте свои домены, которые нужно обрабатывать или в файле/opt/zapret/ipset/zapret-hosts-user-exclude.txt - домены, которые нужно исключить из обработки. Пишется по одному доменному имени или IP-адресу на строчку. То что там изначально написано в файлах - удаляем. Рекомендую это режим использовать, если хотите обрабатывать только определенные адреса или наоборот если хотите исключить из обработки некоторые адреса. 
-  * autohostlist -режим hostlist + распознавание блокировок и ведение автоматического листа. 
- 
-Режим фильтра также можно потом менять через параметр MODE_FILTER в /opt/zapret/config. 
- 
-nano /opt/zapret/ipset/zapret-hosts-user.txt 
 <code> <code>
-www.youtube.com + --debug=0|1 ; 1=выводить отладочные сообщения 
-youtube.com + --daemon демонизировать прогу 
-</code> + --pidfile=<file> сохранить PID в файл 
- + --user=<username> менять uid процесса 
-nano /opt/zapret/init.d/sysv/zapret + --uid=uid[:gid] менять uid процесса 
-<code bash> + --qnum=N номер очереди N 
-#!/bin/sh + --bind-fix4                            пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv4 пакетов 
-### BEGIN INIT INFO + --bind-fix6                            пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv6 пакетов 
-# Provides: zapret + --wsize=<winsize>[:<scale_factor>] менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !
-# Required-Start: $local_fs $network + --wssize=<winsize>[:<scale_factor>] ; менять tcp window size на указанный размер в исходящих пакетахscale_factor по умолчанию 0. (см. conntrack !) 
-# Required-Stop: $local_fs $network + --wssize-cutoff=[n|d|s]N                ; изменять server window size в исходящих пакетах (n)пакетах данных (d)относительных sequence (s) по номеру меньше N 
-# Default-Start:     2 3 4 5 + --ctrack-timeouts=S:E:F[:U]            ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udpпо умолчанию 60:300:60:60 
-# Default-Stop:      0 1 + --hostcase ; менять регистр заголовка "Host:по умолчанию на "host:". 
-### END INIT INFO + --hostnospace ; убрать пробел после "Host:и переместить его в конец значения "User-Agent:для сохранения длины пакета 
- + --hostspell=HoST ; точное написание заголовка Host (можно "HOSTили "HoSt"). автоматом включает --hostcase 
-SCRIPT=$(readlink -f "$0") + --domcase ; домен после Hostсделать таким : TeSt.cOm 
-EXEDIR=$(dirname "$SCRIPT"+ --dpi-desync=[<mode0>,]<mode>[,<mode2] ; атака по десинхронизации DPImode : synack fake fakeknown rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 udplen tamper 
-ZAPRET_BASE=$(readlink -f "$EXEDIR/../.."+ --dpi-desync-fwmark=<int|0xHEX        ; бит fwmark для пометки десинхронизирующих пакетовчтобы они повторно не падали в очередьdefault 0x40000000 
-. "$EXEDIR/functions" + --dpi-desync-ttl=<int                ; установить ttl для десинхронизирующих пакетов 
- + --dpi-desync-ttl6=<int              ; установить ipv6 hop limit для десинхронизирующих пакетовесли не указаноиспользуется значение ttl 
-NAME=zapret + --dpi-desync-fooling=<fooling> ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервераnone md5sig badseq badsum hopbyhop hopbyhop2 
-DESC=anti-zapret + --dpi-desync-retrans=0|1                ; (только для fake,rst,rstack) 0(default)=отправлять оригинал следом за фейком  1=дропать оригинал, заставляя ОС выполнять ретрансмиссию через 0.2 сек 
- + --dpi-desync-repeats=<N              ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты) 
-do_start() + --dpi-desync-skip-nosni=0| 1 ; 1(default)=не применять dpi desync для запросов без hostname в SNIв частности для ESNI 
-+ --dpi-desync-split-pos=<1..1500> ; (только для split*disorder*) разбивать пакет на указанной позиции 
- + --dpi-desync-badseq-increment=<int|0xHEX>      ; инкремент sequence number для badseq. по умолчанию -10000 
-   if lsmod | grep "xt_multiport " &> /dev/null  then + --dpi-desync-badack-increment=<int|0xHEX>      ; инкремент ack sequence number для badseq. по умолчанию -66000 
- echo "xt_multiport.ko is already loaded" + --dpi-desync-any-protocol=0|1                  ; 0(default)=работать только по http request и tls clienthello  1=по всем непустым пакетам данных 
-    else + --dpi-desync-fake-http=<filename>|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному w3.org 
-        if insmod /lib/modules/$(uname -r)/xt_multiport.ko &> /dev/null; then + --dpi-desync-fake-tls=<filename>|0xHEX         ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному w3.org 
- echo "iptable_raw.ko loaded" + --dpi-desync-fake-unknown=<filename>|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт 
-        else + --dpi-desync-fake-quic=<filename>|0xHEX        ; файл, содержащий фейковый QUIC Initial 
- echo "Cannot find xt_multiport.ko kernel module, aborting" + --dpi-desync-fake-dht=<filename>|0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fakeна замену стандартным нулям 64 байт 
- #exit 1 + --dpi-desync-fake-unknown-udp=<filename>|0xHEX ; файлсодержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fakeна замену стандартным нулям 64 байт 
-        fi + --dpi-desync-udplen-increment=<int           ; насколько увеличивать длину udp пейлоада в режиме udplen 
- fi + --dpi-desync-udplen-pattern=<filename>|0xHEX   ; чем добивать udp пакет в режиме udplen. по умолчанию нули 
- + --dpi-desync-cutoff=[n|d|s]N                   ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N 
- if lsmod | grep "xt_connbytes " &> /dev/null ;  then + --hostlist=<filename>         ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист его отсутствие 
-        echo "xt_connbytes.ko is already loaded" + --hostlist-exclude=<filename>         ; не применять дурение к хостам из листаможет быть множество листов, они обьединяютс
-    else +
-        if insmod /lib/modules/$(uname -r)/xt_connbytes.ko &/dev/nullthen +
- echo "xt_connbytes.ko loaded" +
-        else +
- echo "Cannot find xt_connbytes.ko kernel module, aborting" +
- #exit 1 +
-        fi +
- fi +
- +
- if lsmod | grep "xt_NFQUEUE " &/dev/null  then +
-        echo "xt_NFQUEUE.ko is already loaded" +
-    else +
-        if insmod /lib/modules/$(uname -r)/xt_NFQUEUE.ko &> /dev/null; then +
-            echo "xt_NFQUEUE.ko loaded" +
-        else +
-            echo "Cannot find xt_NFQUEUE.ko kernel module, aborting" +
-            #exit 1 +
-        fi +
-    fi +
- +
- zapret_run_daemons +
- [ "$INIT_APPLY_FW" !"1" ] || { zapret_apply_firewall;+
-+
-do_stop() +
-+
- zapret_stop_daemons +
- "$INIT_APPLY_FW" != "1" || zapret_unapply_firewall +
-+
- +
-case "$1" in +
- start) +
- do_start +
- ;+
- +
- stop) +
- do_stop +
- ;; +
- +
- restart) +
- do_stop +
- do_start +
- ;; +
- +
- start-fw|start_fw) +
- zapret_apply_firewall +
- ;; +
- stop-fw|stop_fw) +
- zapret_unapply_firewall +
- ;+
- +
- restart-fw|restart_fw) +
- zapret_unapply_firewall +
- zapret_apply_firewall +
- ;; +
- +
- start-daemons|start_daemons) +
- zapret_run_daemons +
- ;; +
- stop-daemons|stop_daemons) +
- zapret_stop_daemons +
- ;+
- restart-daemons|restart_daemons) +
- zapret_stop_daemons +
- zapret_run_daemons +
- ;; +
- +
- reload-ifsets|reload_ifsets) +
- zapret_reload_ifsets +
- ;; +
- list-ifsets|list_ifsets) +
- zapret_list_ifsets +
- ;+
- list-table|list_table) +
- zapret_list_table +
- ;+
- +
-  *+
- N=/etc/init.d/$NAME +
- echo "Usage: $N {start|stop|restart|start-fw|stop-fw|restart-fw|start-daemons|stop-daemons|restart-daemons|reload-ifsets|list-ifsets|list-table}" >&+
- exit 1 +
- ;; +
-esac +
- +
-exit 0 +
-</code> +
- +
-nano /opt/zapret/config +
-<code bash> +
-# this file is included from init scripts +
-# change values here +
- +
-# can help in case /tmp has not enough space +
-#TMPDIR=/opt/zapret/tmp +
- +
-# redefine user for zapret daemonsrequired on Keenetic +
-WS_USER=nobody +
- +
-# override firewall type : iptables,nftables,ipfw +
-FWTYPE=iptables +
-# nftables only : set this to 0 to use pre-nat mode. default is post-nat. +
-# pre-nat mode disables some bypass techniques for forwarded traffic but allows to see client IP addresses in debug log +
-#POSTNAT=+
- +
-# options for ipsets +
-# maximum number of elements in setsalso used for nft sets +
-SET_MAXELEM=522288 +
-# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough +
-# too large hashsize will waste lots of RAM +
-IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM" +
-# dynamically generate additional ip. $1 = ipset/nfset/table name +
-#IPSET_HOOK="/etc/zapret.ipset.hook" +
- +
-# options for ip2net"-4or "-6auto added by ipset create script +
-IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4" +
-IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5" +
-# options for auto hostlist +
-AUTOHOSTLIST_RETRANS_THRESHOLD=3 +
-AUTOHOSTLIST_FAIL_THRESHOLD=3 +
-AUTOHOSTLIST_FAIL_TIME=60 +
-# 1 = debug autohostlist positives to ipset/zapret-hosts-auto-debug.log +
-AUTOHOSTLIST_DEBUGLOG=0 +
- +
-# number of parallel threads for domain list resolves +
-MDIG_THREADS=30 +
- +
-# ipset/*.sh can compress large lists +
-GZIP_LISTS=1 +
-# command to reload ip/host lists after update +
-# comment or leave empty for auto backend selection ipset or ipfw if present +
-# on BSD systems with PF no auto reloading happensyou must provide your own command +
-# set to "-" to disable reload +
-#LISTS_RELOAD="pfctl -f /etc/pf.conf" +
- +
-# mark bit used by nfqws to prevent loop +
-DESYNC_MARK=0x40000000 +
-DESYNC_MARK_POSTNAT=0x20000000 +
- +
-TPWS_SOCKS_ENABLE=+
-# tpws socks listens on this port on localhost and LAN interfaces +
-TPPORT_SOCKS=987 +
-# use <HOSTLISTand <HOSTLIST_NOAUTOplaceholders to engage standard hostlists and autohostlist in ipset dir +
-# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy +
-<HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list +
-TPWS_SOCKS_OPT=" +
---filter-tcp=80 --methodeol <HOSTLIST> --new +
---filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST> +
-+
- +
-TPWS_ENABLE=0 +
-TPWS_PORTS=80,443 +
-# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir +
-# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy +
-# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list +
-TPWS_OPT=" +
---filter-tcp=80 --methodeol <HOSTLIST--new +
---filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST> +
-+
- +
-NFQWS_ENABLE=1 +
-# redirect outgoing traffic with connbytes limiter applied in both directions. +
-NFQWS_PORTS_TCP=80,443 +
-NFQWS_PORTS_UDP=443 +
-# PKT_OUT means connbytes dir original +
-# PKT_IN means connbytes dir reply +
-# this is --dpi-desync-cutoff=nX kernel mode implementation for linux. it saves a lot of CPU. +
-NFQWS_TCP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD)) +
-NFQWS_TCP_PKT_IN=3 +
-NFQWS_UDP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD)) +
-NFQWS_UDP_PKT_IN=0 +
-# redirect outgoing traffic without connbytes limiter and incoming with connbytes limiter +
-# normally it's needed only for stateless DPI that matches every packet in a single TCP session +
-# typical example are plain HTTP keep alives +
-# this mode can be very CPU consuming. enable with care ! +
-#NFQWS_PORTS_TCP_KEEPALIVE=80 +
-#NFQWS_PORTS_UDP_KEEPALIVE= +
-# use <HOSTLISTand <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir +
-# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy +
-# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list +
-NFQWS_OPT=" +
---filter-tcp=80 --dpi-desync=fake,multisplit --dpi-desync-ttl=0 --dpi-desync-fooling=md5sig,badsum <HOSTLIST--new +
---filter-tcp=443 --dpi-desync=fake,multidisorder --dpi-desync-split-pos=method+2,midsld,--dpi-desync-ttl=--dpi-desync-fooling=md5sig,badsum,badseq --dpi-desync-repeats=15 --dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin <HOSTLIST> --new +
---filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=15 --dpi-desync-ttl=0  --dpi-desync-any-protocol --dpi-desync-cutoff=d4 --dpi-desync-fooling=md5sig,badsum --dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin <HOSTLIST> +
-+
- +
-# none,ipset,hostlist,autohostlist +
-MODE_FILTER=none +
- +
-# openwrt only : donttouch,none,software,hardware +
-FLOWOFFLOAD=donttouch +
- +
-# openwrt: specify networks to be treated as LAN. default is "lan" +
-#OPENWRT_LAN="lan lan2 lan3" +
-# openwrt: specify networks to be treated as WAN. default wans are interfaces with default route +
-#OPENWRT_WAN4="wan vpn" +
-#OPENWRT_WAN6="wan6 vpn6" +
- +
-# for routers based on desktop linux and macos. has no effect in openwrt. +
-# CHOOSE LAN and optinally WAN/WAN6 NETWORK INTERFACES +
-# or leave them commented if its not router +
-# it's possible to specify multiple interfaces like this : IFACE_LAN="eth0 eth1 eth2" +
-# if IFACE_WAN6 is not defined it take the value of IFACE_WAN +
-IFACE_LAN=br0 +
-IFACE_WAN=eth3 +
-#IFACE_WAN6="ipsec0 wireguard0 he_net" +
- +
-# should start/stop command of init scripts apply firewall rules ? +
-# not applicable to openwrt with firewall3+iptables +
-INIT_APPLY_FW=1 +
-# firewall apply hooks +
-#INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up" +
-#INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up" +
-#INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down" +
-#INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down" +
- +
-# do not work with ipv4 +
-#DISABLE_IPV4=1 +
-# do not work with ipv6 +
-DISABLE_IPV6=0 +
- +
-# select which init script will be used to get ip or host list +
-# possible values : get_user.sh get_antizapret.sh get_combined.sh get_reestr.sh get_hostlist.sh +
-# comment if not required +
-#GETLIST +
-</code+
- +
-  * [[config-default]] +
-  * [[config-2]] +
-  * [[config-3]] +
-  * [[config-4]] +
- +
-==== Скрипты ==== +
- +
-<code bash> +
-$ ls -la /opt/zapret/ipset +
-$ cp -a /opt/zapret/init.d/custom.d.examples.linux/10-keenetic-udp-fix /opt/zapret/init.d/sysv/custom.d/10-keenetic-udp-fix +
-</code> +
- +
-==== Отключение проверки контрольной суммы пакетов ==== +
- +
-<code bash> +
-$ opkg install procps-ng-sysctl +
-</code> +
- +
-nano /opt/etc/init.d/S00fix +
-<code bash> +
-#!/bin/sh +
-start() { +
-    sysctl -w net.netfilter.nf_conntrack_checksum=0 &> /dev/null +
-+
-stop() { +
-    sysctl -w net.netfilter.nf_conntrack_checksum=1 &> /dev/null +
-+
-case "$1" in +
-    'start'+
-        start +
-        ;; +
-    'stop'+
-        stop +
-        ;; +
-    *) +
-        stop +
-        start +
-        ;; +
-esac +
-exit 0 +
-</code> +
- +
-<code bash> +
-$ chmod +x /opt/etc/init.d/S00fix +
-</code> +
- +
-==== Запуск ==== +
- +
-<code bash> +
-$ /opt/zapret/init.d/sysv/zapret restart +
-$ /opt/etc/init.d/S00fix start +
-$ iptables -S+
 </code> </code>