Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
nfqws [2025/02/03 01:15] – mirocow | nfqws [2025/02/04 23:19] (текущий) – mirocow | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== | + | ====== |
- | ===== Entware | + | Эта программа |
- | <code bash> | + | Для BSD систем существует адаптированный вариант - dvtws, собираемый из тех же исходников. |
- | $ amtm ep | + | |
- | </ | + | |
- | ===== Установка и настройка zapret ===== | ||
- | |||
- | https:// | ||
- | |||
- | <code bash> | ||
- | $ wget https:// | ||
- | $ tar -xvzf zapret-v70.tar.gz | ||
- | $ cd zapret-v70 | ||
- | $ ./ | ||
- | - Y | ||
- | - Y | ||
- | - Y | ||
- | - 1 | ||
- | - Y | ||
- | - N | ||
- | - N | ||
- | - Y | ||
- | - N | ||
- | - 3 - br0 | ||
- | - 8 - eth3 | ||
- | - 3 | ||
- | </ | ||
- | |||
- | {{: | ||
- | |||
- | Выбираем имя внутреннего сетевого интерфейса (LAN), br0 - обычно в роутере: | ||
- | |||
- | {{: | ||
- | |||
- | Но заворот трафика на nfqws происходит всегда после маршрутизации, | ||
- | |||
- | <note tip> | ||
- | |||
- | * none - фильтрация отключена, | ||
- | * ipset - фильтрация трафика с помощью ipset. Сложный режим, как работает читаем в инструкции. | ||
- | * hostlist - фильтрация списком хостов из файлов: | ||
- | * autohostlist -режим hostlist + распознавание блокировок и ведение автоматического листа. | ||
- | |||
- | Режим фильтра также можно потом менять через параметр MODE_FILTER в / | ||
- | |||
- | nano / | ||
< | < | ||
- | www.youtube.com | + | --debug=0|1 ; 1=выводить отладочные сообщения |
- | youtube.com | + | --daemon ; демонизировать прогу |
- | </ | + | --pidfile=< |
- | + | --user=< | |
- | nano / | + | --uid=uid[: |
- | <code bash> | + | --qnum=N ; номер очереди |
- | #!/bin/sh | + | --bind-fix4 ; пытаться |
- | ### BEGIN INIT INFO | + | |
- | # Provides: | + | --wsize=<winsize>[:<scale_factor>] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, |
- | # Required-Start: | + | --wssize=<winsize>[:< |
- | # Required-Stop: | + | --wssize-cutoff=[n|d|s]N |
- | # Default-Start: | + | --ctrack-timeouts=S: |
- | # Default-Stop: | + | --hostcase ; |
- | ### END INIT INFO | + | --hostnospace ; |
- | + | --hostspell=HoST ; точное написание заголовка Host (можно | |
- | SCRIPT=$(readlink -f "$0") | + | --domcase ; |
- | EXEDIR=$(dirname " | + | --dpi-desync=[<mode0>,]<mode>[,<mode2] ; атака по десинхронизации DPI. mode : synack fake fakeknown rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 udplen tamper |
- | ZAPRET_BASE=$(readlink -f " | + | --dpi-desync-fwmark=<int|0xHEX> ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default |
- | . " | + | --dpi-desync-ttl=<int> ; установить ttl для десинхронизирующих пакетов |
- | + | --dpi-desync-ttl6=<int> ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение ttl | |
- | NAME=zapret | + | |
- | DESC=anti-zapret | + | |
- | + | --dpi-desync-repeats=<N> ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты) | |
- | do_start() | + | --dpi-desync-skip-nosni=0| 1 ; |
- | { | + | --dpi-desync-split-pos=< |
- | + | --dpi-desync-badseq-increment=< | |
- | if lsmod | grep " | + | --dpi-desync-badack-increment=< |
- | echo " | + | --dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello |
- | else | + | --dpi-desync-fake-http=<filename>|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, |
- | if insmod / | + | --dpi-desync-fake-tls=< |
- | echo " | + | --dpi-desync-fake-unknown=< |
- | else | + | --dpi-desync-fake-quic=< |
- | echo " | + | --dpi-desync-fake-dht=< |
- | # | + | --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=< |
- | + | | |
- | if lsmod | grep " | + | |
- | echo " | + | --hostlist-exclude=<filename> ; не применять дурение |
- | else | + | |
- | if insmod / | + | |
- | echo " | + | |
- | else | + | |
- | echo " | + | |
- | # | + | |
- | fi | + | |
- | fi | + | |
- | + | ||
- | if lsmod | grep " | + | |
- | echo " | + | |
- | else | + | |
- | if insmod / | + | |
- | echo " | + | |
- | else | + | |
- | echo " | + | |
- | #exit 1 | + | |
- | fi | + | |
- | fi | + | |
- | + | ||
- | zapret_run_daemons | + | |
- | [ " | + | |
- | } | + | |
- | do_stop() | + | |
- | { | + | |
- | zapret_stop_daemons | + | |
- | [ " | + | |
- | } | + | |
- | + | ||
- | case " | + | |
- | 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=/ | + | |
- | echo " | + | |
- | exit 1 | + | |
- | ;; | + | |
- | esac | + | |
- | + | ||
- | exit 0 | + | |
- | </ | + | |
- | + | ||
- | Скрипты | + | |
- | <code bash> | + | |
- | $ ls -la / | + | |
- | </ | + | |
- | + | ||
- | Скрипт отключения проверки контрольной суммы пакетов | + | |
- | nano / | + | |
- | <code bash> | + | |
- | </code> | + | |
- | + | ||
- | nano / | + | |
- | <code bash> | + | |
- | # this file is included from init scripts | + | |
- | # change values here | + | |
- | + | ||
- | # can help in case /tmp has not enough space | + | |
- | # | + | |
- | + | ||
- | # redefine user for zapret daemons. required 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=0 | + | |
- | + | ||
- | # options for ipsets | + | |
- | # maximum number of elements in sets. also used for nft sets | + | |
- | SET_MAXELEM=522288 | + | |
- | # too low hashsize can cause memory allocation errors on low RAM systems | + | |
- | # too large hashsize will waste lots of RAM | + | |
- | IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM" | + | |
- | # dynamically generate additional ip. $1 = ipset/ | + | |
- | # | + | |
- | + | ||
- | # options for ip2net. "-4" | + | |
- | IP2NET_OPT4=" | + | |
- | 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/ | + | |
- | 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 | + | |
- | # on BSD systems with PF no auto reloading happens. you must provide your own command | + | |
- | # set to "-" to disable reload | + | |
- | # | + | |
- | + | ||
- | # mark bit used by nfqws to prevent loop | + | |
- | DESYNC_MARK=0x40000000 | + | |
- | DESYNC_MARK_POSTNAT=0x20000000 | + | |
- | + | ||
- | TPWS_SOCKS_ENABLE=0 | + | |
- | # tpws socks listens on this port on localhost and LAN interfaces | + | |
- | TPPORT_SOCKS=987 | + | |
- | # 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> | + | |
- | TPWS_SOCKS_OPT=" | + | |
- | --filter-tcp=80 --methodeol < | + | |
- | --filter-tcp=443 --split-pos=1, | + | |
- | " | + | |
- | + | ||
- | TPWS_ENABLE=0 | + | |
- | TPWS_PORTS=80,443 | + | |
- | # use < | + | |
- | # hostlist markers are replaced to empty string if MODE_FILTER does not satisfy | + | |
- | # < | + | |
- | TPWS_OPT=" | + | |
- | --filter-tcp=80 | + | |
- | --filter-tcp=443 --split-pos=1,midsld --disorder | + | |
- | " | + | |
- | + | ||
- | 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 ! | + | |
- | # | + | |
- | # | + | |
- | # use <HOSTLIST> and < | + | |
- | # hostlist markers are replaced to empty string if MODE_FILTER does not satisfy | + | |
- | # < | + | |
- | NFQWS_OPT=" | + | |
- | --filter-tcp=80 | + | |
- | --filter-tcp=443 | + | |
- | --filter-udp=443 | + | |
- | " | + | |
- | + | ||
- | # none,ipset, | + | |
- | MODE_FILTER=none | + | |
- | + | ||
- | # openwrt only : donttouch,none, | + | |
- | FLOWOFFLOAD=donttouch | + | |
- | + | ||
- | # openwrt: specify networks to be treated as LAN. default is " | + | |
- | # | + | |
- | # openwrt: specify networks to be treated as WAN. default wans are interfaces with default route | + | |
- | # | + | |
- | # | + | |
- | + | ||
- | # 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=" | + | |
- | # if IFACE_WAN6 is not defined it take the value of IFACE_WAN | + | |
- | IFACE_LAN=br0 | + | |
- | IFACE_WAN=eth3 | + | |
- | # | + | |
- | + | ||
- | # should start/stop command of init scripts apply firewall rules ? | + | |
- | # not applicable to openwrt with firewall3+iptables | + | |
- | INIT_APPLY_FW=1 | + | |
- | # firewall apply hooks | + | |
- | # | + | |
- | # | + | |
- | # | + | |
- | # | + | |
- | + | ||
- | # do not work with ipv4 | + | |
- | # | + | |
- | # 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]] | + | |
- | + | ||
- | ==== Отключение проверки контрольной суммы | + | |
- | + | ||
- | <code bash> | + | |
- | $ opkg install procps-ng-sysctl | + | |
- | </ | + | |
- | + | ||
- | nano / | + | |
- | <code bash> | + | |
- | #!/bin/sh | + | |
- | start() { | + | |
- | sysctl | + | |
- | } | + | |
- | stop() { | + | |
- | sysctl -w net.netfilter.nf_conntrack_checksum=1 &> /dev/null | + | |
- | } | + | |
- | case " | + | |
- | ' | + | |
- | start | + | |
- | ;; | + | |
- | ' | + | |
- | stop | + | |
- | ;; | + | |
- | *) | + | |
- | stop | + | |
- | start | + | |
- | ;; | + | |
- | esac | + | |
- | exit 0 | + | |
- | </code> | + | |
- | + | ||
- | <code bash> | + | |
- | $ chmod +x / | + | |
- | </ | + | |
- | + | ||
- | ==== Запуск ==== | + | |
- | + | ||
- | <code bash> | + | |
- | $ / | + | |
- | $ / | + | |
</ | </ |