mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-20 05:52:57 +03:00
Compare commits
No commits in common. "master" and "v66" have entirely different histories.
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1,3 +1,4 @@
|
|||||||
* text=auto eol=lf
|
* text=auto eol=lf
|
||||||
|
binaries/win64/readme.txt eol=crlf
|
||||||
*.cmd eol=crlf
|
*.cmd eol=crlf
|
||||||
*.bat eol=crlf
|
*.bat eol=crlf
|
||||||
|
1
.github/ISSUE_TEMPLATE/config.yml
vendored
1
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
19
.github/ISSUE_TEMPLATE/issue-warning.md
vendored
19
.github/ISSUE_TEMPLATE/issue-warning.md
vendored
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
name: bugs
|
|
||||||
about: do not write lame questions
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
1. Здесь не место для вопросов, касающихся компьютерной грамотности и навыков использования ОС
|
|
||||||
2. Здесь не место для вопросов "у меня не работает" без технических подробностей
|
|
||||||
3. Здесь не место для вопросов "как мне открыть ютуб", "что писать в ...", "перестало открываться".
|
|
||||||
4. Здесь не место для обсуждения сборок
|
|
||||||
5. Вирусов здесь нет. У вас либо чья-то сборка, либо ваш антивирус давно пора отправить на покой. Антивирусы в основном жалуются на upx и windivert, которые убраны НЕ будут. upx - это паковщик для сокращения требуемого места на openwrt, windivert - замена iptables для windows, потенциальный инструмент хакера или компонент зловредной программы, но сам по себе вирусом не является. Не согласны - удаляйте софт. За агрессивные наезды "почему автор распространяет вирусы" молча схватите бан.
|
|
||||||
|
|
||||||
Все означенное обсуждать в дискуссиях или на форумах.
|
|
||||||
При нарушении будет закрываться или конвертироваться в дискуссии.
|
|
||||||
Issue только для обсуждения проблем самого софта. Неработа стратегии или ваше неумение настроить - это ваша проблема, а не проблема софта.
|
|
||||||
Однокнопочные решения дают только сборщики, поэтому "открытие сайта" не является функцией программы, и нет смысла жаловаться, что он не открывается. Но можно это обсудить в дискуссиях. Не захламляйте issues !
|
|
488
.github/workflows/build.yml
vendored
488
.github/workflows/build.yml
vendored
@ -1,488 +0,0 @@
|
|||||||
name: build
|
|
||||||
run-name: ${{ startsWith(github.ref, 'refs/tags/v') && format('Release {0}', github.ref_name) || null }}
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- v[0-9]+*
|
|
||||||
# branches:
|
|
||||||
# - master
|
|
||||||
# paths:
|
|
||||||
# - 'ip2net/**'
|
|
||||||
# - 'mdig/**'
|
|
||||||
# - 'nfq/**'
|
|
||||||
# - 'tpws/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-linux:
|
|
||||||
name: Linux ${{ matrix.arch }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- arch: arm64
|
|
||||||
tool: aarch64-unknown-linux-musl
|
|
||||||
- arch: arm
|
|
||||||
tool: arm-unknown-linux-musleabi
|
|
||||||
# - arch: armhf
|
|
||||||
# tool: arm-unknown-linux-musleabihf
|
|
||||||
# - arch: armv7
|
|
||||||
# tool: armv7-unknown-linux-musleabi
|
|
||||||
# - arch: armv7hf
|
|
||||||
# tool: armv7-unknown-linux-musleabihf
|
|
||||||
# - arch: mips64el
|
|
||||||
# tool: mips64el-unknown-linux-musl
|
|
||||||
- arch: mips64
|
|
||||||
tool: mips64-unknown-linux-musl
|
|
||||||
# - arch: mipsel
|
|
||||||
# tool: mipsel-unknown-linux-musl
|
|
||||||
- arch: mipselsf
|
|
||||||
tool: mipsel-unknown-linux-muslsf
|
|
||||||
# - arch: mips
|
|
||||||
# tool: mips-unknown-linux-musl
|
|
||||||
- arch: mipssf
|
|
||||||
tool: mips-unknown-linux-muslsf
|
|
||||||
# - arch: ppc64
|
|
||||||
# tool: powerpc64-unknown-linux-musl
|
|
||||||
- arch: ppc
|
|
||||||
tool: powerpc-unknown-linux-musl
|
|
||||||
- arch: x86
|
|
||||||
tool: i586-unknown-linux-musl
|
|
||||||
- arch: x86_64
|
|
||||||
tool: x86_64-unknown-linux-musl
|
|
||||||
- arch: lexra
|
|
||||||
tool: mips-linux
|
|
||||||
dir: rsdk-4.6.4-5281-EB-3.10-0.9.33-m32ub-20141001
|
|
||||||
env:
|
|
||||||
CFLAGS: '-march=5281'
|
|
||||||
LDFLAGS: '-lgcc_eh'
|
|
||||||
repo: 'bol-van/build'
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: zapret
|
|
||||||
|
|
||||||
- name: Set up build tools
|
|
||||||
env:
|
|
||||||
ARCH: ${{ matrix.arch }}
|
|
||||||
TOOL: ${{ matrix.tool }}
|
|
||||||
REPO: ${{ matrix.arch == 'lexra' && matrix.repo || 'spvkgn/musl-cross' }}
|
|
||||||
DIR: ${{ matrix.arch == 'lexra' && matrix.dir || matrix.tool }}
|
|
||||||
run: |
|
|
||||||
if [[ "$ARCH" == lexra ]]; then
|
|
||||||
sudo dpkg --add-architecture i386
|
|
||||||
sudo apt update -qq
|
|
||||||
sudo apt install -y libcap-dev libc6:i386 zlib1g:i386
|
|
||||||
URL=https://github.com/$REPO/raw/refs/heads/master/$DIR.txz
|
|
||||||
else
|
|
||||||
sudo apt update -qq
|
|
||||||
sudo apt install -y libcap-dev
|
|
||||||
URL=https://github.com/$REPO/releases/download/latest/$TOOL.tar.xz
|
|
||||||
fi
|
|
||||||
mkdir -p $HOME/tools
|
|
||||||
wget -qO- $URL | tar -C $HOME/tools -xJ || exit 1
|
|
||||||
[[ -d "$HOME/tools/$DIR/bin" ]] && echo "$HOME/tools/$DIR/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
env:
|
|
||||||
ARCH: ${{ matrix.arch }}
|
|
||||||
TARGET: ${{ matrix.tool }}
|
|
||||||
CFLAGS: ${{ matrix.env.CFLAGS != '' && matrix.env.CFLAGS || null }}
|
|
||||||
LDFLAGS: ${{ matrix.env.LDFLAGS != '' && matrix.env.LDFLAGS || null }}
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
DEPS_DIR=$GITHUB_WORKSPACE/deps
|
|
||||||
export CC="$TARGET-gcc"
|
|
||||||
export LD=$TARGET-ld
|
|
||||||
export AR=$TARGET-ar
|
|
||||||
export NM=$TARGET-nm
|
|
||||||
export STRIP=$TARGET-strip
|
|
||||||
export PKG_CONFIG_PATH=$DEPS_DIR/lib/pkgconfig
|
|
||||||
export STAGING_DIR=$RUNNER_TEMP
|
|
||||||
|
|
||||||
# netfilter libs
|
|
||||||
wget -qO- https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj
|
|
||||||
wget -qO- https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj
|
|
||||||
wget -qO- https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj
|
|
||||||
|
|
||||||
for i in libmnl libnfnetlink libnetfilter_queue ; do
|
|
||||||
(
|
|
||||||
cd $i-*
|
|
||||||
CFLAGS="-Os -flto=auto $CFLAGS" \
|
|
||||||
./configure --prefix= --host=$TARGET --enable-static --disable-shared --disable-dependency-tracking
|
|
||||||
make install -j$(nproc) DESTDIR=$DEPS_DIR
|
|
||||||
)
|
|
||||||
sed -i "s|^prefix=.*|prefix=$DEPS_DIR|g" $DEPS_DIR/lib/pkgconfig/$i.pc
|
|
||||||
done
|
|
||||||
|
|
||||||
# zlib
|
|
||||||
gh api repos/madler/zlib/releases/latest --jq '.tag_name' |\
|
|
||||||
xargs -I{} wget -qO- https://github.com/madler/zlib/archive/refs/tags/{}.tar.gz | tar -xz
|
|
||||||
(
|
|
||||||
cd zlib-*
|
|
||||||
CFLAGS="-Os -flto=auto $CFLAGS" \
|
|
||||||
./configure --prefix= --static
|
|
||||||
make install -j$(nproc) DESTDIR=$DEPS_DIR
|
|
||||||
)
|
|
||||||
|
|
||||||
# headers
|
|
||||||
# wget https://git.alpinelinux.org/aports/plain/main/bsd-compat-headers/queue.h && \
|
|
||||||
# wget https://git.kernel.org/pub/scm/libs/libcap/libcap.git/plain/libcap/include/sys/capability.h && \
|
|
||||||
install -Dm644 -t $DEPS_DIR/include/sys /usr/include/x86_64-linux-gnu/sys/queue.h /usr/include/sys/capability.h
|
|
||||||
|
|
||||||
# zapret
|
|
||||||
CFLAGS="-DZAPRET_GH_VER=${{ github.ref_name }} -DZAPRET_GH_HASH=${{ github.sha }} -static-libgcc -static -I$DEPS_DIR/include $CFLAGS" \
|
|
||||||
LDFLAGS="-L$DEPS_DIR/lib $LDFLAGS" \
|
|
||||||
make -C zapret -j$(nproc)
|
|
||||||
tar -C zapret/binaries/my -cJf zapret-linux-$ARCH.tar.xz .
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: zapret-linux-${{ matrix.arch }}
|
|
||||||
path: zapret-*.tar.xz
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
build-macos:
|
|
||||||
name: macOS
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Build zapret
|
|
||||||
run: |
|
|
||||||
export CFLAGS="-DZAPRET_GH_VER=${{ github.ref_name }} -DZAPRET_GH_HASH=${{ github.sha }}"
|
|
||||||
make mac -j$(sysctl -n hw.logicalcpu)
|
|
||||||
tar -C binaries/my -cJf zapret-mac-x64.tar.xz .
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: zapret-mac-x64
|
|
||||||
path: zapret-*.tar.xz
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
build-freebsd:
|
|
||||||
name: FreeBSD ${{ matrix.arch }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- target: x86_64
|
|
||||||
arch: x86_64
|
|
||||||
# - target: i386
|
|
||||||
# arch: x86
|
|
||||||
container:
|
|
||||||
image: empterdose/freebsd-cross-build:11.4
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install packages
|
|
||||||
run: apk add tar xz
|
|
||||||
|
|
||||||
- name: Build zapret
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
ARCH: ${{ matrix.arch }}
|
|
||||||
run: |
|
|
||||||
export CFLAGS="-DZAPRET_GH_VER=${{ github.ref_name }} -DZAPRET_GH_HASH=${{ github.sha }}"
|
|
||||||
settarget $TARGET-freebsd11 make bsd -j$(nproc)
|
|
||||||
tar -C binaries/my -cJf zapret-freebsd-$ARCH.tar.xz .
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: zapret-freebsd-${{ matrix.arch }}
|
|
||||||
path: zapret-*.tar.xz
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
build-windows:
|
|
||||||
name: Windows ${{ matrix.arch }}
|
|
||||||
runs-on: windows-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
arch: [ x86_64, x86 ]
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: zapret
|
|
||||||
|
|
||||||
- name: Set up MinGW
|
|
||||||
uses: msys2/setup-msys2@v2
|
|
||||||
with:
|
|
||||||
msystem: ${{ matrix.arch == 'x86_64' && 'MINGW64' || 'MINGW32' }}
|
|
||||||
install: >-
|
|
||||||
${{ matrix.arch == 'x86_64' && 'mingw-w64-x86_64-toolchain' || 'mingw-w64-i686-toolchain' }}
|
|
||||||
|
|
||||||
- name: Build ip2net, mdig
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
export CFLAGS="-DZAPRET_GH_VER=${{ github.ref_name }} -DZAPRET_GH_HASH=${{ github.sha }}"
|
|
||||||
mkdir -p output
|
|
||||||
cd zapret
|
|
||||||
mingw32-make -C ip2net win
|
|
||||||
mingw32-make -C mdig win
|
|
||||||
cp -a {ip2net/ip2net,mdig/mdig}.exe ../output
|
|
||||||
|
|
||||||
- name: Restore psmisc from cache
|
|
||||||
id: cache-restore-psmisc
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/psmisc
|
|
||||||
key: psmisc-${{ matrix.arch }}
|
|
||||||
|
|
||||||
- name: Set up Cygwin
|
|
||||||
env:
|
|
||||||
PACKAGES: ${{ steps.cache-restore-psmisc.outputs.cache-hit != 'true' && 'cygport gettext-devel libiconv-devel libncurses-devel' || null }}
|
|
||||||
uses: cygwin/cygwin-install-action@v4
|
|
||||||
with:
|
|
||||||
platform: ${{ matrix.arch }}
|
|
||||||
site: ${{ matrix.arch == 'x86_64' && 'http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2024/01/30/231215' || null }}
|
|
||||||
check-sig: ${{ matrix.arch == 'x86_64' && 'false' || null }}
|
|
||||||
packages: >-
|
|
||||||
gcc-core
|
|
||||||
make
|
|
||||||
zlib-devel
|
|
||||||
zip
|
|
||||||
unzip
|
|
||||||
wget
|
|
||||||
${{ env.PACKAGES }}
|
|
||||||
|
|
||||||
- name: Build psmisc
|
|
||||||
if: steps.cache-restore-psmisc.outputs.cache-hit != 'true'
|
|
||||||
env:
|
|
||||||
URL: https://mirrors.kernel.org/sourceware/cygwin/x86_64/release/psmisc
|
|
||||||
shell: C:\cygwin\bin\bash.exe -eo pipefail '{0}'
|
|
||||||
run: >-
|
|
||||||
export MAKEFLAGS=-j$(nproc) &&
|
|
||||||
mkdir -p psmisc && cd psmisc &&
|
|
||||||
wget -qO- ${URL} | grep -Po 'href=\"\Kpsmisc-(\d+\.)+\d+.+src\.tar\.xz(?=\")' | xargs -I{} wget -O- ${URL}/{} | tar -xJ &&
|
|
||||||
cd psmisc-*.src &&
|
|
||||||
echo CYGCONF_ARGS+=\" --disable-dependency-tracking --disable-nls\" >> psmisc.cygport &&
|
|
||||||
cygport psmisc.cygport prep compile install
|
|
||||||
|
|
||||||
- name: Save psmisc to cache
|
|
||||||
if: steps.cache-restore-psmisc.outputs.cache-hit != 'true'
|
|
||||||
uses: actions/cache/save@v4
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/psmisc
|
|
||||||
key: psmisc-${{ matrix.arch }}
|
|
||||||
|
|
||||||
- name: Build winws
|
|
||||||
env:
|
|
||||||
TARGET: ${{ matrix.arch == 'x86_64' && 'cygwin' || 'cygwin32' }}
|
|
||||||
shell: C:\cygwin\bin\bash.exe -eo pipefail '{0}'
|
|
||||||
run: >-
|
|
||||||
export MAKEFLAGS=-j$(nproc) &&
|
|
||||||
export CFLAGS="-DZAPRET_GH_VER=${{ github.ref_name }} -DZAPRET_GH_HASH=${{ github.sha }}" &&
|
|
||||||
cd zapret &&
|
|
||||||
make -C nfq ${TARGET} &&
|
|
||||||
cp -a nfq/winws.exe ../output
|
|
||||||
|
|
||||||
- name: Create zip
|
|
||||||
env:
|
|
||||||
BITS: ${{ matrix.arch == 'x86_64' && '64' || '32' }}
|
|
||||||
DIR: ${{ matrix.arch == 'x86_64' && 'x64' || 'x86' }}
|
|
||||||
shell: C:\cygwin\bin\bash.exe -e '{0}'
|
|
||||||
run: >-
|
|
||||||
cp -a -t output psmisc/psmisc-*.src/psmisc-*/inst/usr/bin/killall.exe /usr/bin/cygwin1.dll &&
|
|
||||||
wget -O WinDivert.zip https://github.com/basil00/WinDivert/releases/download/v2.2.2/WinDivert-2.2.2-A.zip &&
|
|
||||||
unzip -j WinDivert.zip "*/${DIR}/WinDivert.dll" "*/${DIR}/WinDivert${BITS}.sys" -d output &&
|
|
||||||
zip zapret-win-${{ matrix.arch }}.zip -j output/*
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: zapret-win-${{ matrix.arch }}
|
|
||||||
path: zapret-*.zip
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
build-android:
|
|
||||||
name: Android ${{ matrix.abi }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- abi: armeabi-v7a
|
|
||||||
target: armv7a-linux-androideabi
|
|
||||||
- abi: arm64-v8a
|
|
||||||
target: aarch64-linux-android
|
|
||||||
- abi: x86
|
|
||||||
target: i686-linux-android
|
|
||||||
- abi: x86_64
|
|
||||||
target: x86_64-linux-android
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: zapret
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
env:
|
|
||||||
ABI: ${{ matrix.abi }}
|
|
||||||
API: 21
|
|
||||||
TARGET: ${{ matrix.target }}
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
DEPS_DIR=$GITHUB_WORKSPACE/deps
|
|
||||||
export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
|
|
||||||
export CC="$TOOLCHAIN/bin/clang --target=$TARGET$API"
|
|
||||||
export AR=$TOOLCHAIN/bin/llvm-ar
|
|
||||||
export AS=$CC
|
|
||||||
export LD=$TOOLCHAIN/bin/ld
|
|
||||||
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
|
|
||||||
export STRIP=$TOOLCHAIN/bin/llvm-strip
|
|
||||||
export PKG_CONFIG_PATH=$DEPS_DIR/lib/pkgconfig
|
|
||||||
|
|
||||||
# netfilter libs
|
|
||||||
wget -qO- https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj
|
|
||||||
wget -qO- https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj
|
|
||||||
wget -qO- https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj
|
|
||||||
patch -p1 -d libnetfilter_queue-* -i ../zapret/.github/workflows/libnetfilter_queue-android.patch
|
|
||||||
|
|
||||||
for i in libmnl libnfnetlink libnetfilter_queue ; do
|
|
||||||
(
|
|
||||||
cd $i-*
|
|
||||||
CFLAGS="-Os -flto=auto -Wno-implicit-function-declaration" \
|
|
||||||
./configure --prefix= --host=$TARGET --enable-static --disable-shared --disable-dependency-tracking
|
|
||||||
make install -j$(nproc) DESTDIR=$DEPS_DIR
|
|
||||||
)
|
|
||||||
sed -i "s|^prefix=.*|prefix=$DEPS_DIR|g" $DEPS_DIR/lib/pkgconfig/$i.pc
|
|
||||||
done
|
|
||||||
|
|
||||||
# zapret
|
|
||||||
CFLAGS="-DZAPRET_GH_VER=${{ github.ref_name }} -DZAPRET_GH_HASH=${{ github.sha }} -I$DEPS_DIR/include" \
|
|
||||||
LDFLAGS="-L$DEPS_DIR/lib" \
|
|
||||||
make -C zapret android -j$(nproc)
|
|
||||||
|
|
||||||
# strip unwanted ELF sections to prevent warnings on old Android versions
|
|
||||||
gh api repos/termux/termux-elf-cleaner/releases/latest --jq '.tag_name' |\
|
|
||||||
xargs -I{} wget -O elf-cleaner https://github.com/termux/termux-elf-cleaner/releases/download/{}/termux-elf-cleaner
|
|
||||||
chmod +x elf-cleaner
|
|
||||||
./elf-cleaner --api-level $API zapret/binaries/my/*
|
|
||||||
zip zapret-android-$ABI.zip -j zapret/binaries/my/*
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: zapret-android-${{ matrix.abi }}
|
|
||||||
path: zapret-*.zip
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
release:
|
|
||||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
||||||
needs: [ build-linux, build-windows, build-macos, build-freebsd, build-android ]
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
repo_dir: zapret-${{ github.ref_name }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: ${{ env.repo_dir }}
|
|
||||||
|
|
||||||
- name: Download artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
id: bins
|
|
||||||
with:
|
|
||||||
path: ${{ env.repo_dir }}/binaries
|
|
||||||
pattern: zapret-*
|
|
||||||
|
|
||||||
- name: Install upx
|
|
||||||
uses: crazy-max/ghaction-upx@v3
|
|
||||||
with:
|
|
||||||
install-only: true
|
|
||||||
version: v4.2.4
|
|
||||||
|
|
||||||
- name: Prepare binaries
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd ${{ steps.bins.outputs.download-path }}
|
|
||||||
run_upx() {
|
|
||||||
upx --best --lzma $@ || true
|
|
||||||
}
|
|
||||||
run_dir() {
|
|
||||||
for f in $dir/* ; do
|
|
||||||
# extract binaries
|
|
||||||
case $f in
|
|
||||||
*.tar.xz )
|
|
||||||
tar -C $dir -xvf $f && rm $f
|
|
||||||
if [[ $dir == *-linux-x86_64 ]]; then
|
|
||||||
tar -C $dir -czvf $dir/tpws_wsl.tgz tpws
|
|
||||||
run_upx $dir/*
|
|
||||||
elif [[ $dir =~ linux ]] && [[ $dir != *-linux-mips64 ]] && [[ $dir != *-linux-lexra ]]; then
|
|
||||||
run_upx $dir/*
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*.zip )
|
|
||||||
unzip $f -d $dir && rm $f
|
|
||||||
if [[ $dir =~ win ]]; then
|
|
||||||
chmod -x $dir/*
|
|
||||||
run_upx --force $dir/cygwin1.dll
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
mv $dir $1
|
|
||||||
}
|
|
||||||
for dir in * ; do
|
|
||||||
if [ -d $dir ]; then
|
|
||||||
echo "Processing $dir"
|
|
||||||
case $dir in
|
|
||||||
*-android-arm64-v8a ) run_dir android-aarch64 ;;
|
|
||||||
*-android-armeabi-v7a ) run_dir android-arm ;;
|
|
||||||
*-android-x86 ) run_dir android-x86 ;;
|
|
||||||
*-android-x86_64 ) run_dir android-x86_64 ;;
|
|
||||||
*-freebsd-x86_64 ) run_dir freebsd-x64 ;;
|
|
||||||
*-linux-arm ) run_dir arm ;;
|
|
||||||
*-linux-arm64 ) run_dir aarch64 ;;
|
|
||||||
*-linux-mips64 ) run_dir mips64r2-msb ;;
|
|
||||||
*-linux-mipselsf ) run_dir mips32r1-lsb ;;
|
|
||||||
*-linux-mipssf ) run_dir mips32r1-msb ;;
|
|
||||||
*-linux-ppc ) run_dir ppc ;;
|
|
||||||
*-linux-x86 ) run_dir x86 ;;
|
|
||||||
*-linux-x86_64 ) run_dir x86_64 ;;
|
|
||||||
*-linux-lexra ) run_dir lexra ;;
|
|
||||||
*-mac-x64 ) run_dir mac64 ;;
|
|
||||||
*-win-x86 ) run_dir win32 ;;
|
|
||||||
*-win-x86_64 ) run_dir win64 ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
ls -lhR
|
|
||||||
|
|
||||||
- name: Create release bundles
|
|
||||||
run: |
|
|
||||||
rm -rf ${{ env.repo_dir }}/.git*
|
|
||||||
find ${{ env.repo_dir }}/binaries -type f -exec sha256sum {} \; >sha256sum.txt
|
|
||||||
tar --owner=0 --group=0 -czf ${{ env.repo_dir }}.tar.gz ${{ env.repo_dir }}
|
|
||||||
zip -qr ${{ env.repo_dir }}.zip ${{ env.repo_dir }}
|
|
||||||
(
|
|
||||||
cd ${{ env.repo_dir }}
|
|
||||||
rm -rf binaries/{android*,freebsd*,mac*,win*,x86_64/tpws_wsl.tgz} \
|
|
||||||
init.d/{openrc,macos,pfsense,runit,s6,systemd} \
|
|
||||||
tpws nfq ip2net mdig docs files/huawei Makefile
|
|
||||||
)
|
|
||||||
tar --owner=0 --group=0 -czf ${{ env.repo_dir }}-openwrt-embedded.tar.gz ${{ env.repo_dir }}
|
|
||||||
|
|
||||||
- name: Upload release assets
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
|
||||||
fail_on_unmatched_files: true
|
|
||||||
prerelease: false
|
|
||||||
draft: false
|
|
||||||
body: |
|
|
||||||
### zapret ${{ github.ref_name }}
|
|
||||||
files: |
|
|
||||||
zapret*.tar.gz
|
|
||||||
zapret*.zip
|
|
||||||
sha256sum.txt
|
|
@ -1,41 +0,0 @@
|
|||||||
--- a/src/extra/pktbuff.c
|
|
||||||
+++ b/src/extra/pktbuff.c
|
|
||||||
@@ -14,7 +14,7 @@
|
|
||||||
#include <string.h> /* for memcpy */
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
-#include <netinet/if_ether.h>
|
|
||||||
+#include <linux/if_ether.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/tcp.h>
|
|
||||||
|
|
||||||
--- a/src/nlmsg.c
|
|
||||||
+++ b/src/nlmsg.c
|
|
||||||
@@ -21,7 +21,7 @@
|
|
||||||
|
|
||||||
#include <linux/netfilter/nfnetlink_queue.h>
|
|
||||||
|
|
||||||
-#include <libnetfilter_queue/libnetfilter_queue.h>
|
|
||||||
+// #include <libnetfilter_queue/libnetfilter_queue.h>
|
|
||||||
|
|
||||||
#include "internal.h"
|
|
||||||
|
|
||||||
--- a/src/extra/tcp.c
|
|
||||||
+++ b/src/extra/tcp.c
|
|
||||||
@@ -139,12 +139,16 @@ void nfq_tcp_compute_checksum_ipv6(struc
|
|
||||||
* (union is compatible to any of its members)
|
|
||||||
* This means this part of the code is -fstrict-aliasing safe now.
|
|
||||||
*/
|
|
||||||
+#ifndef __ANDROID__
|
|
||||||
union tcp_word_hdr {
|
|
||||||
struct tcphdr hdr;
|
|
||||||
uint32_t words[5];
|
|
||||||
};
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
+#ifndef tcp_flag_word
|
|
||||||
#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words[3])
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* nfq_pkt_snprintf_tcp_hdr - print tcp header into one buffer in a humnan
|
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,12 +1,11 @@
|
|||||||
/config
|
/config
|
||||||
ip2net/ip2net
|
ip2net/ip2net
|
||||||
mdig/mdig
|
mdig/mdig
|
||||||
nfq/dvtws
|
|
||||||
nfq/nfqws
|
nfq/nfqws
|
||||||
nfq/winws.exe
|
|
||||||
nfq/WinDivert*
|
|
||||||
tpws/tpws
|
tpws/tpws
|
||||||
binaries/my/
|
binaries/my/
|
||||||
|
binaries/win64/zapret-winws/autohostlist.txt
|
||||||
|
init.d/**/custom
|
||||||
ipset/zapret-ip*.txt
|
ipset/zapret-ip*.txt
|
||||||
ipset/zapret-ip*.gz
|
ipset/zapret-ip*.gz
|
||||||
ipset/zapret-hosts*.txt
|
ipset/zapret-hosts*.txt
|
||||||
|
26
Makefile
26
Makefile
@ -15,32 +15,6 @@ all: clean
|
|||||||
done \
|
done \
|
||||||
done
|
done
|
||||||
|
|
||||||
systemd: clean
|
|
||||||
@mkdir -p "$(TGT)"; \
|
|
||||||
for dir in $(DIRS); do \
|
|
||||||
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
|
|
||||||
$(MAKE) -C "$$dir" systemd || exit; \
|
|
||||||
for exe in "$$dir/"*; do \
|
|
||||||
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
|
|
||||||
mv -f "$$exe" "${TGT}" ; \
|
|
||||||
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
|
|
||||||
fi \
|
|
||||||
done \
|
|
||||||
done
|
|
||||||
|
|
||||||
android: clean
|
|
||||||
@mkdir -p "$(TGT)"; \
|
|
||||||
for dir in $(DIRS); do \
|
|
||||||
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
|
|
||||||
$(MAKE) -C "$$dir" android || exit; \
|
|
||||||
for exe in "$$dir/"*; do \
|
|
||||||
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
|
|
||||||
mv -f "$$exe" "${TGT}" ; \
|
|
||||||
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
|
|
||||||
fi \
|
|
||||||
done \
|
|
||||||
done
|
|
||||||
|
|
||||||
bsd: clean
|
bsd: clean
|
||||||
@mkdir -p "$(TGT)"; \
|
@mkdir -p "$(TGT)"; \
|
||||||
for dir in $(DIRS); do \
|
for dir in $(DIRS); do \
|
||||||
|
BIN
binaries/aarch64/ip2net
Executable file
BIN
binaries/aarch64/ip2net
Executable file
Binary file not shown.
BIN
binaries/aarch64/mdig
Executable file
BIN
binaries/aarch64/mdig
Executable file
Binary file not shown.
BIN
binaries/aarch64/nfqws
Executable file
BIN
binaries/aarch64/nfqws
Executable file
Binary file not shown.
BIN
binaries/aarch64/tpws
Executable file
BIN
binaries/aarch64/tpws
Executable file
Binary file not shown.
BIN
binaries/arm/ip2net
Executable file
BIN
binaries/arm/ip2net
Executable file
Binary file not shown.
BIN
binaries/arm/mdig
Executable file
BIN
binaries/arm/mdig
Executable file
Binary file not shown.
BIN
binaries/arm/nfqws
Executable file
BIN
binaries/arm/nfqws
Executable file
Binary file not shown.
BIN
binaries/arm/tpws
Executable file
BIN
binaries/arm/tpws
Executable file
Binary file not shown.
BIN
binaries/freebsd-x64/dvtws
Executable file
BIN
binaries/freebsd-x64/dvtws
Executable file
Binary file not shown.
BIN
binaries/freebsd-x64/ip2net
Executable file
BIN
binaries/freebsd-x64/ip2net
Executable file
Binary file not shown.
BIN
binaries/freebsd-x64/mdig
Executable file
BIN
binaries/freebsd-x64/mdig
Executable file
Binary file not shown.
BIN
binaries/freebsd-x64/tpws
Executable file
BIN
binaries/freebsd-x64/tpws
Executable file
Binary file not shown.
BIN
binaries/mac64/ip2net
Executable file
BIN
binaries/mac64/ip2net
Executable file
Binary file not shown.
BIN
binaries/mac64/mdig
Executable file
BIN
binaries/mac64/mdig
Executable file
Binary file not shown.
BIN
binaries/mac64/tpws
Executable file
BIN
binaries/mac64/tpws
Executable file
Binary file not shown.
BIN
binaries/mips32r1-lsb/ip2net
Executable file
BIN
binaries/mips32r1-lsb/ip2net
Executable file
Binary file not shown.
BIN
binaries/mips32r1-lsb/mdig
Executable file
BIN
binaries/mips32r1-lsb/mdig
Executable file
Binary file not shown.
BIN
binaries/mips32r1-lsb/nfqws
Executable file
BIN
binaries/mips32r1-lsb/nfqws
Executable file
Binary file not shown.
BIN
binaries/mips32r1-lsb/tpws
Executable file
BIN
binaries/mips32r1-lsb/tpws
Executable file
Binary file not shown.
BIN
binaries/mips32r1-msb/ip2net
Executable file
BIN
binaries/mips32r1-msb/ip2net
Executable file
Binary file not shown.
BIN
binaries/mips32r1-msb/mdig
Executable file
BIN
binaries/mips32r1-msb/mdig
Executable file
Binary file not shown.
BIN
binaries/mips32r1-msb/nfqws
Executable file
BIN
binaries/mips32r1-msb/nfqws
Executable file
Binary file not shown.
BIN
binaries/mips32r1-msb/tpws
Executable file
BIN
binaries/mips32r1-msb/tpws
Executable file
Binary file not shown.
BIN
binaries/mips64r2-msb/ip2net
Executable file
BIN
binaries/mips64r2-msb/ip2net
Executable file
Binary file not shown.
BIN
binaries/mips64r2-msb/mdig
Executable file
BIN
binaries/mips64r2-msb/mdig
Executable file
Binary file not shown.
BIN
binaries/mips64r2-msb/nfqws
Executable file
BIN
binaries/mips64r2-msb/nfqws
Executable file
Binary file not shown.
BIN
binaries/mips64r2-msb/tpws
Executable file
BIN
binaries/mips64r2-msb/tpws
Executable file
Binary file not shown.
BIN
binaries/ppc/ip2net
Executable file
BIN
binaries/ppc/ip2net
Executable file
Binary file not shown.
BIN
binaries/ppc/mdig
Executable file
BIN
binaries/ppc/mdig
Executable file
Binary file not shown.
BIN
binaries/ppc/nfqws
Executable file
BIN
binaries/ppc/nfqws
Executable file
Binary file not shown.
BIN
binaries/ppc/tpws
Executable file
BIN
binaries/ppc/tpws
Executable file
Binary file not shown.
BIN
binaries/win64/WinDivert.dll
Normal file
BIN
binaries/win64/WinDivert.dll
Normal file
Binary file not shown.
BIN
binaries/win64/WinDivert64.sys
Normal file
BIN
binaries/win64/WinDivert64.sys
Normal file
Binary file not shown.
BIN
binaries/win64/ip2net.exe
Normal file
BIN
binaries/win64/ip2net.exe
Normal file
Binary file not shown.
BIN
binaries/win64/mdig.exe
Normal file
BIN
binaries/win64/mdig.exe
Normal file
Binary file not shown.
9
binaries/win64/readme.txt
Normal file
9
binaries/win64/readme.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Standalone version in zapret-winws folder !!
|
||||||
|
From this folder winws can be started only from cygwin shell.
|
||||||
|
|
||||||
|
Cygwin refuses to start winws if a copy of cygwin1.dll is present !
|
||||||
|
|
||||||
|
How to get win7 and winws compatible version of cygwin :
|
||||||
|
|
||||||
|
curl -O https://www.cygwin.com/setup-x86_64.exe
|
||||||
|
setup-x86_64.exe --allow-unsupported-windows --no-verify --site http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2024/01/30/231215
|
BIN
binaries/win64/winws.exe
Normal file
BIN
binaries/win64/winws.exe
Normal file
Binary file not shown.
BIN
binaries/win64/zapret-winws/WinDivert.dll
Normal file
BIN
binaries/win64/zapret-winws/WinDivert.dll
Normal file
Binary file not shown.
BIN
binaries/win64/zapret-winws/WinDivert64.sys
Normal file
BIN
binaries/win64/zapret-winws/WinDivert64.sys
Normal file
Binary file not shown.
BIN
binaries/win64/zapret-winws/cygwin1.dll
Normal file
BIN
binaries/win64/zapret-winws/cygwin1.dll
Normal file
Binary file not shown.
721
binaries/win64/zapret-winws/ipset-discord.txt
Normal file
721
binaries/win64/zapret-winws/ipset-discord.txt
Normal file
@ -0,0 +1,721 @@
|
|||||||
|
5.200.14.249
|
||||||
|
18.165.140.0/25
|
||||||
|
23.227.38.74
|
||||||
|
34.0.48.0/24
|
||||||
|
34.0.49.64/26
|
||||||
|
34.0.50.0/25
|
||||||
|
34.0.51.0/24
|
||||||
|
34.0.52.0/22
|
||||||
|
34.0.56.0/23
|
||||||
|
34.0.59.0/24
|
||||||
|
34.0.60.0/24
|
||||||
|
34.0.62.128/25
|
||||||
|
34.0.63.228
|
||||||
|
34.0.64.0/23
|
||||||
|
34.0.66.130
|
||||||
|
34.0.82.140
|
||||||
|
34.0.129.128/25
|
||||||
|
34.0.130.0/24
|
||||||
|
34.0.131.130
|
||||||
|
34.0.132.139
|
||||||
|
34.0.133.75
|
||||||
|
34.0.134.0/24
|
||||||
|
34.0.135.251
|
||||||
|
34.0.136.51
|
||||||
|
34.0.137.0/24
|
||||||
|
34.0.139.0/24
|
||||||
|
34.0.140.0/23
|
||||||
|
34.0.142.0/25
|
||||||
|
34.0.144.0/23
|
||||||
|
34.0.146.0/24
|
||||||
|
34.0.148.25
|
||||||
|
34.0.149.101
|
||||||
|
34.0.151.0/25
|
||||||
|
34.0.153.0/24
|
||||||
|
34.0.155.0/24
|
||||||
|
34.0.156.101
|
||||||
|
34.0.157.0/25
|
||||||
|
34.0.158.247
|
||||||
|
34.0.159.188
|
||||||
|
34.0.192.0/25
|
||||||
|
34.0.193.0/24
|
||||||
|
34.0.194.0/24
|
||||||
|
34.0.195.172
|
||||||
|
34.0.196.200/29
|
||||||
|
34.0.197.81
|
||||||
|
34.0.198.25
|
||||||
|
34.0.199.0/24
|
||||||
|
34.0.200.0/24
|
||||||
|
34.0.201.81
|
||||||
|
34.0.202.34
|
||||||
|
34.0.203.0/24
|
||||||
|
34.0.204.0/23
|
||||||
|
34.0.206.0/25
|
||||||
|
34.0.207.0/25
|
||||||
|
34.0.208.195
|
||||||
|
34.0.209.0/24
|
||||||
|
34.0.210.20
|
||||||
|
34.0.211.0/26
|
||||||
|
34.0.212.0/24
|
||||||
|
34.0.213.64/26
|
||||||
|
34.0.215.128/25
|
||||||
|
34.0.216.238
|
||||||
|
34.0.217.0/24
|
||||||
|
34.0.218.83
|
||||||
|
34.0.220.103
|
||||||
|
34.0.221.0/24
|
||||||
|
34.0.222.193
|
||||||
|
34.0.223.68
|
||||||
|
34.0.227.0/24
|
||||||
|
34.0.240.0/21
|
||||||
|
34.0.248.0/23
|
||||||
|
34.0.250.0/24
|
||||||
|
34.0.251.0/25
|
||||||
|
34.1.216.0/24
|
||||||
|
34.1.221.166
|
||||||
|
35.207.64.0/23
|
||||||
|
35.207.67.116
|
||||||
|
35.207.71.0/24
|
||||||
|
35.207.72.32
|
||||||
|
35.207.73.0/24
|
||||||
|
35.207.74.0/24
|
||||||
|
35.207.75.128/25
|
||||||
|
35.207.76.128/26
|
||||||
|
35.207.77.0/24
|
||||||
|
35.207.78.129
|
||||||
|
35.207.79.0/24
|
||||||
|
35.207.80.76
|
||||||
|
35.207.81.248/30
|
||||||
|
35.207.82.0/23
|
||||||
|
35.207.84.0/24
|
||||||
|
35.207.85.160
|
||||||
|
35.207.86.41
|
||||||
|
35.207.87.184
|
||||||
|
35.207.89.188
|
||||||
|
35.207.91.146
|
||||||
|
35.207.92.230
|
||||||
|
35.207.95.0/24
|
||||||
|
35.207.97.174
|
||||||
|
35.207.99.134
|
||||||
|
35.207.100.64/26
|
||||||
|
35.207.101.130
|
||||||
|
35.207.103.64/26
|
||||||
|
35.207.104.0/24
|
||||||
|
35.207.106.128/26
|
||||||
|
35.207.107.19
|
||||||
|
35.207.108.192/27
|
||||||
|
35.207.109.185
|
||||||
|
35.207.110.0/24
|
||||||
|
35.207.111.174
|
||||||
|
35.207.114.16
|
||||||
|
35.207.115.163
|
||||||
|
35.207.116.51
|
||||||
|
35.207.117.0/24
|
||||||
|
35.207.121.204
|
||||||
|
35.207.122.0/25
|
||||||
|
35.207.124.145
|
||||||
|
35.207.125.116
|
||||||
|
35.207.126.30
|
||||||
|
35.207.129.0/24
|
||||||
|
35.207.131.128/27
|
||||||
|
35.207.132.247
|
||||||
|
35.207.135.147
|
||||||
|
35.207.136.69
|
||||||
|
35.207.137.0/24
|
||||||
|
35.207.139.0/24
|
||||||
|
35.207.140.241
|
||||||
|
35.207.141.119
|
||||||
|
35.207.142.0/24
|
||||||
|
35.207.143.96/27
|
||||||
|
35.207.144.0/25
|
||||||
|
35.207.145.0/24
|
||||||
|
35.207.146.89
|
||||||
|
35.207.147.0/24
|
||||||
|
35.207.149.0/24
|
||||||
|
35.207.150.0/24
|
||||||
|
35.207.151.61
|
||||||
|
35.207.153.117
|
||||||
|
35.207.154.0/24
|
||||||
|
35.207.155.128/25
|
||||||
|
35.207.156.254
|
||||||
|
35.207.157.7
|
||||||
|
35.207.158.192
|
||||||
|
35.207.160.160
|
||||||
|
35.207.162.239
|
||||||
|
35.207.163.0/24
|
||||||
|
35.207.164.0/25
|
||||||
|
35.207.165.147
|
||||||
|
35.207.166.0/25
|
||||||
|
35.207.167.0/24
|
||||||
|
35.207.168.116
|
||||||
|
35.207.170.0/23
|
||||||
|
35.207.172.0/24
|
||||||
|
35.207.174.55
|
||||||
|
35.207.176.128/25
|
||||||
|
35.207.178.0/24
|
||||||
|
35.207.180.152
|
||||||
|
35.207.181.76
|
||||||
|
35.207.182.125
|
||||||
|
35.207.184.101
|
||||||
|
35.207.185.192
|
||||||
|
35.207.186.128/25
|
||||||
|
35.207.187.228
|
||||||
|
35.207.188.0/24
|
||||||
|
35.207.189.0/25
|
||||||
|
35.207.190.194
|
||||||
|
35.207.191.64/26
|
||||||
|
35.207.193.165
|
||||||
|
35.207.195.75
|
||||||
|
35.207.196.0/24
|
||||||
|
35.207.198.0/23
|
||||||
|
35.207.201.186
|
||||||
|
35.207.202.169
|
||||||
|
35.207.205.211
|
||||||
|
35.207.207.4
|
||||||
|
35.207.209.0/25
|
||||||
|
35.207.210.191
|
||||||
|
35.207.211.253
|
||||||
|
35.207.213.97
|
||||||
|
35.207.214.0/24
|
||||||
|
35.207.220.147
|
||||||
|
35.207.221.58
|
||||||
|
35.207.222.105
|
||||||
|
35.207.224.151
|
||||||
|
35.207.225.210
|
||||||
|
35.207.227.0/24
|
||||||
|
35.207.229.212
|
||||||
|
35.207.232.26
|
||||||
|
35.207.234.182
|
||||||
|
35.207.238.0/24
|
||||||
|
35.207.240.0/24
|
||||||
|
35.207.245.0/24
|
||||||
|
35.207.249.0/24
|
||||||
|
35.207.250.212
|
||||||
|
35.207.251.0/27
|
||||||
|
35.212.4.134
|
||||||
|
35.212.12.148
|
||||||
|
35.212.88.11
|
||||||
|
35.212.102.50
|
||||||
|
35.212.111.0/26
|
||||||
|
35.212.117.247
|
||||||
|
35.212.120.122
|
||||||
|
35.213.0.0/24
|
||||||
|
35.213.2.8
|
||||||
|
35.213.4.185
|
||||||
|
35.213.6.118
|
||||||
|
35.213.7.128/25
|
||||||
|
35.213.8.168
|
||||||
|
35.213.10.0/24
|
||||||
|
35.213.11.21
|
||||||
|
35.213.12.224/27
|
||||||
|
35.213.13.19
|
||||||
|
35.213.14.217
|
||||||
|
35.213.16.67
|
||||||
|
35.213.17.235
|
||||||
|
35.213.23.166
|
||||||
|
35.213.25.164
|
||||||
|
35.213.26.62
|
||||||
|
35.213.27.252
|
||||||
|
35.213.32.0/24
|
||||||
|
35.213.33.74
|
||||||
|
35.213.34.204
|
||||||
|
35.213.37.81
|
||||||
|
35.213.38.186
|
||||||
|
35.213.39.253
|
||||||
|
35.213.42.0/24
|
||||||
|
35.213.43.79
|
||||||
|
35.213.45.0/24
|
||||||
|
35.213.46.136
|
||||||
|
35.213.49.17
|
||||||
|
35.213.50.0/24
|
||||||
|
35.213.51.213
|
||||||
|
35.213.52.0/25
|
||||||
|
35.213.53.0/24
|
||||||
|
35.213.54.0/24
|
||||||
|
35.213.56.0/25
|
||||||
|
35.213.59.0/24
|
||||||
|
35.213.61.58
|
||||||
|
35.213.65.0/24
|
||||||
|
35.213.67.0/24
|
||||||
|
35.213.68.192/26
|
||||||
|
35.213.70.151
|
||||||
|
35.213.72.128/25
|
||||||
|
35.213.73.245
|
||||||
|
35.213.74.131
|
||||||
|
35.213.78.0/24
|
||||||
|
35.213.79.137
|
||||||
|
35.213.80.0/25
|
||||||
|
35.213.83.128/25
|
||||||
|
35.213.84.245
|
||||||
|
35.213.85.0/24
|
||||||
|
35.213.88.145
|
||||||
|
35.213.89.80/28
|
||||||
|
35.213.90.0/24
|
||||||
|
35.213.91.195
|
||||||
|
35.213.92.0/24
|
||||||
|
35.213.93.254
|
||||||
|
35.213.94.78
|
||||||
|
35.213.95.145
|
||||||
|
35.213.96.87
|
||||||
|
35.213.98.0/24
|
||||||
|
35.213.99.126
|
||||||
|
35.213.101.214
|
||||||
|
35.213.102.0/24
|
||||||
|
35.213.105.0/24
|
||||||
|
35.213.106.128/25
|
||||||
|
35.213.107.158
|
||||||
|
35.213.109.0/24
|
||||||
|
35.213.110.40
|
||||||
|
35.213.111.0/25
|
||||||
|
35.213.115.0/25
|
||||||
|
35.213.120.0/24
|
||||||
|
35.213.122.0/24
|
||||||
|
35.213.124.89
|
||||||
|
35.213.125.40
|
||||||
|
35.213.126.185
|
||||||
|
35.213.127.0/24
|
||||||
|
35.213.128.0/22
|
||||||
|
35.213.132.0/23
|
||||||
|
35.213.134.140
|
||||||
|
35.213.135.0/24
|
||||||
|
35.213.136.0/23
|
||||||
|
35.213.138.128/25
|
||||||
|
35.213.139.0/24
|
||||||
|
35.213.140.0/25
|
||||||
|
35.213.141.164
|
||||||
|
35.213.142.128/25
|
||||||
|
35.213.143.0/24
|
||||||
|
35.213.144.0/22
|
||||||
|
35.213.148.0/23
|
||||||
|
35.213.150.0/24
|
||||||
|
35.213.152.0/23
|
||||||
|
35.213.154.137
|
||||||
|
35.213.155.134
|
||||||
|
35.213.156.144
|
||||||
|
35.213.157.0/24
|
||||||
|
35.213.158.64/26
|
||||||
|
35.213.160.90
|
||||||
|
35.213.161.253
|
||||||
|
35.213.162.0/25
|
||||||
|
35.213.163.0/24
|
||||||
|
35.213.164.0/23
|
||||||
|
35.213.166.106
|
||||||
|
35.213.167.160/27
|
||||||
|
35.213.168.0/24
|
||||||
|
35.213.169.179
|
||||||
|
35.213.170.0/24
|
||||||
|
35.213.171.201
|
||||||
|
35.213.172.159
|
||||||
|
35.213.173.0/24
|
||||||
|
35.213.174.128/25
|
||||||
|
35.213.175.128/26
|
||||||
|
35.213.176.0/24
|
||||||
|
35.213.177.0/25
|
||||||
|
35.213.179.139
|
||||||
|
35.213.180.0/24
|
||||||
|
35.213.181.0/25
|
||||||
|
35.213.182.0/23
|
||||||
|
35.213.184.0/23
|
||||||
|
35.213.186.70
|
||||||
|
35.213.187.0/24
|
||||||
|
35.213.188.128/25
|
||||||
|
35.213.190.158
|
||||||
|
35.213.191.0/24
|
||||||
|
35.213.192.240/31
|
||||||
|
35.213.193.74
|
||||||
|
35.213.194.0/25
|
||||||
|
35.213.195.178
|
||||||
|
35.213.196.38
|
||||||
|
35.213.197.68
|
||||||
|
35.213.198.0/23
|
||||||
|
35.213.200.0/23
|
||||||
|
35.213.202.0/25
|
||||||
|
35.213.203.195
|
||||||
|
35.213.204.32/27
|
||||||
|
35.213.205.170
|
||||||
|
35.213.207.128/25
|
||||||
|
35.213.208.85
|
||||||
|
35.213.210.0/24
|
||||||
|
35.213.211.176/29
|
||||||
|
35.213.212.0/24
|
||||||
|
35.213.213.225
|
||||||
|
35.213.214.0/25
|
||||||
|
35.213.215.255
|
||||||
|
35.213.217.0/24
|
||||||
|
35.213.218.248
|
||||||
|
35.213.219.0/25
|
||||||
|
35.213.220.211
|
||||||
|
35.213.221.0/24
|
||||||
|
35.213.222.215
|
||||||
|
35.213.223.0/24
|
||||||
|
35.213.225.0/24
|
||||||
|
35.213.227.227
|
||||||
|
35.213.229.17
|
||||||
|
35.213.230.89
|
||||||
|
35.213.231.0/24
|
||||||
|
35.213.233.0/24
|
||||||
|
35.213.234.134
|
||||||
|
35.213.236.0/24
|
||||||
|
35.213.237.212
|
||||||
|
35.213.238.0/24
|
||||||
|
35.213.240.212
|
||||||
|
35.213.241.0/24
|
||||||
|
35.213.242.10
|
||||||
|
35.213.243.219
|
||||||
|
35.213.244.146
|
||||||
|
35.213.245.119
|
||||||
|
35.213.246.0/23
|
||||||
|
35.213.249.79
|
||||||
|
35.213.250.0/24
|
||||||
|
35.213.251.74
|
||||||
|
35.213.252.0/24
|
||||||
|
35.213.253.155
|
||||||
|
35.213.254.89
|
||||||
|
35.214.128.248
|
||||||
|
35.214.129.220
|
||||||
|
35.214.130.217
|
||||||
|
35.214.131.144
|
||||||
|
35.214.132.189
|
||||||
|
35.214.133.0/24
|
||||||
|
35.214.134.163
|
||||||
|
35.214.137.0/24
|
||||||
|
35.214.138.0/25
|
||||||
|
35.214.140.0/24
|
||||||
|
35.214.142.0/24
|
||||||
|
35.214.143.41
|
||||||
|
35.214.144.26
|
||||||
|
35.214.145.200
|
||||||
|
35.214.146.9
|
||||||
|
35.214.147.135
|
||||||
|
35.214.148.89
|
||||||
|
35.214.149.110
|
||||||
|
35.214.151.128/25
|
||||||
|
35.214.152.0/24
|
||||||
|
35.214.156.115
|
||||||
|
35.214.158.181
|
||||||
|
35.214.159.128/25
|
||||||
|
35.214.160.128/25
|
||||||
|
35.214.161.217
|
||||||
|
35.214.162.0/24
|
||||||
|
35.214.163.28
|
||||||
|
35.214.165.102
|
||||||
|
35.214.167.77
|
||||||
|
35.214.169.0/24
|
||||||
|
35.214.170.2
|
||||||
|
35.214.171.0/25
|
||||||
|
35.214.172.128/25
|
||||||
|
35.214.173.0/24
|
||||||
|
35.214.175.0/24
|
||||||
|
35.214.177.183
|
||||||
|
35.214.179.46
|
||||||
|
35.214.180.0/23
|
||||||
|
35.214.184.179
|
||||||
|
35.214.185.28
|
||||||
|
35.214.186.3
|
||||||
|
35.214.187.0/24
|
||||||
|
35.214.191.0/24
|
||||||
|
35.214.192.128/25
|
||||||
|
35.214.193.0/24
|
||||||
|
35.214.194.128/25
|
||||||
|
35.214.195.0/25
|
||||||
|
35.214.196.64/26
|
||||||
|
35.214.197.0/24
|
||||||
|
35.214.198.7
|
||||||
|
35.214.199.224
|
||||||
|
35.214.201.0/25
|
||||||
|
35.214.203.155
|
||||||
|
35.214.204.0/23
|
||||||
|
35.214.207.0/24
|
||||||
|
35.214.208.128/25
|
||||||
|
35.214.209.64
|
||||||
|
35.214.210.0/24
|
||||||
|
35.214.211.3
|
||||||
|
35.214.212.64/26
|
||||||
|
35.214.213.0/25
|
||||||
|
35.214.214.0/24
|
||||||
|
35.214.215.64/26
|
||||||
|
35.214.216.0/23
|
||||||
|
35.214.218.140
|
||||||
|
35.214.219.0/24
|
||||||
|
35.214.220.149
|
||||||
|
35.214.221.0/24
|
||||||
|
35.214.222.149
|
||||||
|
35.214.223.0/24
|
||||||
|
35.214.224.71
|
||||||
|
35.214.225.0/24
|
||||||
|
35.214.226.0/23
|
||||||
|
35.214.228.0/23
|
||||||
|
35.214.231.187
|
||||||
|
35.214.233.8
|
||||||
|
35.214.235.38
|
||||||
|
35.214.237.0/24
|
||||||
|
35.214.238.0/25
|
||||||
|
35.214.239.0/24
|
||||||
|
35.214.240.87
|
||||||
|
35.214.241.0/24
|
||||||
|
35.214.243.21
|
||||||
|
35.214.244.0/24
|
||||||
|
35.214.245.16/28
|
||||||
|
35.214.246.106
|
||||||
|
35.214.248.119
|
||||||
|
35.214.249.154
|
||||||
|
35.214.250.0/24
|
||||||
|
35.214.251.128/25
|
||||||
|
35.214.252.187
|
||||||
|
35.214.253.0/24
|
||||||
|
35.214.255.154
|
||||||
|
35.215.72.85
|
||||||
|
35.215.73.65
|
||||||
|
35.215.83.0
|
||||||
|
35.215.108.111
|
||||||
|
35.215.115.120
|
||||||
|
35.215.126.35
|
||||||
|
35.215.127.34
|
||||||
|
35.215.128.0/21
|
||||||
|
35.215.136.0/26
|
||||||
|
35.215.137.0/24
|
||||||
|
35.215.138.0/23
|
||||||
|
35.215.140.0/24
|
||||||
|
35.215.141.64/27
|
||||||
|
35.215.142.0/24
|
||||||
|
35.215.143.83
|
||||||
|
35.215.144.128/25
|
||||||
|
35.215.145.0/24
|
||||||
|
35.215.146.0/24
|
||||||
|
35.215.147.86
|
||||||
|
35.215.148.0/23
|
||||||
|
35.215.150.0/26
|
||||||
|
35.215.151.0/24
|
||||||
|
35.215.152.0/24
|
||||||
|
35.215.153.128/25
|
||||||
|
35.215.154.240/28
|
||||||
|
35.215.155.20
|
||||||
|
35.215.156.0/24
|
||||||
|
35.215.158.0/23
|
||||||
|
35.215.160.192/26
|
||||||
|
35.215.161.0/24
|
||||||
|
35.215.163.0/24
|
||||||
|
35.215.164.0/24
|
||||||
|
35.215.165.236
|
||||||
|
35.215.166.128/25
|
||||||
|
35.215.167.128/25
|
||||||
|
35.215.168.0/24
|
||||||
|
35.215.169.12
|
||||||
|
35.215.170.0/23
|
||||||
|
35.215.172.0/22
|
||||||
|
35.215.176.0/24
|
||||||
|
35.215.177.72
|
||||||
|
35.215.178.0/24
|
||||||
|
35.215.179.161
|
||||||
|
35.215.180.0/22
|
||||||
|
35.215.184.253
|
||||||
|
35.215.185.64/26
|
||||||
|
35.215.186.0/25
|
||||||
|
35.215.187.0/24
|
||||||
|
35.215.188.0/23
|
||||||
|
35.215.190.0/24
|
||||||
|
35.215.191.61
|
||||||
|
35.215.192.0/23
|
||||||
|
35.215.194.192/28
|
||||||
|
35.215.195.0/24
|
||||||
|
35.215.196.0/25
|
||||||
|
35.215.197.0/25
|
||||||
|
35.215.198.230
|
||||||
|
35.215.199.204
|
||||||
|
35.215.200.0/23
|
||||||
|
35.215.202.0/24
|
||||||
|
35.215.203.0/25
|
||||||
|
35.215.204.128/25
|
||||||
|
35.215.205.0/25
|
||||||
|
35.215.206.0/23
|
||||||
|
35.215.208.0/24
|
||||||
|
35.215.209.0/25
|
||||||
|
35.215.210.0/23
|
||||||
|
35.215.212.0/22
|
||||||
|
35.215.216.0/22
|
||||||
|
35.215.221.0/24
|
||||||
|
35.215.222.128/25
|
||||||
|
35.215.223.126
|
||||||
|
35.215.224.0/23
|
||||||
|
35.215.226.0/24
|
||||||
|
35.215.227.0/25
|
||||||
|
35.215.228.0/24
|
||||||
|
35.215.229.64
|
||||||
|
35.215.230.89
|
||||||
|
35.215.231.0/24
|
||||||
|
35.215.232.0/24
|
||||||
|
35.215.233.0/25
|
||||||
|
35.215.234.37
|
||||||
|
35.215.235.0/24
|
||||||
|
35.215.238.0/25
|
||||||
|
35.215.239.119
|
||||||
|
35.215.240.0/24
|
||||||
|
35.215.241.128/25
|
||||||
|
35.215.242.0/25
|
||||||
|
35.215.243.0/24
|
||||||
|
35.215.244.0/23
|
||||||
|
35.215.246.222
|
||||||
|
35.215.247.0/24
|
||||||
|
35.215.248.0/22
|
||||||
|
35.215.252.0/24
|
||||||
|
35.215.253.118
|
||||||
|
35.215.254.0/23
|
||||||
|
35.217.0.0/24
|
||||||
|
35.217.1.64/26
|
||||||
|
35.217.2.5
|
||||||
|
35.217.3.0/24
|
||||||
|
35.217.4.72
|
||||||
|
35.217.5.0/25
|
||||||
|
35.217.6.0/24
|
||||||
|
35.217.8.0/25
|
||||||
|
35.217.9.0/24
|
||||||
|
35.217.11.186
|
||||||
|
35.217.12.0/24
|
||||||
|
35.217.14.192/26
|
||||||
|
35.217.15.65
|
||||||
|
35.217.16.75
|
||||||
|
35.217.17.128/25
|
||||||
|
35.217.18.0/24
|
||||||
|
35.217.19.183
|
||||||
|
35.217.20.0/24
|
||||||
|
35.217.21.128/25
|
||||||
|
35.217.22.128/25
|
||||||
|
35.217.23.128/25
|
||||||
|
35.217.24.0/24
|
||||||
|
35.217.25.81
|
||||||
|
35.217.26.0/24
|
||||||
|
35.217.27.128/25
|
||||||
|
35.217.28.128/25
|
||||||
|
35.217.29.0/24
|
||||||
|
35.217.30.0/25
|
||||||
|
35.217.31.0/25
|
||||||
|
35.217.32.128/25
|
||||||
|
35.217.33.0/24
|
||||||
|
35.217.35.128/25
|
||||||
|
35.217.36.0/23
|
||||||
|
35.217.38.179
|
||||||
|
35.217.39.186
|
||||||
|
35.217.40.176
|
||||||
|
35.217.41.204
|
||||||
|
35.217.43.0/24
|
||||||
|
35.217.45.248
|
||||||
|
35.217.46.0/24
|
||||||
|
35.217.47.128/25
|
||||||
|
35.217.48.195
|
||||||
|
35.217.49.160/27
|
||||||
|
35.217.50.0/25
|
||||||
|
35.217.51.0/24
|
||||||
|
35.217.52.117
|
||||||
|
35.217.53.128/25
|
||||||
|
35.217.54.0/25
|
||||||
|
35.217.55.96/27
|
||||||
|
35.217.56.6
|
||||||
|
35.217.57.184
|
||||||
|
35.217.58.0/24
|
||||||
|
35.217.59.64/26
|
||||||
|
35.217.60.0/24
|
||||||
|
35.217.61.128/25
|
||||||
|
35.217.62.0/24
|
||||||
|
35.217.63.128/25
|
||||||
|
35.219.225.149
|
||||||
|
35.219.226.57
|
||||||
|
35.219.227.0/24
|
||||||
|
35.219.228.37
|
||||||
|
35.219.229.128/25
|
||||||
|
35.219.230.0/23
|
||||||
|
35.219.235.0/24
|
||||||
|
35.219.236.198
|
||||||
|
35.219.238.115
|
||||||
|
35.219.239.0/24
|
||||||
|
35.219.241.0/24
|
||||||
|
35.219.242.221
|
||||||
|
35.219.243.191
|
||||||
|
35.219.244.1
|
||||||
|
35.219.245.0/24
|
||||||
|
35.219.246.159
|
||||||
|
35.219.247.0/26
|
||||||
|
35.219.248.0/24
|
||||||
|
35.219.249.126
|
||||||
|
35.219.251.186
|
||||||
|
35.219.252.0/23
|
||||||
|
35.219.254.0/24
|
||||||
|
64.233.161.207
|
||||||
|
64.233.162.207
|
||||||
|
64.233.163.207
|
||||||
|
64.233.164.207
|
||||||
|
64.233.165.207
|
||||||
|
66.22.196.0/26
|
||||||
|
66.22.197.0/24
|
||||||
|
66.22.198.0/26
|
||||||
|
66.22.199.0/24
|
||||||
|
66.22.200.0/26
|
||||||
|
66.22.202.0/26
|
||||||
|
66.22.204.0/24
|
||||||
|
66.22.206.0/24
|
||||||
|
66.22.208.0/25
|
||||||
|
66.22.210.0/26
|
||||||
|
66.22.212.0/24
|
||||||
|
66.22.214.0/24
|
||||||
|
66.22.216.0/23
|
||||||
|
66.22.220.0/25
|
||||||
|
66.22.221.0/24
|
||||||
|
66.22.222.0/23
|
||||||
|
66.22.224.0/25
|
||||||
|
66.22.225.0/26
|
||||||
|
66.22.226.0/25
|
||||||
|
66.22.227.0/25
|
||||||
|
66.22.228.0/22
|
||||||
|
66.22.233.0/24
|
||||||
|
66.22.234.0/24
|
||||||
|
66.22.236.0/23
|
||||||
|
66.22.238.0/24
|
||||||
|
66.22.240.0/22
|
||||||
|
66.22.244.0/23
|
||||||
|
66.22.248.0/24
|
||||||
|
74.125.131.207
|
||||||
|
74.125.205.207
|
||||||
|
104.17.51.93
|
||||||
|
104.17.117.93
|
||||||
|
104.18.4.161
|
||||||
|
104.18.5.161
|
||||||
|
104.18.8.105
|
||||||
|
104.18.9.105
|
||||||
|
104.18.30.128
|
||||||
|
104.18.31.128
|
||||||
|
104.21.2.204
|
||||||
|
104.21.25.51
|
||||||
|
104.21.40.151
|
||||||
|
104.21.59.128
|
||||||
|
104.21.72.221
|
||||||
|
104.21.82.160
|
||||||
|
108.177.14.207
|
||||||
|
138.128.140.240/28
|
||||||
|
142.250.150.207
|
||||||
|
142.251.1.207
|
||||||
|
162.159.128.232/30
|
||||||
|
162.159.129.232/30
|
||||||
|
162.159.130.232/30
|
||||||
|
162.159.133.232/30
|
||||||
|
162.159.134.232/30
|
||||||
|
162.159.135.232/30
|
||||||
|
162.159.136.232/30
|
||||||
|
162.159.137.232/30
|
||||||
|
162.159.138.232/30
|
||||||
|
172.65.202.19
|
||||||
|
172.66.41.34
|
||||||
|
172.66.42.222
|
||||||
|
172.67.152.224/28
|
||||||
|
172.67.155.163
|
||||||
|
172.67.159.89
|
||||||
|
172.67.177.131
|
||||||
|
172.67.222.182
|
||||||
|
173.194.73.207
|
||||||
|
173.194.220.207
|
||||||
|
173.194.221.207
|
||||||
|
173.194.222.207
|
||||||
|
188.114.96.2
|
||||||
|
188.114.97.2
|
||||||
|
188.114.98.224
|
||||||
|
188.114.99.224
|
||||||
|
204.11.56.48
|
||||||
|
209.85.233.207
|
BIN
binaries/win64/zapret-winws/killall.exe
Normal file
BIN
binaries/win64/zapret-winws/killall.exe
Normal file
Binary file not shown.
13
binaries/win64/zapret-winws/list-youtube.txt
Normal file
13
binaries/win64/zapret-winws/list-youtube.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
googlevideo.com
|
||||||
|
youtubei.googleapis.com
|
||||||
|
ytimg.com
|
||||||
|
yt3.ggpht.com
|
||||||
|
yt4.ggpht.com
|
||||||
|
youtube.com
|
||||||
|
youtubeembeddedplayer.googleapis.com
|
||||||
|
ytimg.l.google.com
|
||||||
|
jnn-pa.googleapis.com
|
||||||
|
youtube-nocookie.com
|
||||||
|
youtube-ui.l.google.com
|
||||||
|
yt-video-upload.l.google.com
|
||||||
|
wide-youtube.l.google.com
|
9
binaries/win64/zapret-winws/preset_russia.cmd
Normal file
9
binaries/win64/zapret-winws/preset_russia.cmd
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
start "zapret: http,https,quic" /min "%~dp0winws.exe" ^
|
||||||
|
--wf-tcp=80,443 --wf-udp=443,50000-50099 ^
|
||||||
|
--filter-udp=50000-50099 --ipset="%~dp0ipset-discord.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=n2 --new ^
|
||||||
|
--filter-udp=50000-50099 --new ^
|
||||||
|
--filter-udp=443 --hostlist="%~dp0list-youtube.txt" --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-fake-quic="%~dp0quic_initial_www_google_com.bin" --new ^
|
||||||
|
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=11 --new ^
|
||||||
|
--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
|
||||||
|
--filter-tcp=443 --hostlist="%~dp0list-youtube.txt" --dpi-desync=fake,split2 --dpi-desync-repeats=11 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%~dp0tls_clienthello_www_google_com.bin" --new ^
|
||||||
|
--dpi-desync=fake,disorder2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig
|
@ -0,0 +1,9 @@
|
|||||||
|
start "zapret: http,https,quic" /min "%~dp0winws.exe" ^
|
||||||
|
--wf-tcp=80,443 --wf-udp=443,50000-50099 ^
|
||||||
|
--filter-udp=50000-50099 --ipset="%~dp0ipset-discord.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=n2 --new ^
|
||||||
|
--filter-udp=50000-50099 --new ^
|
||||||
|
--filter-udp=443 --hostlist="%~dp0list-youtube.txt" --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-fake-quic="%~dp0quic_initial_www_google_com.bin" --new ^
|
||||||
|
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=11 --new ^
|
||||||
|
--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --hostlist-auto="%~dp0autohostlist.txt" --new ^
|
||||||
|
--filter-tcp=443 --hostlist="%~dp0list-youtube.txt" --dpi-desync=fake,split2 --dpi-desync-repeats=11 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%~dp0tls_clienthello_www_google_com.bin" --new ^
|
||||||
|
--dpi-desync=fake,disorder2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --hostlist-auto="%~dp0autohostlist.txt"
|
BIN
binaries/win64/zapret-winws/quic_initial_www_google_com.bin
Normal file
BIN
binaries/win64/zapret-winws/quic_initial_www_google_com.bin
Normal file
Binary file not shown.
1
binaries/win64/zapret-winws/reload_lists.cmd
Normal file
1
binaries/win64/zapret-winws/reload_lists.cmd
Normal file
@ -0,0 +1 @@
|
|||||||
|
%~dp0killall -HUP winws
|
12
binaries/win64/zapret-winws/service_create.cmd
Normal file
12
binaries/win64/zapret-winws/service_create.cmd
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
set ARGS=--wf-l3=ipv4,ipv6 --wf-tcp=80,443 --dpi-desync=fake,split --dpi-desync-ttl=7 --dpi-desync-fooling=md5sig
|
||||||
|
call :srvinst winws1
|
||||||
|
rem set ARGS=--wf-l3=ipv4,ipv6 --wf-udp=443 --dpi-desync=fake
|
||||||
|
rem call :srvinst winws2
|
||||||
|
goto :eof
|
||||||
|
|
||||||
|
:srvinst
|
||||||
|
net stop %1
|
||||||
|
sc delete %1
|
||||||
|
sc create %1 binPath= "\"%~dp0winws.exe\" %ARGS%" DisplayName= "zapret DPI bypass : %1" start= auto
|
||||||
|
sc description %1 "zapret DPI bypass software"
|
||||||
|
sc start %1
|
7
binaries/win64/zapret-winws/service_del.cmd
Normal file
7
binaries/win64/zapret-winws/service_del.cmd
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
call :srvdel winws1
|
||||||
|
rem call :srvdel winws2
|
||||||
|
goto :eof
|
||||||
|
|
||||||
|
:srvdel
|
||||||
|
net stop %1
|
||||||
|
sc delete %1
|
2
binaries/win64/zapret-winws/service_start.cmd
Normal file
2
binaries/win64/zapret-winws/service_start.cmd
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
sc start winws1
|
||||||
|
rem sc start winws2
|
2
binaries/win64/zapret-winws/service_stop.cmd
Normal file
2
binaries/win64/zapret-winws/service_stop.cmd
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
net stop winws1
|
||||||
|
rem net stop winws2
|
4
binaries/win64/zapret-winws/task_create.cmd
Normal file
4
binaries/win64/zapret-winws/task_create.cmd
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
set WINWS1=--wf-l3=ipv4,ipv6 --wf-tcp=80,443 --dpi-desync=fake,split --dpi-desync-ttl=7 --dpi-desync-fooling=md5sig
|
||||||
|
schtasks /Create /F /TN winws1 /NP /RU "" /SC onstart /TR "\"%~dp0winws.exe\" %WINWS1%"
|
||||||
|
rem set WINWS2=--wf-l3=ipv4,ipv6 --wf-udp=443 --dpi-desync=fake
|
||||||
|
rem schtasks /Create /F /TN winws2 /NP /RU "" /SC onstart /TR "\"%~dp0winws.exe\" %WINWS2%"
|
4
binaries/win64/zapret-winws/task_remove.cmd
Normal file
4
binaries/win64/zapret-winws/task_remove.cmd
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
schtasks /End /TN winws1
|
||||||
|
schtasks /Delete /TN winws1 /F
|
||||||
|
rem schtasks /End /TN winws2
|
||||||
|
rem schtasks /Delete /TN winws2 /F
|
2
binaries/win64/zapret-winws/task_start.cmd
Normal file
2
binaries/win64/zapret-winws/task_start.cmd
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
schtasks /Run /TN winws1
|
||||||
|
rem schtasks /Run /TN winws2
|
2
binaries/win64/zapret-winws/task_stop.cmd
Normal file
2
binaries/win64/zapret-winws/task_stop.cmd
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
schtasks /End /TN winws1
|
||||||
|
rem schtasks /End /TN winws2
|
BIN
binaries/win64/zapret-winws/tls_clienthello_www_google_com.bin
Normal file
BIN
binaries/win64/zapret-winws/tls_clienthello_www_google_com.bin
Normal file
Binary file not shown.
BIN
binaries/win64/zapret-winws/winws.exe
Normal file
BIN
binaries/win64/zapret-winws/winws.exe
Normal file
Binary file not shown.
BIN
binaries/x86/ip2net
Executable file
BIN
binaries/x86/ip2net
Executable file
Binary file not shown.
BIN
binaries/x86/mdig
Executable file
BIN
binaries/x86/mdig
Executable file
Binary file not shown.
BIN
binaries/x86/nfqws
Executable file
BIN
binaries/x86/nfqws
Executable file
Binary file not shown.
BIN
binaries/x86/tpws
Executable file
BIN
binaries/x86/tpws
Executable file
Binary file not shown.
BIN
binaries/x86_64/ip2net
Executable file
BIN
binaries/x86_64/ip2net
Executable file
Binary file not shown.
BIN
binaries/x86_64/mdig
Executable file
BIN
binaries/x86_64/mdig
Executable file
Binary file not shown.
BIN
binaries/x86_64/nfqws
Executable file
BIN
binaries/x86_64/nfqws
Executable file
Binary file not shown.
BIN
binaries/x86_64/tpws
Executable file
BIN
binaries/x86_64/tpws
Executable file
Binary file not shown.
BIN
binaries/x86_64/tpws_wsl.tgz
Normal file
BIN
binaries/x86_64/tpws_wsl.tgz
Normal file
Binary file not shown.
694
blockcheck.sh
694
blockcheck.sh
File diff suppressed because it is too large
Load Diff
@ -60,22 +60,11 @@ starts_with()
|
|||||||
esac
|
esac
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
extract_arg()
|
|
||||||
{
|
|
||||||
# $1 - arg number
|
|
||||||
# $2,$3,... - args
|
|
||||||
local n=$1
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
shift
|
|
||||||
[ $n -eq 1 ] && { echo "$1"; return 0; }
|
|
||||||
n=$(($n-1))
|
|
||||||
done
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
find_str_in_list()
|
find_str_in_list()
|
||||||
{
|
{
|
||||||
# $1 - string
|
# $1 - string
|
||||||
# $2 - space separated values
|
# $2 - space separated values
|
||||||
|
|
||||||
local v
|
local v
|
||||||
[ -n "$1" ] && {
|
[ -n "$1" ] && {
|
||||||
for v in $2; do
|
for v in $2; do
|
||||||
@ -241,7 +230,7 @@ fix_sbin_path()
|
|||||||
# it can calculate floating point expr
|
# it can calculate floating point expr
|
||||||
calc()
|
calc()
|
||||||
{
|
{
|
||||||
LC_ALL=C awk "BEGIN { print $*}";
|
awk "BEGIN { print $*}";
|
||||||
}
|
}
|
||||||
|
|
||||||
fsleep_setup()
|
fsleep_setup()
|
||||||
@ -318,27 +307,18 @@ setup_md5()
|
|||||||
exists $MD5 || MD5=md5
|
exists $MD5 || MD5=md5
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_random()
|
|
||||||
{
|
|
||||||
[ -n "$RCUT" ] && return
|
|
||||||
RCUT="cut -c 1-17"
|
|
||||||
# some shells can operate with 32 bit signed int
|
|
||||||
[ $((0x100000000)) = 0 ] && RCUT="cut -c 1-9"
|
|
||||||
}
|
|
||||||
|
|
||||||
random()
|
random()
|
||||||
{
|
{
|
||||||
# $1 - min, $2 - max
|
# $1 - min, $2 - max
|
||||||
local r rs
|
local r rs
|
||||||
setup_md5
|
setup_md5
|
||||||
setup_random
|
|
||||||
if [ -c /dev/urandom ]; then
|
if [ -c /dev/urandom ]; then
|
||||||
read rs </dev/urandom
|
read rs </dev/urandom
|
||||||
else
|
else
|
||||||
rs="$RANDOM$RANDOM$(date)"
|
rs="$RANDOM$RANDOM$(date)"
|
||||||
fi
|
fi
|
||||||
# shells use signed int64
|
# shells use signed int64
|
||||||
r=1$(echo $rs | $MD5 | sed 's/[^0-9]//g' | $RCUT)
|
r=1$(echo $rs | $MD5 | sed 's/[^0-9]//g' | cut -c 1-17)
|
||||||
echo $(( ($r % ($2-$1+1)) + $1 ))
|
echo $(( ($r % ($2-$1+1)) + $1 ))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,7 +400,6 @@ check_bad_ws_options()
|
|||||||
# $2 - nfqws/tpws options
|
# $2 - nfqws/tpws options
|
||||||
if [ "$1" = 1 ] && has_bad_ws_options "$2"; then
|
if [ "$1" = 1 ] && has_bad_ws_options "$2"; then
|
||||||
echo "!!! REFUSING TO USE BAD OPTIONS : $2"
|
echo "!!! REFUSING TO USE BAD OPTIONS : $2"
|
||||||
help_bad_ws_options
|
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
@ -429,7 +408,8 @@ check_bad_ws_options()
|
|||||||
help_bad_ws_options()
|
help_bad_ws_options()
|
||||||
{
|
{
|
||||||
echo "WARNING ! you have specified --ipset option"
|
echo "WARNING ! you have specified --ipset option"
|
||||||
echo "WARNING ! it would work but on ${UNAME:-$(uname)} it's not the best option"
|
echo "WARNING ! it would work but on $UNAME it's not the best option"
|
||||||
echo "WARNING ! you should use kernel mode sets. they are much more efficient."
|
echo "WARNING ! you should use kernel mode sets. they are much more efficient."
|
||||||
echo "WARNING ! to use ipsets you have to write your own custom script"
|
echo "WARNING ! to use ipsets you have to write your own custom script"
|
||||||
|
echo "WARNING ! installer will stop here to prevent distribution of easy to use but bad copy-paste solutions"
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,6 @@ custom_runner()
|
|||||||
# $1 - function name
|
# $1 - function name
|
||||||
# $2+ - params
|
# $2+ - params
|
||||||
|
|
||||||
[ "$DISABLE_CUSTOM" = 1 ] && return 0
|
|
||||||
|
|
||||||
local n script FUNC=$1
|
local n script FUNC=$1
|
||||||
|
|
||||||
shift
|
shift
|
||||||
|
@ -1,28 +1,13 @@
|
|||||||
require_root()
|
require_root()
|
||||||
{
|
{
|
||||||
local exe preserve_env
|
local exe
|
||||||
echo \* checking privileges
|
echo \* checking privileges
|
||||||
[ $(id -u) -ne "0" ] && {
|
[ $(id -u) -ne "0" ] && {
|
||||||
echo root is required
|
echo root is required
|
||||||
exe="$EXEDIR/$(basename "$0")"
|
exe="$EXEDIR/$(basename "$0")"
|
||||||
exists sudo && {
|
exists sudo && exec sudo sh "$exe"
|
||||||
echo elevating with sudo
|
exists su && exec su root -c "sh \"$exe\""
|
||||||
exec sudo -E sh "$exe"
|
|
||||||
}
|
|
||||||
exists su && {
|
|
||||||
echo elevating with su
|
|
||||||
case "$UNAME" in
|
|
||||||
Linux)
|
|
||||||
preserve_env="--preserve-environment"
|
|
||||||
;;
|
|
||||||
FreeBSD|OpenBSD|Darwin)
|
|
||||||
preserve_env="-m"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
exec su $preserve_env root -c "sh \"$exe\""
|
|
||||||
}
|
|
||||||
echo su or sudo not found
|
echo su or sudo not found
|
||||||
exitp 2
|
exitp 2
|
||||||
}
|
}
|
||||||
HAVE_ROOT=1
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
GET_LIST_PREFIX=/ipset/get_
|
readonly GET_LIST_PREFIX=/ipset/get_
|
||||||
|
|
||||||
SYSTEMD_DIR=/lib/systemd
|
SYSTEMD_DIR=/lib/systemd
|
||||||
[ -d "$SYSTEMD_DIR" ] || SYSTEMD_DIR=/usr/lib/systemd
|
[ -d "$SYSTEMD_DIR" ] || SYSTEMD_DIR=/usr/lib/systemd
|
||||||
@ -140,7 +140,7 @@ echo_var()
|
|||||||
eval v="\$$1"
|
eval v="\$$1"
|
||||||
if find_str_in_list $1 "$EDITVAR_NEWLINE_VARS"; then
|
if find_str_in_list $1 "$EDITVAR_NEWLINE_VARS"; then
|
||||||
echo "$1=\""
|
echo "$1=\""
|
||||||
echo "$v\"" | tr '\n' ' ' | tr -d '\r' | sed -e 's/^ *//' -e 's/ *$//' -e "s/$EDITVAR_NEWLINE_DELIMETER /$EDITVAR_NEWLINE_DELIMETER\n/g"
|
echo "$v\"" | sed "s/$EDITVAR_NEWLINE_DELIMETER /$EDITVAR_NEWLINE_DELIMETER\n/g"
|
||||||
else
|
else
|
||||||
if contains "$v" " "; then
|
if contains "$v" " "; then
|
||||||
echo $1=\"$v\"
|
echo $1=\"$v\"
|
||||||
@ -170,7 +170,6 @@ list_vars()
|
|||||||
echo_var $1
|
echo_var $1
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
echo
|
|
||||||
}
|
}
|
||||||
|
|
||||||
openrc_test()
|
openrc_test()
|
||||||
@ -191,7 +190,6 @@ check_system()
|
|||||||
|
|
||||||
get_fwtype
|
get_fwtype
|
||||||
OPENWRT_FW3=
|
OPENWRT_FW3=
|
||||||
OPENWRT_FW4=
|
|
||||||
|
|
||||||
local info
|
local info
|
||||||
UNAME=$(uname)
|
UNAME=$(uname)
|
||||||
@ -203,35 +201,27 @@ check_system()
|
|||||||
# some distros include systemctl without systemd
|
# some distros include systemctl without systemd
|
||||||
if [ -d "$SYSTEMD_DIR" ] && [ -x "$SYSTEMCTL" ] && [ "$INIT" = "systemd" ]; then
|
if [ -d "$SYSTEMD_DIR" ] && [ -x "$SYSTEMCTL" ] && [ "$INIT" = "systemd" ]; then
|
||||||
SYSTEM=systemd
|
SYSTEM=systemd
|
||||||
elif [ -f "/etc/openwrt_release" ] && exists opkg || exists apk && exists uci && [ "$INIT" = "procd" ] ; then
|
elif [ -f "/etc/openwrt_release" ] && exists opkg && exists uci && [ "$INIT" = "procd" ] ; then
|
||||||
|
{
|
||||||
SYSTEM=openwrt
|
SYSTEM=openwrt
|
||||||
OPENWRT_PACKAGER=opkg
|
|
||||||
OPENWRT_PACKAGER_INSTALL="opkg install"
|
|
||||||
OPENWRT_PACKAGER_UPDATE="opkg update"
|
|
||||||
exists apk && {
|
|
||||||
OPENWRT_PACKAGER=apk
|
|
||||||
OPENWRT_PACKAGER_INSTALL="apk add"
|
|
||||||
OPENWRT_PACKAGER_UPDATE=
|
|
||||||
}
|
|
||||||
info="package manager $OPENWRT_PACKAGER\n"
|
|
||||||
if openwrt_fw3 ; then
|
if openwrt_fw3 ; then
|
||||||
OPENWRT_FW3=1
|
OPENWRT_FW3=1
|
||||||
info="${info}firewall fw3"
|
info="openwrt firewall uses fw3"
|
||||||
if is_ipt_flow_offload_avail; then
|
if is_ipt_flow_offload_avail; then
|
||||||
info="$info. hardware flow offloading requires iptables."
|
info="$info. hardware flow offloading requires iptables."
|
||||||
else
|
else
|
||||||
info="$info. flow offloading unavailable."
|
info="$info. flow offloading unavailable."
|
||||||
fi
|
fi
|
||||||
elif openwrt_fw4; then
|
elif openwrt_fw4; then
|
||||||
OPENWRT_FW4=1
|
info="openwrt firewall uses fw4. flow offloading requires nftables."
|
||||||
info="${info}firewall fw4. flow offloading requires nftables."
|
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
elif openrc_test; then
|
elif openrc_test; then
|
||||||
SYSTEM=openrc
|
SYSTEM=openrc
|
||||||
else
|
else
|
||||||
echo system is not either systemd, openrc or openwrt based
|
echo system is not either systemd, openrc or openwrt based
|
||||||
echo easy installer can set up config settings but can\'t configure auto start
|
echo easy installer can set up config settings but can\'t configure auto start
|
||||||
echo you have to do it manually. check readme.md for manual setup info.
|
echo you have to do it manually. check readme.txt for manual setup info.
|
||||||
if [ -n "$1" ] || ask_yes_no N "do you want to continue"; then
|
if [ -n "$1" ] || ask_yes_no N "do you want to continue"; then
|
||||||
SYSTEM=linux
|
SYSTEM=linux
|
||||||
else
|
else
|
||||||
@ -242,11 +232,11 @@ check_system()
|
|||||||
elif [ "$UNAME" = "Darwin" ]; then
|
elif [ "$UNAME" = "Darwin" ]; then
|
||||||
SYSTEM=macos
|
SYSTEM=macos
|
||||||
else
|
else
|
||||||
echo easy installer only supports Linux and MacOS. check readme.md for supported systems and manual setup info.
|
echo easy installer only supports Linux and MacOS. check readme.txt for supported systems and manual setup info.
|
||||||
exitp 5
|
exitp 5
|
||||||
fi
|
fi
|
||||||
echo system is based on $SYSTEM
|
echo system is based on $SYSTEM
|
||||||
[ -n "$info" ] && printf "${info}\n"
|
[ -n "$info" ] && echo $info
|
||||||
}
|
}
|
||||||
|
|
||||||
get_free_space_mb()
|
get_free_space_mb()
|
||||||
@ -430,21 +420,14 @@ check_kmod()
|
|||||||
}
|
}
|
||||||
check_package_exists_openwrt()
|
check_package_exists_openwrt()
|
||||||
{
|
{
|
||||||
[ -n "$($OPENWRT_PACKAGER list $1)" ]
|
[ -n "$(opkg list $1)" ]
|
||||||
}
|
}
|
||||||
check_package_openwrt()
|
check_package_openwrt()
|
||||||
{
|
{
|
||||||
case $OPENWRT_PACKAGER in
|
|
||||||
opkg)
|
|
||||||
[ -n "$(opkg list-installed $1)" ] && return 0
|
[ -n "$(opkg list-installed $1)" ] && return 0
|
||||||
local what="$(opkg whatprovides $1 | tail -n +2 | head -n 1)"
|
local what="$(opkg whatprovides $1 | tail -n +2 | head -n 1)"
|
||||||
[ -n "$what" ] || return 1
|
[ -n "$what" ] || return 1
|
||||||
[ -n "$(opkg list-installed $what)" ]
|
[ -n "$(opkg list-installed $what)" ]
|
||||||
;;
|
|
||||||
apk)
|
|
||||||
apk info -e $1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
}
|
||||||
check_packages_openwrt()
|
check_packages_openwrt()
|
||||||
{
|
{
|
||||||
@ -533,8 +516,9 @@ restart_openwrt_firewall()
|
|||||||
|
|
||||||
local FW=fw4
|
local FW=fw4
|
||||||
[ -n "$OPENWRT_FW3" ] && FW=fw3
|
[ -n "$OPENWRT_FW3" ] && FW=fw3
|
||||||
exists $FW && $FW -q restart || {
|
$FW -q restart || {
|
||||||
echo could not restart firewall $FW
|
echo could not restart firewall $FW
|
||||||
|
exitp 30
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
remove_openwrt_firewall()
|
remove_openwrt_firewall()
|
||||||
@ -617,17 +601,11 @@ write_config_var()
|
|||||||
replace_var_def $1 "$M" "$ZAPRET_CONFIG"
|
replace_var_def $1 "$M" "$ZAPRET_CONFIG"
|
||||||
}
|
}
|
||||||
|
|
||||||
no_prereq_exit()
|
|
||||||
{
|
|
||||||
echo could not install prerequisites
|
|
||||||
exitp 6
|
|
||||||
}
|
|
||||||
check_prerequisites_linux()
|
check_prerequisites_linux()
|
||||||
{
|
{
|
||||||
echo \* checking prerequisites
|
echo \* checking prerequisites
|
||||||
|
|
||||||
local s cmd PKGS UTILS req="curl curl"
|
local s cmd PKGS UTILS req="curl curl"
|
||||||
local APTGET DNF YUM PACMAN ZYPPER EOPKG APK
|
|
||||||
case "$FWTYPE" in
|
case "$FWTYPE" in
|
||||||
iptables)
|
iptables)
|
||||||
req="$req iptables iptables ip6tables iptables ipset ipset"
|
req="$req iptables iptables ip6tables iptables ipset ipset"
|
||||||
@ -656,7 +634,6 @@ check_prerequisites_linux()
|
|||||||
echo packages required : $PKGS
|
echo packages required : $PKGS
|
||||||
|
|
||||||
APTGET=$(whichq apt-get)
|
APTGET=$(whichq apt-get)
|
||||||
DNF=$(whichq dnf)
|
|
||||||
YUM=$(whichq yum)
|
YUM=$(whichq yum)
|
||||||
PACMAN=$(whichq pacman)
|
PACMAN=$(whichq pacman)
|
||||||
ZYPPER=$(whichq zypper)
|
ZYPPER=$(whichq zypper)
|
||||||
@ -664,23 +641,39 @@ check_prerequisites_linux()
|
|||||||
APK=$(whichq apk)
|
APK=$(whichq apk)
|
||||||
if [ -x "$APTGET" ] ; then
|
if [ -x "$APTGET" ] ; then
|
||||||
"$APTGET" update
|
"$APTGET" update
|
||||||
"$APTGET" install -y --no-install-recommends $PKGS dnsutils || no_prereq_exit
|
"$APTGET" install -y --no-install-recommends $PKGS dnsutils || {
|
||||||
elif [ -x "$DNF" ] ; then
|
echo could not install prerequisites
|
||||||
"$DNF" -y install $PKGS || no_prereq_exit
|
exitp 6
|
||||||
|
}
|
||||||
elif [ -x "$YUM" ] ; then
|
elif [ -x "$YUM" ] ; then
|
||||||
"$YUM" -y install $PKGS || no_prereq_exit
|
"$YUM" -y install $PKGS || {
|
||||||
|
echo could not install prerequisites
|
||||||
|
exitp 6
|
||||||
|
}
|
||||||
elif [ -x "$PACMAN" ] ; then
|
elif [ -x "$PACMAN" ] ; then
|
||||||
"$PACMAN" -Syy
|
"$PACMAN" -Syy
|
||||||
"$PACMAN" --noconfirm -S $PKGS || no_prereq_exit
|
"$PACMAN" --noconfirm -S $PKGS || {
|
||||||
|
echo could not install prerequisites
|
||||||
|
exitp 6
|
||||||
|
}
|
||||||
elif [ -x "$ZYPPER" ] ; then
|
elif [ -x "$ZYPPER" ] ; then
|
||||||
"$ZYPPER" --non-interactive install $PKGS || no_prereq_exit
|
"$ZYPPER" --non-interactive install $PKGS || {
|
||||||
|
echo could not install prerequisites
|
||||||
|
exitp 6
|
||||||
|
}
|
||||||
elif [ -x "$EOPKG" ] ; then
|
elif [ -x "$EOPKG" ] ; then
|
||||||
"$EOPKG" -y install $PKGS || no_prereq_exit
|
"$EOPKG" -y install $PKGS || {
|
||||||
|
echo could not install prerequisites
|
||||||
|
exitp 6
|
||||||
|
}
|
||||||
elif [ -x "$APK" ] ; then
|
elif [ -x "$APK" ] ; then
|
||||||
"$APK" update
|
"$APK" update
|
||||||
# for alpine
|
# for alpine
|
||||||
[ "$FWTYPE" = iptables ] && [ -n "$($APK list ip6tables)" ] && PKGS="$PKGS ip6tables"
|
[ "$FWTYPE" = iptables ] && [ -n "$($APK list ip6tables)" ] && PKGS="$PKGS ip6tables"
|
||||||
"$APK" add $PKGS || no_prereq_exit
|
"$APK" add $PKGS || {
|
||||||
|
echo could not install prerequisites
|
||||||
|
exitp 6
|
||||||
|
}
|
||||||
else
|
else
|
||||||
echo supported package manager not found
|
echo supported package manager not found
|
||||||
echo you must manually install : $UTILS
|
echo you must manually install : $UTILS
|
||||||
@ -689,59 +682,16 @@ check_prerequisites_linux()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
removable_pkgs_openwrt()
|
|
||||||
{
|
|
||||||
local pkg PKGS2
|
|
||||||
[ -n "$OPENWRT_FW4" ] && PKGS2="$PKGS2 iptables-zz-legacy iptables ip6tables-zz-legacy ip6tables"
|
|
||||||
[ -n "$OPENWRT_FW3" ] && PKGS2="$PKGS2 nftables-json nftables-nojson nftables"
|
|
||||||
PKGS=
|
|
||||||
for pkg in $PKGS2; do
|
|
||||||
check_package_exists_openwrt $pkg && PKGS="${PKGS:+$PKGS }$pkg"
|
|
||||||
done
|
|
||||||
PKGS="ipset iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ip6tables-mod-nat ip6tables-extra kmod-nft-queue gzip coreutils-sort coreutils-sleep curl $PKGS"
|
|
||||||
}
|
|
||||||
|
|
||||||
openwrt_fix_broken_apk_uninstall_scripts()
|
|
||||||
{
|
|
||||||
# at least in early snapshots with apk removing gnu gzip, sort, ... does not restore links to busybox
|
|
||||||
# system may become unusable
|
|
||||||
exists sort || { echo fixing missing sort; ln -fs /bin/busybox /usr/bin/sort; }
|
|
||||||
exists gzip || { echo fixing missing gzip; ln -fs /bin/busybox /bin/gzip; }
|
|
||||||
exists sleep || { echo fixing missing sleep; ln -fs /bin/busybox /bin/sleep; }
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_extra_pkgs_openwrt()
|
|
||||||
{
|
|
||||||
local PKGS
|
|
||||||
echo \* remove dependencies
|
|
||||||
removable_pkgs_openwrt
|
|
||||||
echo these packages may have been installed by install_easy.sh : $PKGS
|
|
||||||
ask_yes_no N "do you want to remove them" && {
|
|
||||||
case $OPENWRT_PACKAGER in
|
|
||||||
opkg)
|
|
||||||
opkg remove --autoremove $PKGS
|
|
||||||
;;
|
|
||||||
apk)
|
|
||||||
apk del $PKGS
|
|
||||||
openwrt_fix_broken_apk_uninstall_scripts
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
check_prerequisites_openwrt()
|
check_prerequisites_openwrt()
|
||||||
{
|
{
|
||||||
echo \* checking prerequisites
|
echo \* checking prerequisites
|
||||||
|
|
||||||
local PKGS="curl" UPD=0 local pkg_iptables
|
local PKGS="curl" UPD=0
|
||||||
|
|
||||||
case "$FWTYPE" in
|
case "$FWTYPE" in
|
||||||
iptables)
|
iptables)
|
||||||
pkg_iptables=iptables
|
PKGS="$PKGS ipset iptables iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra"
|
||||||
check_package_exists_openwrt iptables-zz-legacy && pkg_iptables=iptables-zz-legacy
|
[ "$DISABLE_IPV6" != "1" ] && PKGS="$PKGS ip6tables ip6tables-mod-nat ip6tables-extra"
|
||||||
PKGS="$PKGS ipset $pkg_iptables iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra"
|
|
||||||
check_package_exists_openwrt ip6tables-zz-legacy && pkg_iptables=ip6tables-zz-legacy
|
|
||||||
[ "$DISABLE_IPV6" = 1 ] || PKGS="$PKGS $pkg_iptables ip6tables-mod-nat ip6tables-extra"
|
|
||||||
;;
|
;;
|
||||||
nftables)
|
nftables)
|
||||||
PKGS="$PKGS nftables kmod-nft-nat kmod-nft-offload kmod-nft-queue"
|
PKGS="$PKGS nftables kmod-nft-nat kmod-nft-offload kmod-nft-queue"
|
||||||
@ -753,9 +703,9 @@ check_prerequisites_openwrt()
|
|||||||
else
|
else
|
||||||
echo \* installing prerequisites
|
echo \* installing prerequisites
|
||||||
|
|
||||||
$OPENWRT_PACKAGER_UPDATE
|
opkg update
|
||||||
UPD=1
|
UPD=1
|
||||||
$OPENWRT_PACKAGER_INSTALL $PKGS || {
|
opkg install $PKGS || {
|
||||||
echo could not install prerequisites
|
echo could not install prerequisites
|
||||||
exitp 6
|
exitp 6
|
||||||
}
|
}
|
||||||
@ -768,10 +718,10 @@ check_prerequisites_openwrt()
|
|||||||
echo installer can install GNU gzip but it requires about 100 Kb space
|
echo installer can install GNU gzip but it requires about 100 Kb space
|
||||||
if ask_yes_no N "do you want to install GNU gzip"; then
|
if ask_yes_no N "do you want to install GNU gzip"; then
|
||||||
[ "$UPD" = "0" ] && {
|
[ "$UPD" = "0" ] && {
|
||||||
$OPENWRT_PACKAGER_UPDATE
|
opkg update
|
||||||
UPD=1
|
UPD=1
|
||||||
}
|
}
|
||||||
$OPENWRT_PACKAGER_INSTALL --force-overwrite gzip
|
opkg install --force-overwrite gzip
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
is_linked_to_busybox sort && {
|
is_linked_to_busybox sort && {
|
||||||
@ -781,10 +731,10 @@ check_prerequisites_openwrt()
|
|||||||
echo installer can install GNU sort but it requires about 100 Kb space
|
echo installer can install GNU sort but it requires about 100 Kb space
|
||||||
if ask_yes_no N "do you want to install GNU sort"; then
|
if ask_yes_no N "do you want to install GNU sort"; then
|
||||||
[ "$UPD" = "0" ] && {
|
[ "$UPD" = "0" ] && {
|
||||||
$OPENWRT_PACKAGER_UPDATE
|
opkg update
|
||||||
UPD=1
|
UPD=1
|
||||||
}
|
}
|
||||||
$OPENWRT_PACKAGER_INSTALL --force-overwrite coreutils-sort
|
opkg install --force-overwrite coreutils-sort
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
[ "$FSLEEP" = 0 ] && is_linked_to_busybox sleep && {
|
[ "$FSLEEP" = 0 ] && is_linked_to_busybox sleep && {
|
||||||
@ -793,10 +743,10 @@ check_prerequisites_openwrt()
|
|||||||
echo if you want to speed up blockcheck install coreutils-sleep. it requires about 40 Kb space
|
echo if you want to speed up blockcheck install coreutils-sleep. it requires about 40 Kb space
|
||||||
if ask_yes_no N "do you want to install COREUTILS sleep"; then
|
if ask_yes_no N "do you want to install COREUTILS sleep"; then
|
||||||
[ "$UPD" = "0" ] && {
|
[ "$UPD" = "0" ] && {
|
||||||
$OPENWRT_PACKAGER_UPDATE
|
opkg update
|
||||||
UPD=1
|
UPD=1
|
||||||
}
|
}
|
||||||
$OPENWRT_PACKAGER_INSTALL --force-overwrite coreutils-sleep
|
opkg install --force-overwrite coreutils-sleep
|
||||||
fsleep_setup
|
fsleep_setup
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -829,37 +779,3 @@ select_fwtype()
|
|||||||
echo select firewall type :
|
echo select firewall type :
|
||||||
ask_list FWTYPE "iptables nftables" "$FWTYPE" && write_config_var FWTYPE
|
ask_list FWTYPE "iptables nftables" "$FWTYPE" && write_config_var FWTYPE
|
||||||
}
|
}
|
||||||
|
|
||||||
dry_run_tpws_()
|
|
||||||
{
|
|
||||||
local TPWS="$ZAPRET_BASE/tpws/tpws"
|
|
||||||
echo verifying tpws options
|
|
||||||
"$TPWS" --dry-run "$@"
|
|
||||||
}
|
|
||||||
dry_run_nfqws_()
|
|
||||||
{
|
|
||||||
local NFQWS="$ZAPRET_BASE/nfq/nfqws"
|
|
||||||
echo verifying nfqws options
|
|
||||||
"$NFQWS" --dry-run "$@"
|
|
||||||
}
|
|
||||||
dry_run_tpws()
|
|
||||||
{
|
|
||||||
[ "$TPWS_ENABLE" = 1 ] || return 0
|
|
||||||
local opt="$TPWS_OPT" port=${TPPORT_SOCKS:-988}
|
|
||||||
filter_apply_hostlist_target opt
|
|
||||||
dry_run_tpws_ --port=$port $opt
|
|
||||||
}
|
|
||||||
dry_run_tpws_socks()
|
|
||||||
{
|
|
||||||
[ "$TPWS_SOCKS_ENABLE" = 1 ] || return 0
|
|
||||||
local opt="$TPWS_SOCKS_OPT" port=${TPPORT:-987}
|
|
||||||
filter_apply_hostlist_target opt
|
|
||||||
dry_run_tpws_ --port=$port --socks $opt
|
|
||||||
}
|
|
||||||
dry_run_nfqws()
|
|
||||||
{
|
|
||||||
[ "$NFQWS_ENABLE" = 1 ] || return 0
|
|
||||||
local opt="$NFQWS_OPT" qn=${QNUM:-200}
|
|
||||||
filter_apply_hostlist_target opt
|
|
||||||
dry_run_nfqws_ --qnum=$qn $opt
|
|
||||||
}
|
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
std_ports
|
std_ports
|
||||||
ipt_connbytes="-m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes"
|
readonly ipt_connbytes="-m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes"
|
||||||
IPSET_EXCLUDE="-m set ! --match-set nozapret"
|
|
||||||
IPSET_EXCLUDE6="-m set ! --match-set nozapret6"
|
|
||||||
IPBAN_EXCLUDE="-m set ! --match-set ipban"
|
|
||||||
IPBAN_EXCLUDE6="-m set ! --match-set ipban6"
|
|
||||||
|
|
||||||
ipt()
|
ipt()
|
||||||
{
|
{
|
||||||
@ -136,7 +132,7 @@ _fw_tpws4()
|
|||||||
|
|
||||||
ipt_print_op $1 "$2" "tpws (port $3)"
|
ipt_print_op $1 "$2" "tpws (port $3)"
|
||||||
|
|
||||||
rule="$2 $IPSET_EXCLUDE dst $IPBAN_EXCLUDE dst -j DNAT --to $TPWS_LOCALHOST4:$3"
|
rule="$2 $IPSET_EXCLUDE dst -j DNAT --to $TPWS_LOCALHOST4:$3"
|
||||||
for i in $4 ; do
|
for i in $4 ; do
|
||||||
ipt_add_del $1 PREROUTING -t nat -i $i $rule
|
ipt_add_del $1 PREROUTING -t nat -i $i $rule
|
||||||
done
|
done
|
||||||
@ -164,7 +160,7 @@ _fw_tpws6()
|
|||||||
|
|
||||||
ipt_print_op $1 "$2" "tpws (port $3)" 6
|
ipt_print_op $1 "$2" "tpws (port $3)" 6
|
||||||
|
|
||||||
rule="$2 $IPSET_EXCLUDE6 dst $IPBAN_EXCLUDE6 dst"
|
rule="$2 $IPSET_EXCLUDE6 dst"
|
||||||
for i in $4 ; do
|
for i in $4 ; do
|
||||||
_dnat6_target $i DNAT6
|
_dnat6_target $i DNAT6
|
||||||
[ -n "$DNAT6" -a "$DNAT6" != "-" ] && ipt6_add_del $1 PREROUTING -t nat -i $i $rule -j DNAT --to [$DNAT6]:$3
|
[ -n "$DNAT6" -a "$DNAT6" != "-" ] && ipt6_add_del $1 PREROUTING -t nat -i $i $rule -j DNAT --to [$DNAT6]:$3
|
||||||
@ -353,37 +349,27 @@ ipt_do_nfqws_in_out()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zapret_do_firewall_standard_tpws_rules_ipt()
|
zapret_do_firewall_standard_rules_ipt()
|
||||||
{
|
{
|
||||||
# $1 - 1 - add, 0 - del
|
# $1 - 1 - add, 0 - del
|
||||||
|
|
||||||
local f4 f6
|
local f4 f6
|
||||||
|
|
||||||
[ "$TPWS_ENABLE" = 1 -a -n "$TPWS_PORTS" ] && {
|
[ "$TPWS_ENABLE" = 1 -a -n "$TPWS_PORTS" ] &&
|
||||||
|
{
|
||||||
f4="-p tcp -m multiport --dports $TPWS_PORTS_IPT"
|
f4="-p tcp -m multiport --dports $TPWS_PORTS_IPT"
|
||||||
f6=$f4
|
f6=$f4
|
||||||
filter_apply_ipset_target f4 f6
|
filter_apply_ipset_target f4 f6
|
||||||
fw_tpws $1 "$f4" "$f6" $TPPORT
|
fw_tpws $1 "$f4" "$f6" $TPPORT
|
||||||
}
|
}
|
||||||
}
|
[ "$NFQWS_ENABLE" = 1 ] &&
|
||||||
zapret_do_firewall_standard_nfqws_rules_ipt()
|
{
|
||||||
{
|
|
||||||
# $1 - 1 - add, 0 - del
|
|
||||||
|
|
||||||
[ "$NFQWS_ENABLE" = 1 ] && {
|
|
||||||
ipt_do_nfqws_in_out $1 tcp "$NFQWS_PORTS_TCP_IPT" "$NFQWS_TCP_PKT_OUT" "$NFQWS_TCP_PKT_IN"
|
ipt_do_nfqws_in_out $1 tcp "$NFQWS_PORTS_TCP_IPT" "$NFQWS_TCP_PKT_OUT" "$NFQWS_TCP_PKT_IN"
|
||||||
ipt_do_nfqws_in_out $1 tcp "$NFQWS_PORTS_TCP_KEEPALIVE_IPT" keepalive "$NFQWS_TCP_PKT_IN"
|
ipt_do_nfqws_in_out $1 tcp "$NFQWS_PORTS_TCP_KEEPALIVE_IPT" keepalive "$NFQWS_TCP_PKT_IN"
|
||||||
ipt_do_nfqws_in_out $1 udp "$NFQWS_PORTS_UDP_IPT" "$NFQWS_UDP_PKT_OUT" "$NFQWS_UDP_PKT_IN"
|
ipt_do_nfqws_in_out $1 udp "$NFQWS_PORTS_UDP_IPT" "$NFQWS_UDP_PKT_OUT" "$NFQWS_UDP_PKT_IN"
|
||||||
ipt_do_nfqws_in_out $1 udp "$NFQWS_PORTS_UDP_KEEPALIVE_IPT" keepalive "$NFQWS_UDP_PKT_IN"
|
ipt_do_nfqws_in_out $1 udp "$NFQWS_PORTS_UDP_KEEPALIVE_IPT" keepalive "$NFQWS_UDP_PKT_IN"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zapret_do_firewall_standard_rules_ipt()
|
|
||||||
{
|
|
||||||
# $1 - 1 - add, 0 - del
|
|
||||||
|
|
||||||
zapret_do_firewall_standard_tpws_rules_ipt $1
|
|
||||||
zapret_do_firewall_standard_nfqws_rules_ipt $1
|
|
||||||
}
|
|
||||||
|
|
||||||
zapret_do_firewall_rules_ipt()
|
zapret_do_firewall_rules_ipt()
|
||||||
{
|
{
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
standard_mode_tpws_socks()
|
|
||||||
{
|
|
||||||
# $1 - 1 - run, 0 - stop
|
|
||||||
local opt
|
|
||||||
[ "$TPWS_SOCKS_ENABLE" = 1 ] && {
|
|
||||||
opt="--port=$TPPORT_SOCKS $TPWS_SOCKS_OPT"
|
|
||||||
filter_apply_hostlist_target opt
|
|
||||||
do_tpws_socks $1 2 "$opt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
standard_mode_tpws()
|
|
||||||
{
|
|
||||||
# $1 - 1 - run, 0 - stop
|
|
||||||
local opt
|
|
||||||
[ "$TPWS_ENABLE" = 1 ] && check_bad_ws_options $1 "$TPWS_OPT" && {
|
|
||||||
opt="--port=$TPPORT $TPWS_OPT"
|
|
||||||
filter_apply_hostlist_target opt
|
|
||||||
do_tpws $1 1 "$opt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
standard_mode_nfqws()
|
|
||||||
{
|
|
||||||
# $1 - 1 - run, 0 - stop
|
|
||||||
local opt
|
|
||||||
[ "$NFQWS_ENABLE" = 1 ] && check_bad_ws_options $1 "$NFQWS_OPT" && {
|
|
||||||
opt="--qnum=$QNUM $NFQWS_OPT"
|
|
||||||
filter_apply_hostlist_target opt
|
|
||||||
do_nfqws $1 3 "$opt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
standard_mode_daemons()
|
|
||||||
{
|
|
||||||
# $1 - 1 - run, 0 - stop
|
|
||||||
|
|
||||||
standard_mode_tpws_socks $1
|
|
||||||
standard_mode_tpws $1
|
|
||||||
standard_mode_nfqws $1
|
|
||||||
}
|
|
||||||
zapret_do_daemons()
|
|
||||||
{
|
|
||||||
# $1 - 1 - run, 0 - stop
|
|
||||||
|
|
||||||
standard_mode_daemons $1
|
|
||||||
custom_runner zapret_custom_daemons $1
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
zapret_run_daemons()
|
|
||||||
{
|
|
||||||
zapret_do_daemons 1 "$@"
|
|
||||||
}
|
|
||||||
zapret_stop_daemons()
|
|
||||||
{
|
|
||||||
zapret_do_daemons 0 "$@"
|
|
||||||
}
|
|
@ -4,8 +4,6 @@
|
|||||||
# PREROUTING - can't DNAT to ::1. can DNAT to link local of -i interface or to any global addr
|
# PREROUTING - can't DNAT to ::1. can DNAT to link local of -i interface or to any global addr
|
||||||
# not a good idea to expose tpws to the world (bind to ::)
|
# not a good idea to expose tpws to the world (bind to ::)
|
||||||
|
|
||||||
# max wait time for the link local ipv6 on the LAN interface
|
|
||||||
LINKLOCAL_WAIT_SEC=${LINKLOCAL_WAIT_SEC:-5}
|
|
||||||
|
|
||||||
get_ipv6_linklocal()
|
get_ipv6_linklocal()
|
||||||
{
|
{
|
||||||
@ -127,13 +125,3 @@ resolve_lower_devices()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default_route_interfaces6()
|
|
||||||
{
|
|
||||||
sed -nre 's/^00000000000000000000000000000000 00 [0-9a-f]{32} [0-9a-f]{2} [0-9a-f]{32} [0-9a-f]{8} [0-9a-f]{8} [0-9a-f]{8} [0-9a-f]{8} +(.*)$/\1/p' /proc/net/ipv6_route | grep -v '^lo$' | sort -u | xargs
|
|
||||||
}
|
|
||||||
|
|
||||||
default_route_interfaces4()
|
|
||||||
{
|
|
||||||
sed -nre 's/^([^\t]+)\t00000000\t[0-9A-F]{8}\t[0-9A-F]{4}\t[0-9]+\t[0-9]+\t[0-9]+\t00000000.*$/\1/p' /proc/net/route | sort -u | xargs
|
|
||||||
}
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
HOSTLIST_MARKER="<HOSTLIST>"
|
readonly HOSTLIST_MARKER="<HOSTLIST>"
|
||||||
HOSTLIST_NOAUTO_MARKER="<HOSTLIST_NOAUTO>"
|
|
||||||
|
|
||||||
find_hostlists()
|
find_hostlists()
|
||||||
{
|
{
|
||||||
@ -25,9 +24,10 @@ filter_apply_hostlist_target()
|
|||||||
{
|
{
|
||||||
# $1 - var name of tpws or nfqws params
|
# $1 - var name of tpws or nfqws params
|
||||||
|
|
||||||
local v parm parm1 parm2 parm3 parm4 parm5 parm6 parm7 parm8 parmNA
|
local v parm parm1 parm2 parm3 parm4 parm5 parm6 parm7
|
||||||
eval v="\$$1"
|
eval v="\$$1"
|
||||||
if contains "$v" "$HOSTLIST_MARKER" || contains "$v" "$HOSTLIST_NOAUTO_MARKER"; then
|
contains "$v" "$HOSTLIST_MARKER" &&
|
||||||
|
{
|
||||||
[ "$MODE_FILTER" = hostlist -o "$MODE_FILTER" = autohostlist ] &&
|
[ "$MODE_FILTER" = hostlist -o "$MODE_FILTER" = autohostlist ] &&
|
||||||
{
|
{
|
||||||
find_hostlists
|
find_hostlists
|
||||||
@ -40,16 +40,13 @@ filter_apply_hostlist_target()
|
|||||||
parm5="${AUTOHOSTLIST_FAIL_THRESHOLD:+--hostlist-auto-fail-threshold=$AUTOHOSTLIST_FAIL_THRESHOLD}"
|
parm5="${AUTOHOSTLIST_FAIL_THRESHOLD:+--hostlist-auto-fail-threshold=$AUTOHOSTLIST_FAIL_THRESHOLD}"
|
||||||
parm6="${AUTOHOSTLIST_FAIL_TIME:+--hostlist-auto-fail-time=$AUTOHOSTLIST_FAIL_TIME}"
|
parm6="${AUTOHOSTLIST_FAIL_TIME:+--hostlist-auto-fail-time=$AUTOHOSTLIST_FAIL_TIME}"
|
||||||
parm7="${AUTOHOSTLIST_RETRANS_THRESHOLD:+--hostlist-auto-retrans-threshold=$AUTOHOSTLIST_RETRANS_THRESHOLD}"
|
parm7="${AUTOHOSTLIST_RETRANS_THRESHOLD:+--hostlist-auto-retrans-threshold=$AUTOHOSTLIST_RETRANS_THRESHOLD}"
|
||||||
parm8="--hostlist=$HOSTLIST_AUTO"
|
|
||||||
}
|
}
|
||||||
parm="$parm1${parm2:+ $parm2}${parm3:+ $parm3}${parm4:+ $parm4}${parm5:+ $parm5}${parm6:+ $parm6}${parm7:+ $parm7}"
|
parm="$parm1${parm2:+ $parm2}${parm3:+ $parm3}${parm4:+ $parm4}${parm5:+ $parm5}${parm6:+ $parm6}${parm7:+ $parm7}"
|
||||||
parmNA="$parm1${parm2:+ $parm2}${parm3:+ $parm3}${parm8:+ $parm8}"
|
|
||||||
}
|
}
|
||||||
v="$(replace_str $HOSTLIST_NOAUTO_MARKER "$parmNA" "$v")"
|
|
||||||
v="$(replace_str $HOSTLIST_MARKER "$parm" "$v")"
|
v="$(replace_str $HOSTLIST_MARKER "$parm" "$v")"
|
||||||
[ "$MODE_FILTER" = autohostlist -a "$AUTOHOSTLIST_DEBUGLOG" = 1 ] && {
|
[ "$MODE_FILTER" = autohostlist -a "$AUTOHOSTLIST_DEBUGLOG" = 1 ] && {
|
||||||
v="$v --hostlist-auto-debug=$HOSTLIST_AUTO_DEBUGLOG"
|
v="$v --hostlist-auto-debug=$HOSTLIST_AUTO_DEBUGLOG"
|
||||||
}
|
}
|
||||||
eval $1=\""$v"\"
|
eval $1=\""$v"\"
|
||||||
fi
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[ -n "$ZAPRET_NFT_TABLE" ] || ZAPRET_NFT_TABLE=zapret
|
[ -n "$ZAPRET_NFT_TABLE" ] || ZAPRET_NFT_TABLE=zapret
|
||||||
nft_connbytes="ct original packets"
|
readonly nft_connbytes="ct original packets"
|
||||||
|
|
||||||
# required for : nft -f -
|
# required for : nft -f -
|
||||||
create_dev_stdin
|
create_dev_stdin
|
||||||
@ -263,6 +263,28 @@ nft_add_flow_offload_exemption()
|
|||||||
[ "$DISABLE_IPV6" = "1" -o -z "$2" ] || nft_add_rule flow_offload oifname @wanif6 $2 ip6 daddr != @nozapret6 return comment \"$3\"
|
[ "$DISABLE_IPV6" = "1" -o -z "$2" ] || nft_add_rule flow_offload oifname @wanif6 $2 ip6 daddr != @nozapret6 return comment \"$3\"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nft_hw_offload_supported()
|
||||||
|
{
|
||||||
|
# $1,$2,... - interface names
|
||||||
|
local devices res=1
|
||||||
|
make_quoted_comma_list devices "$@"
|
||||||
|
[ -n "$devices" ] && devices="devices={$devices};"
|
||||||
|
nft add table ${ZAPRET_NFT_TABLE}_test && nft add flowtable ${ZAPRET_NFT_TABLE}_test ft "{ flags offload; $devices }" 2>/dev/null && res=0
|
||||||
|
nft delete table ${ZAPRET_NFT_TABLE}_test 2>/dev/null
|
||||||
|
return $res
|
||||||
|
}
|
||||||
|
|
||||||
|
nft_hw_offload_find_supported()
|
||||||
|
{
|
||||||
|
# $1,$2,... - interface names
|
||||||
|
local supported_list
|
||||||
|
while [ -n "$1" ]; do
|
||||||
|
nft_hw_offload_supported "$1" && append_separator_list supported_list ' ' '' "$1"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
echo $supported_list
|
||||||
|
}
|
||||||
|
|
||||||
nft_apply_flow_offloading()
|
nft_apply_flow_offloading()
|
||||||
{
|
{
|
||||||
# ft can be absent
|
# ft can be absent
|
||||||
@ -348,8 +370,9 @@ flush set inet $ZAPRET_NFT_TABLE lanif"
|
|||||||
nft_create_or_update_flowtable 'offload' 2>/dev/null
|
nft_create_or_update_flowtable 'offload' 2>/dev/null
|
||||||
# then add elements. some of them can cause error because unsupported
|
# then add elements. some of them can cause error because unsupported
|
||||||
for i in $ALLDEVS; do
|
for i in $ALLDEVS; do
|
||||||
# first try to add interface itself
|
if nft_hw_offload_supported $i; then
|
||||||
nft_create_or_update_flowtable 'offload' $i 2>/dev/null
|
nft_create_or_update_flowtable 'offload' $i
|
||||||
|
else
|
||||||
# bridge members must be added instead of the bridge itself
|
# bridge members must be added instead of the bridge itself
|
||||||
# some members may not support hw offload. example : lan1 lan2 lan3 support, wlan0 wlan1 - not
|
# some members may not support hw offload. example : lan1 lan2 lan3 support, wlan0 wlan1 - not
|
||||||
devs=$(resolve_lower_devices $i)
|
devs=$(resolve_lower_devices $i)
|
||||||
@ -357,6 +380,7 @@ flush set inet $ZAPRET_NFT_TABLE lanif"
|
|||||||
# do not display error if addition failed
|
# do not display error if addition failed
|
||||||
nft_create_or_update_flowtable 'offload' $j 2>/dev/null
|
nft_create_or_update_flowtable 'offload' $j 2>/dev/null
|
||||||
done
|
done
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -387,8 +411,8 @@ _nft_fw_tpws4()
|
|||||||
[ "$DISABLE_IPV4" = "1" -o -z "$1" ] || {
|
[ "$DISABLE_IPV4" = "1" -o -z "$1" ] || {
|
||||||
local filter="$1" port="$2"
|
local filter="$1" port="$2"
|
||||||
nft_print_op "$filter" "tpws (port $2)" 4
|
nft_print_op "$filter" "tpws (port $2)" 4
|
||||||
nft_insert_rule dnat_output skuid != $WS_USER ${3:+oifname @wanif }$filter ip daddr != @nozapret ip daddr != @ipban $FW_EXTRA_POST dnat ip to $TPWS_LOCALHOST4:$port
|
nft_insert_rule dnat_output skuid != $WS_USER ${3:+oifname @wanif }$filter ip daddr != @nozapret $FW_EXTRA_POST dnat ip to $TPWS_LOCALHOST4:$port
|
||||||
nft_insert_rule dnat_pre iifname @lanif $filter ip daddr != @nozapret ip daddr != @ipban $FW_EXTRA_POST dnat ip to $TPWS_LOCALHOST4:$port
|
nft_insert_rule dnat_pre iifname @lanif $filter ip daddr != @nozapret $FW_EXTRA_POST dnat ip to $TPWS_LOCALHOST4:$port
|
||||||
prepare_route_localnet
|
prepare_route_localnet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -402,9 +426,9 @@ _nft_fw_tpws6()
|
|||||||
[ "$DISABLE_IPV6" = "1" -o -z "$1" ] || {
|
[ "$DISABLE_IPV6" = "1" -o -z "$1" ] || {
|
||||||
local filter="$1" port="$2" DNAT6 i
|
local filter="$1" port="$2" DNAT6 i
|
||||||
nft_print_op "$filter" "tpws (port $port)" 6
|
nft_print_op "$filter" "tpws (port $port)" 6
|
||||||
nft_insert_rule dnat_output skuid != $WS_USER ${4:+oifname @wanif6 }$filter ip6 daddr != @nozapret6 ip6 daddr != @ipban6 $FW_EXTRA_POST dnat ip6 to [::1]:$port
|
nft_insert_rule dnat_output skuid != $WS_USER ${4:+oifname @wanif6 }$filter ip6 daddr != @nozapret6 $FW_EXTRA_POST dnat ip6 to [::1]:$port
|
||||||
[ -n "$3" ] && {
|
[ -n "$3" ] && {
|
||||||
nft_insert_rule dnat_pre $filter ip6 daddr != @nozapret6 ip6 daddr != @ipban6 $FW_EXTRA_POST dnat ip6 to iifname map @link_local:$port
|
nft_insert_rule dnat_pre $filter ip6 daddr != @nozapret6 $FW_EXTRA_POST dnat ip6 to iifname map @link_local:$port
|
||||||
for i in $3; do
|
for i in $3; do
|
||||||
_dnat6_target $i DNAT6
|
_dnat6_target $i DNAT6
|
||||||
# can be multiple tpws processes on different ports
|
# can be multiple tpws processes on different ports
|
||||||
@ -616,31 +640,25 @@ nft_apply_nfqws_in_out()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zapret_apply_firewall_standard_tpws_rules_nft()
|
zapret_apply_firewall_standard_rules_nft()
|
||||||
{
|
{
|
||||||
local f4 f6
|
local f4 f6
|
||||||
|
|
||||||
[ "$TPWS_ENABLE" = 1 -a -n "$TPWS_PORTS" ] && {
|
[ "$TPWS_ENABLE" = 1 -a -n "$TPWS_PORTS" ] &&
|
||||||
|
{
|
||||||
f4="tcp dport {$TPWS_PORTS}"
|
f4="tcp dport {$TPWS_PORTS}"
|
||||||
f6=$f4
|
f6=$f4
|
||||||
nft_filter_apply_ipset_target f4 f6
|
nft_filter_apply_ipset_target f4 f6
|
||||||
nft_fw_tpws "$f4" "$f6" $TPPORT
|
nft_fw_tpws "$f4" "$f6" $TPPORT
|
||||||
}
|
}
|
||||||
}
|
[ "$NFQWS_ENABLE" = 1 ] &&
|
||||||
zapret_apply_firewall_standard_nfqws_rules_nft()
|
{
|
||||||
{
|
|
||||||
[ "$NFQWS_ENABLE" = 1 ] && {
|
|
||||||
nft_apply_nfqws_in_out tcp "$NFQWS_PORTS_TCP" "$NFQWS_TCP_PKT_OUT" "$NFQWS_TCP_PKT_IN"
|
nft_apply_nfqws_in_out tcp "$NFQWS_PORTS_TCP" "$NFQWS_TCP_PKT_OUT" "$NFQWS_TCP_PKT_IN"
|
||||||
nft_apply_nfqws_in_out tcp "$NFQWS_PORTS_TCP_KEEPALIVE" keepalive "$NFQWS_TCP_PKT_IN"
|
nft_apply_nfqws_in_out tcp "$NFQWS_PORTS_TCP_KEEPALIVE" keepalive "$NFQWS_TCP_PKT_IN"
|
||||||
nft_apply_nfqws_in_out udp "$NFQWS_PORTS_UDP" "$NFQWS_UDP_PKT_OUT" "$NFQWS_UDP_PKT_IN"
|
nft_apply_nfqws_in_out udp "$NFQWS_PORTS_UDP" "$NFQWS_UDP_PKT_OUT" "$NFQWS_UDP_PKT_IN"
|
||||||
nft_apply_nfqws_in_out udp "$NFQWS_PORTS_UDP_KEEPALIVE" keepalive "$NFQWS_UDP_PKT_IN"
|
nft_apply_nfqws_in_out udp "$NFQWS_PORTS_UDP_KEEPALIVE" keepalive "$NFQWS_UDP_PKT_IN"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zapret_apply_firewall_standard_rules_nft()
|
|
||||||
{
|
|
||||||
zapret_apply_firewall_standard_tpws_rules_nft
|
|
||||||
zapret_apply_firewall_standard_nfqws_rules_nft
|
|
||||||
}
|
|
||||||
|
|
||||||
zapret_apply_firewall_rules_nft()
|
zapret_apply_firewall_rules_nft()
|
||||||
{
|
{
|
||||||
|
@ -50,22 +50,20 @@ DESYNC_MARK_POSTNAT=0x20000000
|
|||||||
TPWS_SOCKS_ENABLE=0
|
TPWS_SOCKS_ENABLE=0
|
||||||
# tpws socks listens on this port on localhost and LAN interfaces
|
# tpws socks listens on this port on localhost and LAN interfaces
|
||||||
TPPORT_SOCKS=987
|
TPPORT_SOCKS=987
|
||||||
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
|
# use <HOSTLIST> placeholders to engage standard hostlists and autohostlist in ipset dir
|
||||||
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
|
# they 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="
|
TPWS_SOCKS_OPT="
|
||||||
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
||||||
--filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST>
|
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST>
|
||||||
"
|
"
|
||||||
|
|
||||||
TPWS_ENABLE=0
|
TPWS_ENABLE=0
|
||||||
TPWS_PORTS=80,443
|
TPWS_PORTS=80,443
|
||||||
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
|
# use <HOSTLIST> placeholders to engage standard hostlists and autohostlist in ipset dir
|
||||||
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
|
# they are replaced to empty string if MODE_FILTER does not satisfy
|
||||||
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
|
|
||||||
TPWS_OPT="
|
TPWS_OPT="
|
||||||
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
||||||
--filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST>
|
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST>
|
||||||
"
|
"
|
||||||
|
|
||||||
NFQWS_ENABLE=0
|
NFQWS_ENABLE=0
|
||||||
@ -85,19 +83,18 @@ NFQWS_UDP_PKT_IN=0
|
|||||||
# this mode can be very CPU consuming. enable with care !
|
# this mode can be very CPU consuming. enable with care !
|
||||||
#NFQWS_PORTS_TCP_KEEPALIVE=80
|
#NFQWS_PORTS_TCP_KEEPALIVE=80
|
||||||
#NFQWS_PORTS_UDP_KEEPALIVE=
|
#NFQWS_PORTS_UDP_KEEPALIVE=
|
||||||
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
|
# use <HOSTLIST> placeholders to engage standard hostlists and autohostlist in ipset dir
|
||||||
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
|
# they are replaced to empty string if MODE_FILTER does not satisfy
|
||||||
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
|
|
||||||
NFQWS_OPT="
|
NFQWS_OPT="
|
||||||
--filter-tcp=80 --dpi-desync=fake,multisplit --dpi-desync-split-pos=method+2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
|
--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
|
||||||
--filter-tcp=443 --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1,midsld --dpi-desync-fooling=badseq,md5sig <HOSTLIST> --new
|
--filter-tcp=443 --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
|
||||||
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST_NOAUTO>
|
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST>
|
||||||
"
|
"
|
||||||
|
|
||||||
# none,ipset,hostlist,autohostlist
|
# none,ipset,hostlist,autohostlist
|
||||||
MODE_FILTER=none
|
MODE_FILTER=none
|
||||||
|
|
||||||
# donttouch,none,software,hardware
|
# openwrt only : donttouch,none,software,hardware
|
||||||
FLOWOFFLOAD=donttouch
|
FLOWOFFLOAD=donttouch
|
||||||
|
|
||||||
# openwrt: specify networks to be treated as LAN. default is "lan"
|
# openwrt: specify networks to be treated as LAN. default is "lan"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2016-2024 bol-van
|
Copyright (c) 2016-2021 bol-van
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -100,7 +100,7 @@ Later you will add ipfw commands to `/etc/rc.firewall.my` to be reapplied after
|
|||||||
You can also run zapret daemons from there. Start them with `--daemon` options, for example
|
You can also run zapret daemons from there. Start them with `--daemon` options, for example
|
||||||
```
|
```
|
||||||
pkill ^dvtws$
|
pkill ^dvtws$
|
||||||
/opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=multisplit --dpi-desync-split-pos=2
|
/opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
To restart firewall and daemons run : `/etc/rc.d/ipfw restart`
|
To restart firewall and daemons run : `/etc/rc.d/ipfw restart`
|
||||||
@ -157,7 +157,7 @@ ipfw delete 100
|
|||||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||||
# required for autottl mode only
|
# required for autottl mode only
|
||||||
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
Process only table zapret with the exception of table nozapret:
|
Process only table zapret with the exception of table nozapret:
|
||||||
@ -167,7 +167,7 @@ ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
|||||||
ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted not sockarg xmit em0
|
ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted not sockarg xmit em0
|
||||||
# required for autottl mode only
|
# required for autottl mode only
|
||||||
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||||
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
Reinjection loop avoidance. FreeBSD artificially ignores sockarg for ipv6 in
|
Reinjection loop avoidance. FreeBSD artificially ignores sockarg for ipv6 in
|
||||||
@ -217,9 +217,8 @@ ipfrag2 desync mode.
|
|||||||
|
|
||||||
There's autostart script example in `init.d/pfsense`. It should be placed to
|
There's autostart script example in `init.d/pfsense`. It should be placed to
|
||||||
`/usr/local/etc/rc.d` and edited. Write your ipfw rules and daemon start
|
`/usr/local/etc/rc.d` and edited. Write your ipfw rules and daemon start
|
||||||
commands.
|
commands. Because git is absent the most convinient way to copy files is ssh.
|
||||||
curl is present by default. You can use it to download `tar.gz` release directly from github.
|
curl is present by default.
|
||||||
Or you can copy files using sftp.
|
|
||||||
|
|
||||||
Copy zip with zapret files to `/opt` and unpack there as it's done in other
|
Copy zip with zapret files to `/opt` and unpack there as it's done in other
|
||||||
systems. In this case run `dvtws` as `/opt/zapret/nfq/dvtws`. Or just copy
|
systems. In this case run `dvtws` as `/opt/zapret/nfq/dvtws`. Or just copy
|
||||||
@ -228,6 +227,9 @@ present. It's possible to renew lists.
|
|||||||
|
|
||||||
If you dont like poverty of default repos its possible to enable FreeBSD repo.
|
If you dont like poverty of default repos its possible to enable FreeBSD repo.
|
||||||
Change `no` to `yes` in `/usr/local/etc/pkg/repos/FreeBSD.conf` and `/usr/local/etc/pkg/repos/pfSense.conf`.
|
Change `no` to `yes` in `/usr/local/etc/pkg/repos/FreeBSD.conf` and `/usr/local/etc/pkg/repos/pfSense.conf`.
|
||||||
|
Then it becomes possible to install all the required software including git to download
|
||||||
|
zapret from github directly.
|
||||||
|
|
||||||
|
|
||||||
`/usr/local/etc/rc.d/zapret.sh` (chmod 755)
|
`/usr/local/etc/rc.d/zapret.sh` (chmod 755)
|
||||||
```
|
```
|
||||||
@ -245,7 +247,7 @@ sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
|||||||
ipfw delete 100
|
ipfw delete 100
|
||||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted not sockarg xmit em0
|
||||||
pkill ^dvtws$
|
pkill ^dvtws$
|
||||||
dvtws --daemon --port 989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
dvtws --daemon --port 989 --dpi-desync=split2
|
||||||
|
|
||||||
# required for newer pfsense versions (2.6.0 tested) to return ipfw to functional state
|
# required for newer pfsense versions (2.6.0 tested) to return ipfw to functional state
|
||||||
pfctl -d ; pfctl -e
|
pfctl -d ; pfctl -e
|
||||||
@ -280,7 +282,7 @@ Autostart `/usr/local/etc/rc.d/zapret.sh`:
|
|||||||
```
|
```
|
||||||
pfctl -a zapret -f /etc/zapret.anchor
|
pfctl -a zapret -f /etc/zapret.anchor
|
||||||
pkill ^tpws$
|
pkill ^tpws$
|
||||||
tpws --daemon --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force --split-pos=2
|
tpws --daemon --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force --split-http-req=method --split-pos=2
|
||||||
```
|
```
|
||||||
|
|
||||||
After reboot check that anchor is created and referred from the main ruleset:
|
After reboot check that anchor is created and referred from the main ruleset:
|
||||||
@ -342,7 +344,7 @@ pass out quick on em0 proto tcp to port {80,443} divert-packet port 989
|
|||||||
Then:
|
Then:
|
||||||
```
|
```
|
||||||
pfctl -f /etc/pf.conf
|
pfctl -f /etc/pf.conf
|
||||||
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
./dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
`dwtws` only for table zapret with the exception of table nozapret :
|
`dwtws` only for table zapret with the exception of table nozapret :
|
||||||
@ -375,7 +377,7 @@ pass out quick on em0 inet6 proto tcp to <zapret6-user> port {80,443} divert-p
|
|||||||
Then:
|
Then:
|
||||||
```
|
```
|
||||||
pfctl -f /etc/pf.conf
|
pfctl -f /etc/pf.conf
|
||||||
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
./dvtws --port=989 --dpi-desync=split2
|
||||||
```
|
```
|
||||||
|
|
||||||
divert-packet automatically adds the reverse rule. By default also incoming
|
divert-packet automatically adds the reverse rule. By default also incoming
|
725
docs/bsd.md
725
docs/bsd.md
@ -1,725 +0,0 @@
|
|||||||
# Настройка BSD-подобных систем
|
|
||||||
|
|
||||||
* [Поддерживаемые версии](#поддерживаемые-версии)
|
|
||||||
* [Особенности BSD систем](#особенности-bsd-систем)
|
|
||||||
* [Отсутствие nfqueue](#отсутствие-nfqueue)
|
|
||||||
* [Типы Firewall](#типы-firewall)
|
|
||||||
* [Сборка](#сборка)
|
|
||||||
* [Divert сокеты](#divert-сокеты)
|
|
||||||
* [Lookup Tables](#lookup-tables)
|
|
||||||
* [Загрузка ip таблиц из файла](#загрузка-ip-таблиц-из-файла)
|
|
||||||
* [Отсутствие splice](#отсутствие-splice)
|
|
||||||
* [mdig и ip2net](#mdig-и-ip2net)
|
|
||||||
* [FreeBSD](#freebsd)
|
|
||||||
* [Подгрузка ipdivert](#подгрузка-ipdivert)
|
|
||||||
* [Авто-восстановление правил ipfw и работа в фоне](#авто-восстановление-правил-ipfw-и-работа-в-фоне)
|
|
||||||
* [tpws в прозрачном режиме](#tpws-в-прозрачном-режиме)
|
|
||||||
* [Запуск dvtws](#запуск-dvtws)
|
|
||||||
* [PF в FreeBSD](#pf-в-freebsd)
|
|
||||||
* [pfsense](#pfsense)
|
|
||||||
* [OpenBSD](#openbsd)
|
|
||||||
* [tpws bind на ipv4](#tpws-bind-на-ipv4)
|
|
||||||
* [tpws для проходящего трафика](#tpws-для-проходящего-трафика)
|
|
||||||
* [Запуск dvtws](#запуск-dvtws)
|
|
||||||
* [Проблемы с badsum](#проблемы-с-badsum)
|
|
||||||
* [Особенность отправки fake пакетов](#особенность-отправки-fake-пакетов)
|
|
||||||
* [Перезагрузка PF таблиц](#перезагрузка-pf-таблиц)
|
|
||||||
* [MacOS](#macos)
|
|
||||||
* [Введение](#введение)
|
|
||||||
* [dvtws бесполезен](#dvtws-бесполезен)
|
|
||||||
* [tpws](#tpws)
|
|
||||||
* [Проблема link-local адреса](#проблема-link-local-адреса)
|
|
||||||
* [Сборка](#сборка)
|
|
||||||
* [Простая установка](#простая-установка)
|
|
||||||
* [Вариант Custom](#вариант-custom)
|
|
||||||
|
|
||||||
|
|
||||||
## Поддерживаемые версии
|
|
||||||
**FreeBSD** 11.x+ , **OpenBSD** 6.x+, частично **MacOS Sierra** +
|
|
||||||
|
|
||||||
> [!CAUTION]
|
|
||||||
> На более старых может собираться, может не собираться, может работать или не
|
|
||||||
> работать. На **FreeBSD** 10 собирается и работает `dvtws`. С `tpws` есть
|
|
||||||
> проблемы из-за слишком старой версии компилятора clang. Вероятно, будет
|
|
||||||
> работать, если обновить компилятор. Возможна прикрутка к последним версиям
|
|
||||||
> pfsense без веб интерфейса в ручном режиме через консоль.
|
|
||||||
|
|
||||||
|
|
||||||
## Особенности BSD систем
|
|
||||||
|
|
||||||
### Отсутствие nfqueue
|
|
||||||
В **BSD** нет `nfqueue`. Похожий механизм - divert sockets. Из каталога
|
|
||||||
[`nfq/`](../nfq/) под **BSD** собирается `dvtws` вместо `nfqws`. Он разделяет с
|
|
||||||
`nfqws` большую часть кода и почти совпадает по параметрам командной строки.
|
|
||||||
|
|
||||||
### Типы Firewall
|
|
||||||
**FreeBSD** содержит 3 фаервола : **IPFilter**, **ipfw** и **Packet Filter (PF
|
|
||||||
в дальнейшем)**. **OpenBSD** содержит только **PF**.
|
|
||||||
|
|
||||||
### Сборка
|
|
||||||
Под **FreeBSD** `tpws` и `dvtws` собираются через `make`.
|
|
||||||
|
|
||||||
Под **OpenBSD**:
|
|
||||||
```sh
|
|
||||||
make bsd
|
|
||||||
```
|
|
||||||
|
|
||||||
Под **MacOS**:
|
|
||||||
```sh
|
|
||||||
make mac
|
|
||||||
```
|
|
||||||
|
|
||||||
**FreeBSD** make распознает BSDmakefile, **OpenBSD** и **MacOS** - нет. Поэтому
|
|
||||||
там используется отдельный target в Makefile. Сборка всех исходников:
|
|
||||||
```sh
|
|
||||||
make -C /opt/zapret
|
|
||||||
```
|
|
||||||
|
|
||||||
### Divert сокеты
|
|
||||||
Divert сокет это внутренний тип сокета ядра **BSD**. Он не привязывается ни к
|
|
||||||
какому сетевому адресу, не участвует в обмене данными через сеть и
|
|
||||||
идентифицируется по номеру порта `1..65535`. Аналогия с номером очереди
|
|
||||||
`NFQUEUE`. На divert сокеты заворачивается трафик посредством правил ipfw или
|
|
||||||
PF. Если в фаерволе есть правило divert, но на divert порту никто не слушает,
|
|
||||||
то пакеты дропаются. Это поведение аналогично правилам `NFQUEUE` без параметра
|
|
||||||
`--queue-bypass`. На **FreeBSD** divert сокеты могут быть только ipv4, хотя на
|
|
||||||
них принимаются и ipv4, и ipv6 фреймы. На **OpenBSD** divert сокеты создаются
|
|
||||||
отдельно для ipv4 и ipv6 и работают только с одной версией `ip` каждый. На
|
|
||||||
**MacOS** похоже, что divert сокеты из ядра вырезаны. См подробнее раздел про
|
|
||||||
**MacOS**. Отсылка в divert сокет работает аналогично отсылке через raw socket
|
|
||||||
на linux. Передается полностью IP фрейм, начиная с ip загловка. Эти особенности
|
|
||||||
учитываются в `dvtws`.
|
|
||||||
|
|
||||||
### Lookup Tables
|
|
||||||
Скрипты [`ipset/*.sh`](../ipset/) при наличии ipfw работают с ipfw lookup
|
|
||||||
tables. Это прямой аналог ipset. lookup tables не разделены на v4 и v6. Они
|
|
||||||
могут содержать v4 и v6 адреса и подсети одновременно. Если ipfw отсутствует,
|
|
||||||
то действие зависит от переменной `LISTS_RELOAD` в config. Если она задана, то
|
|
||||||
выполняется команда из `LISTS_RELOAD`. В противном случае не делается ничего.
|
|
||||||
Если `LISTS_RELOAD=-`, то заполнение таблиц отключается даже при наличии ipfw.
|
|
||||||
|
|
||||||
### Загрузка ip таблиц из файла
|
|
||||||
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность
|
|
||||||
следует отключить сжатие gzip для листов через параметр файла config:
|
|
||||||
`GZIP_LISTS=0`.
|
|
||||||
|
|
||||||
### Отсутствие splice
|
|
||||||
**BSD** не содержит системного вызова splice. `tpws` работает через переброску
|
|
||||||
данных в user mode в оба конца. Это медленнее, но не критически. Управление
|
|
||||||
асинхронными сокетами в `tpws` основано на linux-specific механизме epoll. В
|
|
||||||
**BSD** для его эмуляции используется epoll-shim - прослойка для эмуляции epoll
|
|
||||||
на базе kqueue.
|
|
||||||
|
|
||||||
### mdig и ip2net
|
|
||||||
mdig и ip2net полностью работоспособны в **BSD**. В них нет ничего
|
|
||||||
системо-зависимого.
|
|
||||||
|
|
||||||
|
|
||||||
## FreeBSD
|
|
||||||
|
|
||||||
### Подгрузка ipdivert
|
|
||||||
Divert сокеты требуют специального модуля ядра - `ipdivert`.
|
|
||||||
|
|
||||||
- Поместите следующие строки в `/boot/loader.conf` (создать, если отсутствует):
|
|
||||||
```
|
|
||||||
ipdivert_load="YES"
|
|
||||||
net.inet.ip.fw.default_to_accept=1
|
|
||||||
```
|
|
||||||
|
|
||||||
`/etc/rc.conf`:
|
|
||||||
```
|
|
||||||
firewall_enable="YES"
|
|
||||||
firewall_script="/etc/rc.firewall.my"
|
|
||||||
```
|
|
||||||
|
|
||||||
`/etc/rc.firewall.my`:
|
|
||||||
```sh
|
|
||||||
$ ipfw -q -f flush
|
|
||||||
```
|
|
||||||
|
|
||||||
### Авто-восстановление правил ipfw и работа в фоне
|
|
||||||
В `/etc/rc.firewall.my` можно дописывать правила ipfw, чтобы они
|
|
||||||
восстанавливались после перезагрузки. Оттуда же можно запускать и демоны
|
|
||||||
zapret, добавив в параметры `--daemon`. Например так:
|
|
||||||
```sh
|
|
||||||
$ pkill ^dvtws$
|
|
||||||
$ /opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=multisplit --dpi-desync-split-pos=2
|
|
||||||
```
|
|
||||||
|
|
||||||
Для перезапуска фаервола и демонов достаточно будет сделать:
|
|
||||||
```sh
|
|
||||||
$ /etc/rc.d/ipfw restart
|
|
||||||
```
|
|
||||||
|
|
||||||
### tpws в прозрачном режиме
|
|
||||||
Краткая инструкция по запуску `tpws` в прозрачном режиме.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Предполагается, что интерфейс LAN называется `em1`, WAN - `em0`.
|
|
||||||
|
|
||||||
#### Весь трафик
|
|
||||||
```sh
|
|
||||||
$ ipfw delete 100
|
|
||||||
$ ipfw add 100 fwd 127.0.0.1,988 tcp from me to any 80,443 proto ip4 xmit em0 not uid daemon
|
|
||||||
$ ipfw add 100 fwd ::1,988 tcp from me to any 80,443 proto ip6 xmit em0 not uid daemon
|
|
||||||
$ ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1
|
|
||||||
$ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
|
||||||
$ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ipfw delete 100
|
|
||||||
$ ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
|
||||||
$ ipfw add 100 fwd 127.0.0.1,988 tcp from me to table\(zapret\) 80,443 proto ip4 xmit em0 not uid daemon
|
|
||||||
$ ipfw add 100 fwd ::1,988 tcp from me to table\(zapret\) 80,443 proto ip6 xmit em0 not uid daemon
|
|
||||||
$ ipfw add 100 allow tcp from any to table\(nozapret\) 80,443 recv em1
|
|
||||||
$ ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1
|
|
||||||
$ ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
|
||||||
$ /opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Таблицы zapret, nozapret, ipban создаются скриптами из ipset по аналогии с
|
|
||||||
> Linux. Обновление скриптов можно забить в cron под root:
|
|
||||||
> ```sh
|
|
||||||
> $ crontab -e
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> ```
|
|
||||||
> <...>
|
|
||||||
> 0 12 */2 * * /opt/zapret/ipset/get_config.sh
|
|
||||||
> ```
|
|
||||||
|
|
||||||
> [!CAUTION]
|
|
||||||
> При использовании ipfw `tpws` не требует повышенных привилегий для реализации
|
|
||||||
> прозрачного режима. Однако, без рута невозможен bind на порты `< 1024` и
|
|
||||||
> смена UID/GID. Без смены UID будет рекурсия, поэтому правила ipfw нужно
|
|
||||||
> создавать с учетом UID, под которым работает `tpws`. Переадресация на порты
|
|
||||||
> `>= 1024` может создать угрозу перехвата трафика непривилегированным
|
|
||||||
> процессом, если вдруг `tpws` не запущен.
|
|
||||||
|
|
||||||
|
|
||||||
### Запуск dvtws
|
|
||||||
|
|
||||||
#### Весь трафик
|
|
||||||
```sh
|
|
||||||
$ ipfw delete 100
|
|
||||||
$ ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
|
||||||
# required for autottl mode only
|
|
||||||
$ ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted recv em0
|
|
||||||
$ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ipfw delete 100
|
|
||||||
$ ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
|
||||||
$ ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted not sockarg xmit em0
|
|
||||||
# required for autottl mode only
|
|
||||||
$ ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
|
||||||
$ /opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### PF в FreeBSD
|
|
||||||
Настройка аналогична **OpenBSD**, но есть важные нюансы.
|
|
||||||
|
|
||||||
- В **FreeBSD** поддержка PF в `tpws` отключена по умолчанию. Чтобы ее
|
|
||||||
включить, нужно использовать параметр `--enable-pf`.
|
|
||||||
- Нельзя сделать ipv6 rdr на `::1`. Нужно делать на link-local адрес входящего
|
|
||||||
интерфейса. Смотрите через `ifconfig` адрес `fe80:...` и добавляете в правило.
|
|
||||||
- Синтаксис `pf.conf` немного отличается. Более новая версия PF.
|
|
||||||
- Лимит на количество элементов таблиц задается так:
|
|
||||||
```sh
|
|
||||||
$ sysctl net.pf.request_maxcount=2000000
|
|
||||||
```
|
|
||||||
- Сломан divert-to. Он работает, но не работает механизм предотвращения
|
|
||||||
зацикливаний. Кто-то уже написал патч, но в `14-RELEASE` проблема все еще
|
|
||||||
есть. Следовательно, на данный момент работа `dvtws` через PF невозможна.
|
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
|
||||||
```
|
|
||||||
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::31c:29ff:dee2:1c4d port 988
|
|
||||||
rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ /opt/zapret/tpws/tpws --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> В PF не выходит делать rdr-to с той же системы, где работает proxy.
|
|
||||||
> Вариант с route-to не сохраняет мета информацию. Адрес назначения теряется.
|
|
||||||
> Поэтому этот вариант годится для squid, берущего адрес из протокола прикладного уровня, но не годится для tpws, полагающегося на метаданные ОС.
|
|
||||||
> Поддержка rdr-to реализована через `/dev/pf`, поэтому прозрачный режим **требует root**.
|
|
||||||
|
|
||||||
|
|
||||||
### pfsense
|
|
||||||
|
|
||||||
#### Описание
|
|
||||||
pfsense основан на **FreeBSD** и использует фаервол PF, имеющий проблемы с
|
|
||||||
divert. К счастью, модули ipfw и ipdivert присутствуют в поставке последних
|
|
||||||
версий pfsense. Их можно подгрузить через `kldload`.
|
|
||||||
|
|
||||||
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов
|
|
||||||
через `sysctl`, сделав ipfw первым. В более новых эти параметры `sysctl`
|
|
||||||
отсутствуют, но система работает как надо и без них. В некоторых случаях
|
|
||||||
фаервол PF может ограничивать возможности `dvtws`, в частности в области
|
|
||||||
фрагментации ip.
|
|
||||||
|
|
||||||
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов.
|
|
||||||
|
|
||||||
Бинарики из [`binaries/freebsd-x64`](../binaries/freebsd-x64) собраны под
|
|
||||||
**FreeBSD 11**. Они должны работать и на последующих версиях **FreeBSD**,
|
|
||||||
включая pfsense. Можно пользоваться `install_bin.sh`.
|
|
||||||
|
|
||||||
#### Автозапуск
|
|
||||||
Пример скрипта автозапуска лежит в [`init.d/pfsense`](../init.d/pfsense). Его
|
|
||||||
следует поместить в `/usr/local/etc/rc.d` и отредактировать на предмет правил
|
|
||||||
ipfw и запуска демонов. Есть встроенный редактор `edit` как более приемлемая
|
|
||||||
альтернатива `vi`.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Поскольку `git` отсутствует, копировать файлы удобнее всего через `ssh`.
|
|
||||||
> `curl` присутствует по умолчанию. Можно скопировать zip с файлами zapret и
|
|
||||||
> распаковать в `/opt`, как это делается на других системах. Тогда `dvtws`
|
|
||||||
> нужно запускать как `/opt/zapret/nfq/dvtws`. Либо скопировать только `dvtws`
|
|
||||||
> в `/usr/local/sbin`. Как вам больше нравится.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Скрипты ipset работают, крон есть. Можно сделать автообновление листов.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Если вас напрягает бедность имеющегося репозитория, можно включить
|
|
||||||
> репозиторий от **FreeBSD**, который по умолчанию выключен.
|
|
||||||
>
|
|
||||||
> Поменяйте `no` на `yes` в `/usr/local/etc/pkg/repos/FreeBSD.conf`
|
|
||||||
>
|
|
||||||
> Можно установить весь привычный софт, включая `git`, чтобы напрямую скачивать
|
|
||||||
> zapret с github.
|
|
||||||
|
|
||||||
`/usr/local/etc/rc.d/zapret.sh` (chmod `755`):
|
|
||||||
```sh
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
kldload ipfw
|
|
||||||
kldload ipdivert
|
|
||||||
|
|
||||||
# for older pfsense versions. newer do not have these sysctls
|
|
||||||
sysctl net.inet.ip.pfil.outbound=ipfw,pf
|
|
||||||
sysctl net.inet.ip.pfil.inbound=ipfw,pf
|
|
||||||
sysctl net.inet6.ip6.pfil.outbound=ipfw,pf
|
|
||||||
sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
|
||||||
|
|
||||||
ipfw delete 100
|
|
||||||
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
|
||||||
pkill ^dvtws$
|
|
||||||
dvtws --daemon --port 989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
|
||||||
|
|
||||||
# required for newer pfsense versions (2.6.0 tested) to return ipfw to functional state
|
|
||||||
pfctl -d ; pfctl -e
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Проблемы tpws
|
|
||||||
Что касается `tpws`, то видимо имеется некоторый конфликт двух фаерволов, и
|
|
||||||
правила fwd в ipfw не работают. Работает перенаправление средствами PF как
|
|
||||||
описано в разделе по **FreeBSD**. В PF можно изменять правила только целыми
|
|
||||||
блоками - якорями (anchors). Нельзя просто так добавить или удалить что-то. Но
|
|
||||||
чтобы какой-то anchor был обработан, на него должна быть ссылка из основного
|
|
||||||
набора правил. Его трогать нельзя, иначе порушится весь фаервол. Поэтому
|
|
||||||
придется править код скриптов pfsense.
|
|
||||||
|
|
||||||
1. Поправьте `/etc/inc/filter.inc` следующим образом:
|
|
||||||
```
|
|
||||||
<...>
|
|
||||||
/* MOD */
|
|
||||||
$natrules .= "# ZAPRET redirection\n";
|
|
||||||
$natrules .= "rdr-anchor \"zapret\"\n";
|
|
||||||
|
|
||||||
$natrules .= "# TFTP proxy\n";
|
|
||||||
$natrules .= "rdr-anchor \"tftp-proxy/*\"\n";
|
|
||||||
<...>
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Напишите файл с содержимым anchor-а (например, `/etc/zapret.anchor`):
|
|
||||||
```
|
|
||||||
rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
|
|
||||||
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::20c:29ff:5ae3:4821 port 988
|
|
||||||
```
|
|
||||||
|
|
||||||
`fe80::20c:29ff:5ae3:4821` замените на ваш link local адрес LAN интерфейса,
|
|
||||||
либо уберите строчку, если ipv6 не нужен.
|
|
||||||
|
|
||||||
3. Добавьте в автозапуск `/usr/local/etc/rc.d/zapret.sh`:
|
|
||||||
```sh
|
|
||||||
$ pfctl -a zapret -f /etc/zapret.anchor
|
|
||||||
$ pkill ^tpws$
|
|
||||||
$ tpws --daemon --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force --split-pos=2
|
|
||||||
```
|
|
||||||
|
|
||||||
4. После перезагрузки проверьте, что правила создались:
|
|
||||||
```sh
|
|
||||||
$ pfctl -s nat
|
|
||||||
no nat proto carp all
|
|
||||||
nat-anchor "natearly/*" all
|
|
||||||
nat-anchor "natrules/*" all
|
|
||||||
<...>
|
|
||||||
no rdr proto carp all
|
|
||||||
rdr-anchor "zapret" all
|
|
||||||
rdr-anchor "tftp-proxy/*" all
|
|
||||||
rdr-anchor "miniupnpd" all
|
|
||||||
|
|
||||||
$ pfctl -s nat -a zapret
|
|
||||||
rdr pass on em1 inet proto tcp from any to any port = http -> 127.0.0.1 port 988
|
|
||||||
rdr pass on em1 inet proto tcp from any to any port = https -> 127.0.0.1 port 988
|
|
||||||
rdr pass on em1 inet6 proto tcp from any to any port = http -> fe80::20c:29ff:5ae3:4821 port 988
|
|
||||||
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Так же есть более элегантный способ запуска `tpws` через @reboot в cron и
|
|
||||||
> правило перенаправления в UI. Это позволит не редактировать код pfsense.
|
|
||||||
|
|
||||||
|
|
||||||
## OpenBSD
|
|
||||||
|
|
||||||
### tpws bind на ipv4
|
|
||||||
В `tpws` bind по умолчанию только на ipv6. Для bind на ipv4 нужно указать `--bind-addr=0.0.0.0`.
|
|
||||||
Используйте `--bind-addr=0.0.0.0 --bind-addr=::` для достижения того же результата, как в других ОС по умолчанию.
|
|
||||||
Но лучше все же так не делать, а сажать на определенные внутренние адреса или интерфейсы.
|
|
||||||
|
|
||||||
|
|
||||||
### tpws для проходящего трафика
|
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
|
||||||
```
|
|
||||||
pass in quick on em1 inet proto tcp to port {80,443} rdr-to 127.0.0.1 port 988
|
|
||||||
pass in quick on em1 inet6 proto tcp to port {80,443} rdr-to ::1 port 988
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ pfctl -f /etc/pf.conf
|
|
||||||
$ tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> В PF не выходит делать rdr-to с той же системы, где работает proxy.
|
|
||||||
> Вариант с route-to не сохраняет мета информацию. Адрес назначения теряется.
|
|
||||||
> Поэтому этот вариант годится для squid, берущего адрес из протокола прикладного уровня, но не годится для tpws, полагающегося на метаданные ОС.
|
|
||||||
> Поддержка rdr-to реализована через `/dev/pf`, поэтому прозрачный режим **требует root**.
|
|
||||||
|
|
||||||
|
|
||||||
### Запуск dvtws
|
|
||||||
|
|
||||||
#### Весь трафик
|
|
||||||
`/etc/pf.conf`:
|
|
||||||
```
|
|
||||||
pass in quick on em0 proto tcp from port {80,443} flags SA/SA divert-packet port 989 no state
|
|
||||||
pass in quick on em0 proto tcp from port {80,443} no state
|
|
||||||
pass out quick on em0 proto tcp to port {80,443} divert-packet port 989 no state
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ pfctl -f /etc/pf.conf
|
|
||||||
$ ./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Трафик только на таблицу zapret, за исключением таблицы nozapret
|
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
|
||||||
```
|
|
||||||
set limit table-entries 2000000
|
|
||||||
table <zapret> file "/opt/zapret/ipset/zapret-ip.txt"
|
|
||||||
table <zapret-user> file "/opt/zapret/ipset/zapret-ip-user.txt"
|
|
||||||
table <nozapret> file "/opt/zapret/ipset/zapret-ip-exclude.txt"
|
|
||||||
pass out quick on em0 inet proto tcp to <nozapret> port {80,443}
|
|
||||||
pass in quick on em0 inet proto tcp from <zapret> port {80,443} flags SA/SA divert-packet port 989 no state
|
|
||||||
pass in quick on em0 inet proto tcp from <zapret> port {80,443} no state
|
|
||||||
pass out quick on em0 inet proto tcp to <zapret> port {80,443} divert-packet port 989 no state
|
|
||||||
pass in quick on em0 inet proto tcp from <zapret-user> port {80,443} flags SA/SA divert-packet port 989 no state
|
|
||||||
pass in quick on em0 inet proto tcp from <zapret-user> port {80,443} no state
|
|
||||||
pass out quick on em0 inet proto tcp to <zapret-user> port {80,443} divert-packet port 989 no state
|
|
||||||
table <zapret6> file "/opt/zapret/ipset/zapret-ip6.txt"
|
|
||||||
table <zapret6-user> file "/opt/zapret/ipset/zapret-ip-user6.txt"
|
|
||||||
table <nozapret6> file "/opt/zapret/ipset/zapret-ip-exclude6.txt"
|
|
||||||
pass out quick on em0 inet6 proto tcp to <nozapret6> port {80,443}
|
|
||||||
pass in quick on em0 inet6 proto tcp from <zapret6> port {80,443} flags SA/SA divert-packet port 989 no state
|
|
||||||
pass in quick on em0 inet6 proto tcp from <zapret6> port {80,443} no state
|
|
||||||
pass out quick on em0 inet6 proto tcp to <zapret6> port {80,443} divert-packet port 989 no state
|
|
||||||
pass in quick on em0 inet6 proto tcp from <zapret6-user> port {80,443} flags SA/SA divert-packet port 989 no state
|
|
||||||
pass in quick on em0 inet6 proto tcp from <zapret6-user> port {80,443} no state
|
|
||||||
pass out quick on em0 inet6 proto tcp to <zapret6-user> port {80,443} divert-packet port 989 no state
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ pfctl -f /etc/pf.conf
|
|
||||||
$ ./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Проблемы с badsum
|
|
||||||
**OpenBSD** принудительно пересчитывает tcp checksum после divert, поэтому
|
|
||||||
скорее всего `dpi-desync-fooling=badsum` у вас не заработает. При использовании
|
|
||||||
этого параметра `dvtws` предупредит о возможной проблеме.
|
|
||||||
|
|
||||||
|
|
||||||
### Особенность отправки fake пакетов
|
|
||||||
В **OpenBSD** `dvtws` все фейки отсылает через divert socket, поскольку эта
|
|
||||||
возможность через raw sockets заблокирована. Видимо PF автоматически
|
|
||||||
предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания
|
|
||||||
нет.
|
|
||||||
|
|
||||||
divert-packet автоматически вносит обратное правило для перенаправления. Трюк с
|
|
||||||
no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать
|
|
||||||
массивный трафик через `dvtws`.
|
|
||||||
|
|
||||||
|
|
||||||
### Перезагрузка PF таблиц
|
|
||||||
Скрипты из ipset не перезагружают таблицы в PF по умолчанию.
|
|
||||||
|
|
||||||
Чтобы они это делали, добавьте параметр в `/opt/zapret/config`:
|
|
||||||
```
|
|
||||||
LISTS_RELOAD="pfctl -f /etc/pf.conf"
|
|
||||||
```
|
|
||||||
|
|
||||||
Более новые версии `pfctl` понимают команду перезагрузить только таблицы. Но это не относится к **OpenBSD**. В новых **FreeBSD** есть.
|
|
||||||
```sh
|
|
||||||
$ pfctl -Tl -f /etc/pf.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Не забудьте выключить сжатие gzip: `GZIP_LISTS=0`
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Если в вашей конфигурации какого-то файла листа нет, то его необходимо
|
|
||||||
> исключить из правил PF. Если вдруг листа нет, и он задан в pf.conf, будет
|
|
||||||
> ошибка перезагрузки фаервола.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> После настройки обновление листов можно поместить в cron:
|
|
||||||
> ```sh
|
|
||||||
> $ crontab -e
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> ```
|
|
||||||
> <...>
|
|
||||||
> 0 12 */2 * * /opt/zapret/ipset/get_config.sh
|
|
||||||
> ```
|
|
||||||
|
|
||||||
|
|
||||||
## MacOS
|
|
||||||
|
|
||||||
### Введение
|
|
||||||
Иначально ядро этой ОС "darwin" основывалось на **BSD**, потому в ней много
|
|
||||||
похожего на другие версии **BSD**. Однако, как и в других массовых коммерческих
|
|
||||||
проектах, приоритеты смещаются в сторону от оригинала. Яблочники что хотят, то
|
|
||||||
и творят.
|
|
||||||
|
|
||||||
|
|
||||||
### dvtws бесполезен
|
|
||||||
Раньше был ipfw, потом его убрали, заменили на PF. Есть сомнения, что divert
|
|
||||||
сокеты в ядре остались. Попытка создать divert socket не выдает ошибок, но
|
|
||||||
полученный сокет ведет себя точно так же, как raw, со всеми его унаследованными
|
|
||||||
косяками + еще яблочно специфическими. В PF divert-packet не работает. Простой
|
|
||||||
grep бинарика `pfctl` показывает, что там нет слова "divert", а в других
|
|
||||||
версиях **BSD** оно есть. `dvtws` собирается, но совершенно бесполезен.
|
|
||||||
|
|
||||||
|
|
||||||
### tpws
|
|
||||||
`tpws` удалось адаптировать, он работоспособен. Получение адреса назначения для
|
|
||||||
прозрачного прокси в PF (`DIOCNATLOOK`) убрали из заголовков в новых SDK,
|
|
||||||
сделав фактически недокументированным.
|
|
||||||
|
|
||||||
В `tpws` перенесены некоторые определения из более старых версий яблочных SDK.
|
|
||||||
С ними удалось завести прозрачный режим. Однако, что будет в следующих версиях
|
|
||||||
угадать сложно. Гарантий нет. Еще одной особенностью PF в **MacOS** является
|
|
||||||
проверка на рута в момент обращения к `/dev/pf`, чего нет в остальных **BSD**.
|
|
||||||
`tpws` по умолчанию сбрасывает рутовые привилегии. Необходимо явно указать
|
|
||||||
параметр `--user=root`. В остальном PF себя ведет похоже на **FreeBSD**.
|
|
||||||
Синтаксис `pf.conf` тот же.
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> На **MacOS** работает редирект как с проходящего трафика, так и с локальной
|
|
||||||
> системы через route-to. Поскольку `tpws` вынужден работать под root, для
|
|
||||||
> исключения рекурсии приходится пускать исходящий от root трафик напрямую.
|
|
||||||
> Отсюда имеем недостаток - **обход DPI для рута работать НЕ будет**.
|
|
||||||
|
|
||||||
#### Работа в прозрачном режиме только для исходящих запросов
|
|
||||||
`/etc/pf.conf`:
|
|
||||||
```
|
|
||||||
rdr pass on lo0 inet proto tcp from !127.0.0.0/8 to any port {80,443} -> 127.0.0.1 port 988
|
|
||||||
rdr pass on lo0 inet6 proto tcp from !::1 to any port {80,443} -> fe80::1 port 988
|
|
||||||
pass out route-to (lo0 127.0.0.1) inet proto tcp from any to any port {80,443} user { >root }
|
|
||||||
pass out route-to (lo0 fe80::1) inet6 proto tcp from any to any port {80,443} user { >root }
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ pfctl -ef /etc/pf.conf
|
|
||||||
$ /opt/zapret/tpws/tpws --user=root --port=988 --bind-addr=127.0.0.1 --bind-iface6=lo0 --bind-linklocal=force
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Работа в прозрачном режиме
|
|
||||||
> [!NOTE]
|
|
||||||
> Предполагается, что имя LAN интерфейса - `en1`
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ ifconfig en1 | grep fe80
|
|
||||||
inet6 fe80::bbbb:bbbb:bbbb:bbbb%en1 prefixlen 64 scopeid 0x8
|
|
||||||
```
|
|
||||||
|
|
||||||
`/etc/pf.conf`:
|
|
||||||
```
|
|
||||||
rdr pass on en1 inet proto tcp from any to any port {80,443} -> 127.0.0.1 port 988
|
|
||||||
rdr pass on en1 inet6 proto tcp from any to any port {80,443} -> fe80::bbbb:bbbb:bbbb:bbbb port 988
|
|
||||||
rdr pass on lo0 inet proto tcp from !127.0.0.0/8 to any port {80,443} -> 127.0.0.1 port 988
|
|
||||||
rdr pass on lo0 inet6 proto tcp from !::1 to any port {80,443} -> fe80::1 port 988
|
|
||||||
pass out route-to (lo0 127.0.0.1) inet proto tcp from any to any port {80,443} user { >root }
|
|
||||||
pass out route-to (lo0 fe80::1) inet6 proto tcp from any to any port {80,443} user { >root }
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ pfctl -ef /etc/pf.conf
|
|
||||||
$ /opt/zapret/tpws/tpws --user=root --port=988 --bind-addr=127.0.0.1 --bind-iface6=lo0 --bind-linklocal=force --bind-iface6=en1 --bind-linklocal=force
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Проблема link-local адреса
|
|
||||||
Если вы пользуетесь **MaсOS** в качестве ipv6 роутера, то нужно будет
|
|
||||||
решить вопрос с регулярно изменяемым link-local адресом. С некоторых версий
|
|
||||||
**MacOS** использует по умолчанию постоянные "secured" ipv6 адреса вместо
|
|
||||||
генерируемых на базе MAC адреса.
|
|
||||||
|
|
||||||
Все замечательно, но есть одна проблема. Постоянными остаются только global
|
|
||||||
scope адреса. Link locals периодически меняются. Смена завязана на системное
|
|
||||||
время. Перезагрузки адрес не меняют, Но если перевести время на день вперед и
|
|
||||||
перезагрузиться - link local станет другим (по крайней мере в vmware это так).
|
|
||||||
Информации по вопросу крайне мало, но тянет на баг. Не должен меняться link
|
|
||||||
local. Скрывать link local не имеет смысла, а динамический link local нельзя
|
|
||||||
использовать в качестве адреса шлюза. Проще всего отказаться от "secured"
|
|
||||||
адресов. Для этого поместите строчку `net.inet6.send.opmode=0` в
|
|
||||||
`/etc/sysctl.conf` и перезагрузите систему.
|
|
||||||
|
|
||||||
Все равно для исходящих соединений будут использоваться temporary адреса, как и
|
|
||||||
в других системах. Или вам идея не по вкусу, можно прописать дополнительный
|
|
||||||
статический ipv6 из диапазона маски `fc00::/7` - выберите любой с длиной
|
|
||||||
префикса `128`. Это можно сделать в системных настройках, создав дополнительный
|
|
||||||
адаптер на базе того же сетевого интерфейса, отключить в нем ipv4 и вписать
|
|
||||||
статический ipv6. Он добавится к автоматически настраеваемым.
|
|
||||||
|
|
||||||
|
|
||||||
### Сборка
|
|
||||||
```sh
|
|
||||||
$ make -C /opt/zapret mac
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Простая установка
|
|
||||||
В **MacOS** поддерживается `install_easy.sh`
|
|
||||||
|
|
||||||
В комплекте идут бинарики, собраные под 64-bit с опцией
|
|
||||||
`-mmacosx-version-min=10.8`. Они должны работать на всех поддерживаемых версиях
|
|
||||||
**MacOS**. Если вдруг не работают - можно собрать свои. Developer tools
|
|
||||||
ставятся автоматом при запуске `make`.
|
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Internet sharing средствами системы **не поддерживается**!
|
|
||||||
>
|
|
||||||
> Поддерживается только роутер, настроенный своими силами через PF. Если вы
|
|
||||||
> вдруг включили шаринг, а потом выключили, то доступ к сайтам может пропасть
|
|
||||||
> совсем.
|
|
||||||
>
|
|
||||||
> Лечение:
|
|
||||||
> ```sh
|
|
||||||
> $ pfctl -f /etc/pf.conf
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> Если вам нужен шаринг интернета, лучше отказаться от прозрачного режима и
|
|
||||||
> использовать socks прокси.
|
|
||||||
|
|
||||||
Для автостарта используется launchd (`/Library/LaunchDaemons/zapret.plist`)
|
|
||||||
Управляющий скрипт : `/opt/zapret/init.d/macos/zapret`
|
|
||||||
|
|
||||||
Следующие команды работают с `tpws` и фаерволом одновременно (если
|
|
||||||
`INIT_APPLY_FW=1` в config)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ /opt/zapret/init.d/macos/zapret start
|
|
||||||
$ /opt/zapret/init.d/macos/zapret stop
|
|
||||||
$ /opt/zapret/init.d/macos/zapret restart
|
|
||||||
```
|
|
||||||
|
|
||||||
Работа только с tpws:
|
|
||||||
```sh
|
|
||||||
$ /opt/zapret/init.d/macos/zapret start-daemons
|
|
||||||
$ /opt/zapret/init.d/macos/zapret stop-daemons
|
|
||||||
$ /opt/zapret/init.d/macos/zapret restart-daemons
|
|
||||||
```
|
|
||||||
|
|
||||||
Работа только с PF:
|
|
||||||
```sh
|
|
||||||
$ /opt/zapret/init.d/macos/zapret start-fw
|
|
||||||
$ /opt/zapret/init.d/macos/zapret stop-fw
|
|
||||||
$ /opt/zapret/init.d/macos/zapret restart-fw
|
|
||||||
```
|
|
||||||
|
|
||||||
Перезагрузка всех IP таблиц из файлов:
|
|
||||||
```sh
|
|
||||||
$ /opt/zapret/init.d/macos/zapret reload-fw-tables
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Инсталятор настраивает `LISTS_RELOAD` в config, так что скрипты
|
|
||||||
> [`ipset/*.sh`](../ipset/) автоматически перезагружают IP таблицы в PF.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Автоматически создается cron job на
|
|
||||||
> [`ipset/get_config.sh`](../ipset/get_config.sh), по аналогии с openwrt.
|
|
||||||
|
|
||||||
При start-fw скрипт автоматически модицифирует `/etc/pf.conf`, вставляя туда
|
|
||||||
anchors "zapret". Модификация расчитана на `pf.conf`, в котором сохранены
|
|
||||||
дефолтные anchors от apple. Если у вас измененный `pf.conf` и модификация не
|
|
||||||
удалась, об этом будет предупреждение. Не игнорируйте его. В этом случае вам
|
|
||||||
нужно вставить в свой `pf.conf` (в соответствии с порядком типов правил):
|
|
||||||
```
|
|
||||||
rdr-anchor "zapret"
|
|
||||||
anchor "zapret"
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> При деинсталяции через `uninstall_easy.sh` модификации `pf.conf` убираются.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> start-fw создает 3 файла anchors в `/etc/pf.anchors`: `zapret`, `zapret-v4`,
|
|
||||||
> `zapret-v6`. Последние 2 подключаются из anchor "zapret".
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Таблицы `nozapret` и `nozapret6` принадлежат anchor "zapret".
|
|
||||||
>
|
|
||||||
> Таблицы `zapret` и `zapret-user` в anchor "zapret-v4".
|
|
||||||
>
|
|
||||||
> Таблицы `zapret6` и `zapret6-user` в anchor "zapret-v6".
|
|
||||||
>
|
|
||||||
> Если какая-то версия протокола отключена - соответствующий anchor пустой и не
|
|
||||||
> упоминается в anchor "zapret". Таблицы и правила создаются только на те
|
|
||||||
> листы, которые фактически есть в директории ipset.
|
|
||||||
|
|
||||||
|
|
||||||
### Вариант Custom
|
|
||||||
Так же как и в других системах, поддерживаемых в простом инсталяторе, можно
|
|
||||||
создавать свои custom скрипты.
|
|
||||||
|
|
||||||
Расположение: `/opt/zapret/init.d/macos/custom`
|
|
||||||
|
|
||||||
`zapret_custom_daemons()` получает в `$1`: `0` или `1`. `0` = stop, `1` = start
|
|
||||||
|
|
||||||
custom firewall отличается от linux варианта. Вместо заполнения `iptables` вам
|
|
||||||
нужно сгенерировать правила для `zapret-v4` и `zapret-v6` anchors и выдать их в
|
|
||||||
stdout. Это делается в функциях `zapret_custom_firewall_v4()` и
|
|
||||||
`zapret_custom_firewall_v6()`. Определения таблиц заполняются основным скриптом
|
|
||||||
\- вам это делать не нужно. Можно ссылаться на таблицы `zapret` и `zapret-user`
|
|
||||||
в v4, `zapret6` и `zapret6-user`.
|
|
||||||
|
|
||||||
Cм. пример [в файле](../init.d/macos/custom.d.examples/50-extra-tpws).
|
|
476
docs/bsd.txt
Normal file
476
docs/bsd.txt
Normal file
@ -0,0 +1,476 @@
|
|||||||
|
Поддерживаемые версии
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
FreeBSD 11.x+ , OpenBSD 6.x+, частично MacOS Sierra+
|
||||||
|
|
||||||
|
На более старых может собираться, может не собираться, может работать или не работать.
|
||||||
|
На FreeBSD 10 собирается и работает dvtws. С tpws есть проблемы из-за слишком старой версии компилятора clang.
|
||||||
|
Вероятно, будет работать, если обновить компилятор.
|
||||||
|
Возможна прикрутка к последним версиям pfsense без веб интерфейса в ручном режиме через консоль.
|
||||||
|
|
||||||
|
|
||||||
|
Особенности BSD систем
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
В BSD нет nfqueue. Похожий механизм - divert sockets.
|
||||||
|
Из каталога "nfq" под BSD собирается dvtws вместо nfqws.
|
||||||
|
Он разделяет с nfqws большую часть кода и почти совпадает по параметрам командной строки.
|
||||||
|
|
||||||
|
FreeBSD содержит 3 фаервола : IPFilter, ipfw и Packet Filter (PF). OpenBSD содержит только PF.
|
||||||
|
|
||||||
|
Под FreeBSD tpws и dvtws собираются через "make", под OpenBSD - "make bsd", под MacOS - "make mac".
|
||||||
|
FreeBSD make распознает BSDmakefile , OpenBSD и MacOS - нет. Поэтому там используется отдельный target в Makefile.
|
||||||
|
Сборка всех исходников : make -C /opt/zapret
|
||||||
|
|
||||||
|
divert сокет - внутренний тип сокета ядра BSD. Он не привязывается ни к какому сетевому адресу, не участвует
|
||||||
|
в обмене данными через сеть и идентифицируется по номеру порта 1..65535. Аналогия с номером очереди NFQUEUE.
|
||||||
|
На divert сокеты заворачивается трафик посредством правил ipfw или PF.
|
||||||
|
Если в фаерволе есть правило divert, но на divert порту никто не слушает, то пакеты дропаются.
|
||||||
|
Это поведение аналогично правилам NFQUEUE без параметра --queue-bypass.
|
||||||
|
На FreeBSD divert сокеты могут быть только ipv4, хотя на них принимаются и ipv4, и ipv6 фреймы.
|
||||||
|
На OpenBSD divert сокеты создаются отдельно для ipv4 и ipv6 и работают только с одной версией ip каждый.
|
||||||
|
На MacOS похоже, что divert сокеты из ядра вырезаны. См подробнее раздел про MacOS.
|
||||||
|
Отсылка в divert сокет работает аналогично отсылке через raw socket на linux. Передается полностью IP фрейм, начиная
|
||||||
|
с ip загловка . Эти особенности учитываются в dvtws.
|
||||||
|
|
||||||
|
Скрипты ipset/*.sh при наличии ipfw работают с ipfw lookup tables.
|
||||||
|
Это прямой аналог ipset. lookup tables не разделены на v4 и v6. Они могут содержать v4 и v6 адреса и подсети одновременно.
|
||||||
|
Если ipfw отсутствует, то действие зависит от переменной LISTS_RELOAD в config.
|
||||||
|
Если она задана, то выполняется команда из LISTS_RELOAD. В противном случае не делается ничего.
|
||||||
|
Если LISTS_RELOAD=-, то заполнение таблиц отключается даже при наличии ipfw.
|
||||||
|
|
||||||
|
PF может загружать ip таблицы из файла. Чтобы использовать эту возможность следует отключить сжатие gzip для листов
|
||||||
|
через параметр файла config "GZIP_LISTS=0".
|
||||||
|
|
||||||
|
BSD не содержит системного вызова splice. tpws работает через переброску данных в user mode в оба конца.
|
||||||
|
Это медленнее, но не критически.
|
||||||
|
Управление асинхронными сокетами в tpws основано на linux-specific механизме epoll.
|
||||||
|
В BSD для его эмуляции используется epoll-shim - прослойка для эмуляции epoll на базе kqueue.
|
||||||
|
|
||||||
|
mdig и ip2net полностью работоспособны в BSD. В них нет ничего системо-зависимого.
|
||||||
|
|
||||||
|
FreeBSD
|
||||||
|
-------
|
||||||
|
|
||||||
|
divert сокеты требуют специального модуля ядра ipdivert.
|
||||||
|
Поместите следующие строки в /boot/loader.conf (создать, если отсутствует) :
|
||||||
|
-----------
|
||||||
|
ipdivert_load="YES"
|
||||||
|
net.inet.ip.fw.default_to_accept=1
|
||||||
|
-----------
|
||||||
|
В /etc/rc.conf :
|
||||||
|
-----------
|
||||||
|
firewall_enable="YES"
|
||||||
|
firewall_script="/etc/rc.firewall.my"
|
||||||
|
-----------
|
||||||
|
/etc/rc.firewall.my :
|
||||||
|
-----------
|
||||||
|
ipfw -q -f flush
|
||||||
|
-----------
|
||||||
|
В /etc/rc.firewall.my можно дописывать правила ipfw, чтобы они восстанавливались после перезагрузки.
|
||||||
|
Оттуда же можно запускать и демоны zapret, добавив в параметры "--daemon". Например так :
|
||||||
|
-----------
|
||||||
|
pkill ^dvtws$
|
||||||
|
/opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=split2
|
||||||
|
-----------
|
||||||
|
Для перезапуска фаервола и демонов достаточно будет сделать : /etc/rc.d/ipfw restart
|
||||||
|
|
||||||
|
|
||||||
|
Краткая инструкция по запуску tpws в прозрачном режиме.
|
||||||
|
Предполагается, что интерфейс LAN называется em1, WAN - em0.
|
||||||
|
|
||||||
|
Для всего трафика :
|
||||||
|
ipfw delete 100
|
||||||
|
ipfw add 100 fwd 127.0.0.1,988 tcp from me to any 80,443 proto ip4 xmit em0 not uid daemon
|
||||||
|
ipfw add 100 fwd ::1,988 tcp from me to any 80,443 proto ip6 xmit em0 not uid daemon
|
||||||
|
ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1
|
||||||
|
ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
||||||
|
/opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
||||||
|
|
||||||
|
Для трафика только на таблицу zapret, за исключением таблицы nozapret :
|
||||||
|
ipfw delete 100
|
||||||
|
ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
||||||
|
ipfw add 100 fwd 127.0.0.1,988 tcp from me to table\(zapret\) 80,443 proto ip4 xmit em0 not uid daemon
|
||||||
|
ipfw add 100 fwd ::1,988 tcp from me to table\(zapret\) 80,443 proto ip6 xmit em0 not uid daemon
|
||||||
|
ipfw add 100 allow tcp from any to table\(nozapret\) 80,443 recv em1
|
||||||
|
ipfw add 100 fwd 127.0.0.1,988 tcp from any to any 80,443 proto ip4 recv em1
|
||||||
|
ipfw add 100 fwd ::1,988 tcp from any to any 80,443 proto ip6 recv em1
|
||||||
|
/opt/zapret/tpws/tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
||||||
|
|
||||||
|
Таблицы zapret, nozapret, ipban создаются скриптами из ipset по аналогии с Linux.
|
||||||
|
Обновление скриптов можно забить в cron под root :
|
||||||
|
crontab -e
|
||||||
|
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
||||||
|
|
||||||
|
При использовании ipfw tpws не требует повышенных привилегий для реализации прозрачного режима.
|
||||||
|
Однако, без рута невозможен бинд на порты <1024 и смена UID/GID. Без смены UID будет рекурсия,
|
||||||
|
поэтому правила ipfw нужно создавать с учетом UID, под которым работает tpws.
|
||||||
|
Переадресация на порты >=1024 может создать угрозу перехвата трафика непривилегированным
|
||||||
|
процессом, если вдруг tpws не запущен.
|
||||||
|
|
||||||
|
|
||||||
|
Краткая инструкция по запуску dvtws.
|
||||||
|
|
||||||
|
Для всего трафика :
|
||||||
|
ipfw delete 100
|
||||||
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
||||||
|
# required for autottl mode only
|
||||||
|
ipfw add 100 divert 989 tcp from any 80,443 to any tcpflags syn,ack in not diverted recv em0
|
||||||
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
|
|
||||||
|
Для трафика только на таблицу zapret, за исключением таблицы nozapret :
|
||||||
|
ipfw delete 100
|
||||||
|
ipfw add 100 allow tcp from me to table\(nozapret\) 80,443
|
||||||
|
ipfw add 100 divert 989 tcp from any to table\(zapret\) 80,443 out not diverted not sockarg xmit em0
|
||||||
|
# required for autottl mode only
|
||||||
|
ipfw add 100 divert 989 tcp from table\(zapret\) 80,443 to any tcpflags syn,ack in not diverted not sockarg recv em0
|
||||||
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=split2
|
||||||
|
|
||||||
|
|
||||||
|
PF в FreeBSD:
|
||||||
|
Настройка аналогична OpenBSD, но есть важные нюансы.
|
||||||
|
1) В FreeBSD поддержка PF в tpws отключена по умолчанию. Чтобы ее включить, нужно использовать параметр --enable-pf.
|
||||||
|
2) Нельзя сделать ipv6 rdr на ::1. Нужно делать на link-local адрес входящего интерфейса.
|
||||||
|
Смотрите через ifconfig адрес fe80:... и добавляете в правило
|
||||||
|
3) Синтаксис pf.conf немного отличается. Более новая версия PF.
|
||||||
|
4) Лимит на количество элементов таблиц задается так : sysctl net.pf.request_maxcount=2000000
|
||||||
|
5) divert-to сломан. Он работает, но не работает механизм предотвращения зацикливаний.
|
||||||
|
Кто-то уже написал патч, но в 14-RELEASE проблема все еще есть.
|
||||||
|
Следовательно, на данный момент работа dvtws через pf невозможна.
|
||||||
|
|
||||||
|
/etc/pf.conf
|
||||||
|
-----------
|
||||||
|
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::31c:29ff:dee2:1c4d port 988
|
||||||
|
rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
|
||||||
|
-----------
|
||||||
|
/opt/zapret/tpws/tpws --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force
|
||||||
|
|
||||||
|
В PF непонятно как делать rdr-to с той же системы, где работает proxy. Вариант с route-to у меня не заработал.
|
||||||
|
|
||||||
|
|
||||||
|
pfsense
|
||||||
|
-------
|
||||||
|
|
||||||
|
pfsense основано на FreeBSD.
|
||||||
|
pfsense использует фаервол pf, а он имеет проблемы с divert.
|
||||||
|
К счастью, модули ipfw и ipdivert присутствуют в поставке последних версий pfsense.
|
||||||
|
Их можно подгрузить через kldload.
|
||||||
|
В некоторых более старых версиях pfsense требуется изменить порядок фаерволов через sysctl, сделав ipfw первым.
|
||||||
|
В более новых эти параметры sysctl отсутствуют, но система работает как надо и без них.
|
||||||
|
В некоторых случаях фаервол pf может ограничивать возможности dvtws, в частности в области фрагментации ip.
|
||||||
|
Присутствуют по умолчанию правила scrub для реассемблинга фрагментов.
|
||||||
|
Бинарики из binaries/freebsd-x64 собраны под FreeBSD 11. Они должны работать и на последующих версиях FreeBSD,
|
||||||
|
включая pfsense. Можно пользоваться install_bin.sh.
|
||||||
|
|
||||||
|
Пример скрипта автозапуска лежит в init.d/pfsense. Его следует поместить в /usr/local/etc/rc.d и отредактировать
|
||||||
|
на предмет правил ipfw и запуска демонов. Есть встроенный редактор edit как более приемлемая альтернатива vi.
|
||||||
|
Поскольку git отсутствует, копировать файлы удобнее всего через ssh. curl присутствует по умолчанию.
|
||||||
|
Можно скопировать zip с файлами zapret и распаковать в /opt, как это делается на других системах.
|
||||||
|
Тогда dvtws нужно запускать как /opt/zapret/nfq/dvtws. Либо скопировать только dvtws в /usr/local/sbin.
|
||||||
|
Как вам больше нравится.
|
||||||
|
ipset скрипты работают, крон есть. Можно сделать автообновление листов.
|
||||||
|
|
||||||
|
Если вас напрягает бедность имеющегося репозитория, можно включить репозиторий от FreeBSD, который по умолчанию выключен.
|
||||||
|
Поменяйте no на yes в /usr/local/etc/pkg/repos/FreeBSD.conf
|
||||||
|
Можно установить весь привычный soft, включая git, чтобы напрямую скачивать zapret с github.
|
||||||
|
|
||||||
|
/usr/local/etc/rc.d/zapret.sh (chmod 755)
|
||||||
|
-----------
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
kldload ipfw
|
||||||
|
kldload ipdivert
|
||||||
|
|
||||||
|
# for older pfsense versions. newer do not have these sysctls
|
||||||
|
sysctl net.inet.ip.pfil.outbound=ipfw,pf
|
||||||
|
sysctl net.inet.ip.pfil.inbound=ipfw,pf
|
||||||
|
sysctl net.inet6.ip6.pfil.outbound=ipfw,pf
|
||||||
|
sysctl net.inet6.ip6.pfil.inbound=ipfw,pf
|
||||||
|
|
||||||
|
ipfw delete 100
|
||||||
|
ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit em0
|
||||||
|
pkill ^dvtws$
|
||||||
|
dvtws --daemon --port 989 --dpi-desync=split2
|
||||||
|
|
||||||
|
# required for newer pfsense versions (2.6.0 tested) to return ipfw to functional state
|
||||||
|
pfctl -d ; pfctl -e
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Что касается tpws, то видимо имеется некоторый конфликт двух фаерволов, и правила fwd в ipfw не работают.
|
||||||
|
Работает перенаправление средствами pf как описано в разделе по FreeBSD.
|
||||||
|
В pf можно изменять правила только целыми блоками - якорями (anchors). Нельзя просто так добавить или удалить что-то.
|
||||||
|
Но чтобы какой-то anchor был обработан, на него должна быть ссылка из основного набора правил.
|
||||||
|
Его трогать нельзя, иначе порушится весь фаервол.
|
||||||
|
Поэтому придется править код скриптов pfsense. Поправьте /etc/inc/filter.inc следующим образом :
|
||||||
|
-----------
|
||||||
|
.................
|
||||||
|
/* MOD */
|
||||||
|
$natrules .= "# ZAPRET redirection\n";
|
||||||
|
$natrules .= "rdr-anchor \"zapret\"\n";
|
||||||
|
|
||||||
|
$natrules .= "# TFTP proxy\n";
|
||||||
|
$natrules .= "rdr-anchor \"tftp-proxy/*\"\n";
|
||||||
|
.................
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Напишите файл с содержимым anchor-а (например, /etc/zapret.anchor):
|
||||||
|
-----------
|
||||||
|
rdr pass on em1 inet proto tcp to port {80,443} -> 127.0.0.1 port 988
|
||||||
|
rdr pass on em1 inet6 proto tcp to port {80,443} -> fe80::20c:29ff:5ae3:4821 port 988
|
||||||
|
-----------
|
||||||
|
fe80::20c:29ff:5ae3:4821 замените на ваш link local адрес LAN интерфейса, либо уберите строчку, если ipv6 не нужен.
|
||||||
|
|
||||||
|
Добавьте в автозапуск /usr/local/etc/rc.d/zapret.sh :
|
||||||
|
-----------
|
||||||
|
pfctl -a zapret -f /etc/zapret.anchor
|
||||||
|
pkill ^tpws$
|
||||||
|
tpws --daemon --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force --split-http-req=method --split-pos=2
|
||||||
|
-----------
|
||||||
|
|
||||||
|
После перезагрузки проверьте, что правила создались :
|
||||||
|
-----------
|
||||||
|
[root@pfSense /]# pfctl -s nat
|
||||||
|
no nat proto carp all
|
||||||
|
nat-anchor "natearly/*" all
|
||||||
|
nat-anchor "natrules/*" all
|
||||||
|
...................
|
||||||
|
no rdr proto carp all
|
||||||
|
rdr-anchor "zapret" all
|
||||||
|
rdr-anchor "tftp-proxy/*" all
|
||||||
|
rdr-anchor "miniupnpd" all
|
||||||
|
[root@pfSense /]# pfctl -s nat -a zapret
|
||||||
|
rdr pass on em1 inet proto tcp from any to any port = http -> 127.0.0.1 port 988
|
||||||
|
rdr pass on em1 inet proto tcp from any to any port = https -> 127.0.0.1 port 988
|
||||||
|
rdr pass on em1 inet6 proto tcp from any to any port = http -> fe80::20c:29ff:5ae3:4821 port 988
|
||||||
|
rdr pass on em1 inet6 proto tcp from any to any port = https -> fe80::20c:29ff:5ae3:4821 port 988
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Так же есть более элегантный способ запуска tpws через @reboot в cron и правило перенаправления в UI.
|
||||||
|
Это позволит не редактировать код pfsense.
|
||||||
|
|
||||||
|
|
||||||
|
OpenBSD
|
||||||
|
-------
|
||||||
|
|
||||||
|
В tpws бинд по умолчанию только на ipv6. для бинда на ipv4 указать "--bind-addr=0.0.0.0"
|
||||||
|
Используйте --bind-addr=0.0.0.0 --bind-addr=:: для достижения того же результата, как в других ОС по умолчанию.
|
||||||
|
(лучше все же так не делать, а сажать на определенные внутренние адреса или интерфейсы)
|
||||||
|
|
||||||
|
tpws для проходящего трафика :
|
||||||
|
|
||||||
|
/etc/pf.conf
|
||||||
|
------------
|
||||||
|
pass in quick on em1 inet proto tcp to port {80,443} rdr-to 127.0.0.1 port 988
|
||||||
|
pass in quick on em1 inet6 proto tcp to port {80,443} rdr-to ::1 port 988
|
||||||
|
------------
|
||||||
|
pfctl -f /etc/pf.conf
|
||||||
|
tpws --port=988 --user=daemon --bind-addr=::1 --bind-addr=127.0.0.1
|
||||||
|
|
||||||
|
В PF непонятно как делать rdr-to с той же системы, где работает proxy. Вариант с route-to у меня не заработал.
|
||||||
|
Поддержка rdr-to реализована через /dev/pf, поэтому прозрачный режим требует root.
|
||||||
|
|
||||||
|
dvtws для всего трафика :
|
||||||
|
|
||||||
|
/etc/pf.conf
|
||||||
|
------------
|
||||||
|
pass in quick on em0 proto tcp from port {80,443} flags SA/SA divert-packet port 989 no state
|
||||||
|
pass in quick on em0 proto tcp from port {80,443} no state
|
||||||
|
pass out quick on em0 proto tcp to port {80,443} divert-packet port 989 no state
|
||||||
|
------------
|
||||||
|
pfctl -f /etc/pf.conf
|
||||||
|
./dvtws --port=989 --dpi-desync=split2
|
||||||
|
|
||||||
|
dvtws для трафика только на таблицу zapret, за исключением таблицы nozapret :
|
||||||
|
|
||||||
|
/etc/pf.conf
|
||||||
|
------------
|
||||||
|
set limit table-entries 2000000
|
||||||
|
table <zapret> file "/opt/zapret/ipset/zapret-ip.txt"
|
||||||
|
table <zapret-user> file "/opt/zapret/ipset/zapret-ip-user.txt"
|
||||||
|
table <nozapret> file "/opt/zapret/ipset/zapret-ip-exclude.txt"
|
||||||
|
pass out quick on em0 inet proto tcp to <nozapret> port {80,443}
|
||||||
|
pass in quick on em0 inet proto tcp from <zapret> port {80,443} flags SA/SA divert-packet port 989 no state
|
||||||
|
pass in quick on em0 inet proto tcp from <zapret> port {80,443} no state
|
||||||
|
pass out quick on em0 inet proto tcp to <zapret> port {80,443} divert-packet port 989 no state
|
||||||
|
pass in quick on em0 inet proto tcp from <zapret-user> port {80,443} flags SA/SA divert-packet port 989 no state
|
||||||
|
pass in quick on em0 inet proto tcp from <zapret-user> port {80,443} no state
|
||||||
|
pass out quick on em0 inet proto tcp to <zapret-user> port {80,443} divert-packet port 989 no state
|
||||||
|
table <zapret6> file "/opt/zapret/ipset/zapret-ip6.txt"
|
||||||
|
table <zapret6-user> file "/opt/zapret/ipset/zapret-ip-user6.txt"
|
||||||
|
table <nozapret6> file "/opt/zapret/ipset/zapret-ip-exclude6.txt"
|
||||||
|
pass out quick on em0 inet6 proto tcp to <nozapret6> port {80,443}
|
||||||
|
pass in quick on em0 inet6 proto tcp from <zapret6> port {80,443} flags SA/SA divert-packet port 989 no state
|
||||||
|
pass in quick on em0 inet6 proto tcp from <zapret6> port {80,443} no state
|
||||||
|
pass out quick on em0 inet6 proto tcp to <zapret6> port {80,443} divert-packet port 989 no state
|
||||||
|
pass in quick on em0 inet6 proto tcp from <zapret6-user> port {80,443} flags SA/SA divert-packet port 989 no state
|
||||||
|
pass in quick on em0 inet6 proto tcp from <zapret6-user> port {80,443} no state
|
||||||
|
pass out quick on em0 inet6 proto tcp to <zapret6-user> port {80,443} divert-packet port 989 no state
|
||||||
|
------------
|
||||||
|
pfctl -f /etc/pf.conf
|
||||||
|
./dvtws --port=989 --dpi-desync=split2
|
||||||
|
|
||||||
|
divert-packet автоматически вносит обратное правило для перенаправления.
|
||||||
|
Трюк с no state и in правилом позволяет обойти эту проблему, чтобы напрасно не гнать массивный трафик через dvtws.
|
||||||
|
|
||||||
|
В OpenBSD dvtws все фейки отсылает через divert socket, поскольку эта возможность через raw sockets заблокирована.
|
||||||
|
Видимо pf автоматически предотвращает повторный заворот diverted фреймов, поэтому проблемы зацикливания нет.
|
||||||
|
|
||||||
|
OpenBSD принудительно пересчитывает tcp checksum после divert, поэтому скорее всего
|
||||||
|
dpi-desync-fooling=badsum у вас не заработает. При использовании этого параметра
|
||||||
|
dvtws предупредит о возможной проблеме.
|
||||||
|
|
||||||
|
Скрипты из ipset не перезагружают таблицы в PF по умолчанию.
|
||||||
|
Чтобы они это делали, добавьте параметр в /opt/zapret/config :
|
||||||
|
LISTS_RELOAD="pfctl -f /etc/pf.conf"
|
||||||
|
Более новые версии pfctl понимают команду перезагрузить только таблицы : pfctl -Tl -f /etc/pf.conf
|
||||||
|
Но это не относится к OpenBSD 6.8. В новых FreeBSD есть.
|
||||||
|
Не забудьте выключить сжатие gzip :
|
||||||
|
GZIP_LISTS=0
|
||||||
|
Если в вашей конфигурации какого-то файла листа нет, то его необходимо исключить из правил PF.
|
||||||
|
Если вдруг листа нет, и он задан в pf.conf, будет ошибка перезагрузки фаервола.
|
||||||
|
После настройки обновление листов можно поместить в cron :
|
||||||
|
crontab -e
|
||||||
|
дописать строчку : 0 12 */2 * * /opt/zapret/ipset/get_config.sh
|
||||||
|
|
||||||
|
|
||||||
|
MacOS
|
||||||
|
-----
|
||||||
|
|
||||||
|
Иначально ядро этой ОС "darwin" основывалось на BSD, потому в ней много похожего на другие версии BSD.
|
||||||
|
Однако, как и в других массовых коммерческих проектах, приоритеты смещаются в сторону от оригинала.
|
||||||
|
Яблочники что хотят, то и творят.
|
||||||
|
Раньше был ipfw, потом его убрали, заменили на PF.
|
||||||
|
Есть сомнения, что divert сокеты в ядре остались. Попытка создать divert socket не выдает ошибок,
|
||||||
|
но полученный сокет ведет себя точно так же, как raw, со всеми его унаследованными косяками + еще яблочно специфическими.
|
||||||
|
В PF divert-packet не работает. Простой grep бинарика pfctl показывает, что там нет слова "divert",
|
||||||
|
а в других версиях BSD оно есть. dvtws собирается, но совершенно бесполезен.
|
||||||
|
|
||||||
|
tpws удалось адаптировать, он работоспособен. Получение адреса назначения для прозрачного прокси в PF (DIOCNATLOOK)
|
||||||
|
убрали из заголовков в новых SDK, сделав фактически недокументированным.
|
||||||
|
В tpws перенесены некоторые определения из более старых версий яблочных SDK. С ними удалось завести прозрачный режим.
|
||||||
|
Однако, что будет в следующих версиях угадать сложно. Гарантий нет.
|
||||||
|
Еще одной особенностью PF в MacOS является проверка на рута в момент обращения к /dev/pf, чего нет в остальных BSD.
|
||||||
|
tpws по умолчанию сбрасывает рутовые привилегии. Необходимо явно указать параметр --user=root.
|
||||||
|
В остальном PF себя ведет похоже на FreeBSD. Синтаксис pf.conf тот же.
|
||||||
|
|
||||||
|
На MacOS работает редирект как с проходящего трафика, так и с локальной системы через route-to.
|
||||||
|
Поскольку tpws вынужден работать под root, для исключения рекурсии приходится пускать исходящий от root трафик напрямую.
|
||||||
|
Отсюда имеем недостаток : обход DPI для рута работать не будет.
|
||||||
|
|
||||||
|
Если вы пользуетесь MaсOS в качестве ipv6 роутера, то нужно будет решить вопрос с регулярно изменяемым link-local адресом.
|
||||||
|
С некоторых версий MacOS использует по умолчанию постоянные "secured" ipv6 адреса вместо генерируемых на базе MAC адреса.
|
||||||
|
Все замечательно, но есть одна проблема. Постоянными остаются только global scope адреса.
|
||||||
|
Link locals периодически меняются. Смена завязана на системное время. Перезагрузки адрес не меняют,
|
||||||
|
Но если перевести время на день вперед и перезагрузиться - link local станет другим. (по крайней мере в vmware это так)
|
||||||
|
Информации по вопросу крайне мало, но тянет на баг. Не должен меняться link local. Скрывать link local не имеет смысла,
|
||||||
|
а динамический link local нельзя использовать в качестве адреса шлюза.
|
||||||
|
Проще всего отказаться от "secured" адресов.
|
||||||
|
Поместите строчку "net.inet6.send.opmode=0" в /etc/sysctl.conf. Затем перезагрузите систему.
|
||||||
|
Все равно для исходящих соединений будут использоваться temporary адреса, как и в других системах.
|
||||||
|
Или вам идея не по вкусу, можно прописать дополнительный статический ipv6 из диапазона fc00::/7 -
|
||||||
|
выберите любой с длиной префикса 128. Это можно сделать в системных настройках, создав дополнительный адаптер на базе
|
||||||
|
того же сетевого интерфейса, отключить в нем ipv4 и вписать статический ipv6. Он добавится к автоматически настраеваемым.
|
||||||
|
|
||||||
|
Настройка tpws на macos в прозрачном режиме только для исходящих запросов :
|
||||||
|
|
||||||
|
/etc/pf.conf
|
||||||
|
------------
|
||||||
|
rdr pass on lo0 inet proto tcp from !127.0.0.0/8 to any port {80,443} -> 127.0.0.1 port 988
|
||||||
|
rdr pass on lo0 inet6 proto tcp from !::1 to any port {80,443} -> fe80::1 port 988
|
||||||
|
pass out route-to (lo0 127.0.0.1) inet proto tcp from any to any port {80,443} user { >root }
|
||||||
|
pass out route-to (lo0 fe80::1) inet6 proto tcp from any to any port {80,443} user { >root }
|
||||||
|
------------
|
||||||
|
pfctl -ef /etc/pf.conf
|
||||||
|
/opt/zapret/tpws/tpws --user=root --port=988 --bind-addr=127.0.0.1 --bind-iface6=lo0 --bind-linklocal=force
|
||||||
|
|
||||||
|
|
||||||
|
Настройка tpws на macos роутере в прозрачном режиме, где en1 - LAN.
|
||||||
|
|
||||||
|
ifconfig en1 | grep fe80
|
||||||
|
inet6 fe80::bbbb:bbbb:bbbb:bbbb%en1 prefixlen 64 scopeid 0x8
|
||||||
|
/etc/pf.conf
|
||||||
|
------------
|
||||||
|
rdr pass on en1 inet proto tcp from any to any port {80,443} -> 127.0.0.1 port 988
|
||||||
|
rdr pass on en1 inet6 proto tcp from any to any port {80,443} -> fe80::bbbb:bbbb:bbbb:bbbb port 988
|
||||||
|
rdr pass on lo0 inet proto tcp from !127.0.0.0/8 to any port {80,443} -> 127.0.0.1 port 988
|
||||||
|
rdr pass on lo0 inet6 proto tcp from !::1 to any port {80,443} -> fe80::1 port 988
|
||||||
|
pass out route-to (lo0 127.0.0.1) inet proto tcp from any to any port {80,443} user { >root }
|
||||||
|
pass out route-to (lo0 fe80::1) inet6 proto tcp from any to any port {80,443} user { >root }
|
||||||
|
------------
|
||||||
|
pfctl -ef /etc/pf.conf
|
||||||
|
/opt/zapret/tpws/tpws --user=root --port=988 --bind-addr=127.0.0.1 --bind-iface6=lo0 --bind-linklocal=force --bind-iface6=en1 --bind-linklocal=force
|
||||||
|
|
||||||
|
|
||||||
|
Сборка : make -C /opt/zapret mac
|
||||||
|
|
||||||
|
Скрипты получения листов ipset/*.sh работают.
|
||||||
|
Если будете пользоваться ipset/get_combined.sh, нужно установить gnu grep через brew.
|
||||||
|
Имеющийся очень старый и безумно медленный с оцией -f.
|
||||||
|
|
||||||
|
|
||||||
|
MacOS простая установка
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
В MacOS поддерживается install_easy.sh
|
||||||
|
|
||||||
|
В комплекте идут бинарики, собраные под 64-bit с опцией -mmacosx-version-min=10.8.
|
||||||
|
Они должны работать на всех поддерживаемых версиях macos.
|
||||||
|
Если вдруг не работают - можно собрать свои. Developer tools ставятся автоматом при запуске make.
|
||||||
|
|
||||||
|
!! Internet sharing средствами системы НЕ ПОДДЕРЖИВАЕТСЯ !!
|
||||||
|
Поддерживается только роутер, настроенный своими силами через PF.
|
||||||
|
Если вы вдруг включили шаринг, а потом выключили, то доступ к сайтам может пропасть совсем.
|
||||||
|
Лечение : pfctl -f /etc/pf.conf
|
||||||
|
Если вам нужен шаринг интернета, лучше отказаться от прозрачного режима и использовать socks.
|
||||||
|
|
||||||
|
Для автостарта используется launchd (/Library/LaunchDaemons/zapret.plist)
|
||||||
|
Управляющий скрипт : /opt/zapret/init.d/macos/zapret
|
||||||
|
Следующие команды работают с tpws и фаерволом одновременно (если INIT_APPLY_FW=1 в config)
|
||||||
|
/opt/zapret/init.d/macos/zapret start
|
||||||
|
/opt/zapret/init.d/macos/zapret stop
|
||||||
|
/opt/zapret/init.d/macos/zapret restart
|
||||||
|
Работа только с tpws :
|
||||||
|
/opt/zapret/init.d/macos/zapret start-daemons
|
||||||
|
/opt/zapret/init.d/macos/zapret stop-daemons
|
||||||
|
/opt/zapret/init.d/macos/zapret restart-daemons
|
||||||
|
Работа только с PF :
|
||||||
|
/opt/zapret/init.d/macos/zapret start-fw
|
||||||
|
/opt/zapret/init.d/macos/zapret stop-fw
|
||||||
|
/opt/zapret/init.d/macos/zapret restart-fw
|
||||||
|
Перезагрузка всех IP таблиц из файлов :
|
||||||
|
/opt/zapret/init.d/macos/zapret reload-fw-tables
|
||||||
|
|
||||||
|
Инсталятор настраивает LISTS_RELOAD в config, так что скрипты ipset/*.sh автоматически перезагружают IP таблицы в PF.
|
||||||
|
Автоматически создается cron job на ipset/get_config.sh, по аналогии с openwrt.
|
||||||
|
|
||||||
|
При start-fw скрипт автоматически модицифирует /etc/pf.conf, вставляя туда anchors "zapret".
|
||||||
|
Модификация расчитана на pf.conf, в котором сохранены дефолтные anchors от apple.
|
||||||
|
Если у вас измененный pf.conf и модификация не удалась, об этом будет предупреждение. Не игнорируйте его.
|
||||||
|
В этом случае вам нужно вставить в свой pf.conf (в соответствии с порядком типов правил) :
|
||||||
|
rdr-anchor "zapret"
|
||||||
|
anchor "zapret"
|
||||||
|
При деинсталяции через uninstall_easy.sh модификации pf.conf убираются.
|
||||||
|
|
||||||
|
start-fw создает 3 файла anchors в /etc/pf.anchors : zapret,zapret-v4,zapret-v6.
|
||||||
|
Последние 2 подключаются из anchor "zapret".
|
||||||
|
Таблицы nozapret,nozapret6 принадлежат anchor "zapret".
|
||||||
|
Таблицы zapret,zapret-user - в anchor "zapret-v4".
|
||||||
|
Таблицы zapret6,zapret6-user - в anchor "zapret-v6".
|
||||||
|
Если какая-то версия протокола отключена - соответствующий anchor пустой и не упоминается в anchor "zapret".
|
||||||
|
Таблицы и правила создаются только на те листы, которые фактически есть в директории ipset.
|
||||||
|
|
||||||
|
|
||||||
|
MacOS вариант custom
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Так же как и в других системах, поддерживаемых в простом инсталяторе, можно создавать свои custom скрипты.
|
||||||
|
Расположение : /opt/zapret/init.d/macos/custom
|
||||||
|
|
||||||
|
zapret_custom_daemons() получает в $1 "0" или "1". "0" - stop, "1" - start
|
||||||
|
custom firewall отличается от linux варианта.
|
||||||
|
Вместо заполнения iptables вам нужно сгенерировать правила для zapret-v4 и zapret-v6 anchors и выдать их в stdout.
|
||||||
|
Это делается в функциях zapret_custom_firewall_v4() и zapret_custom_firewall_v6().
|
||||||
|
Определения таблиц заполняются основным скриптом - вам это делать не нужно.
|
||||||
|
Можно ссылаться на таблицы zapret и zapret-user в v4, zapret6 и zapret6-user.
|
||||||
|
|
||||||
|
Cм. пример в файле custom-tpws
|
@ -70,7 +70,7 @@ pass in quick on em0 proto tcp from port {80,443} flags SA/SA divert-packet por
|
|||||||
pass in quick on em0 proto tcp from port {80,443} no state
|
pass in quick on em0 proto tcp from port {80,443} no state
|
||||||
pass out quick on em0 proto tcp to port {80,443} divert-packet port 989 no state
|
pass out quick on em0 proto tcp to port {80,443} divert-packet port 989 no state
|
||||||
pfctl -f /etc/pf.conf
|
pfctl -f /etc/pf.conf
|
||||||
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
./dvtws --port=989 --dpi-desync=split2
|
||||||
|
|
||||||
; dvtws with table limitations : to zapret,zapret6 but not to nozapret,nozapret6
|
; dvtws with table limitations : to zapret,zapret6 but not to nozapret,nozapret6
|
||||||
; reload tables : pfctl -f /etc/pf.conf
|
; reload tables : pfctl -f /etc/pf.conf
|
||||||
|
144
docs/changes.txt
144
docs/changes.txt
@ -341,147 +341,3 @@ v66:
|
|||||||
|
|
||||||
init.d: rewrite traffic interception and daemon launch parameters in config file. this break compatibility with old versions.
|
init.d: rewrite traffic interception and daemon launch parameters in config file. this break compatibility with old versions.
|
||||||
init.d: openwrt-minimal : tpws launch for low storage openwrt devices
|
init.d: openwrt-minimal : tpws launch for low storage openwrt devices
|
||||||
|
|
||||||
v67:
|
|
||||||
|
|
||||||
mdig: --dns-make-query, --dns-parse-query for side-channel resolving (DoH)
|
|
||||||
blockcheck: use DoH resolvers if DNS spoof is detected
|
|
||||||
blockcheck: restring fooling to testing domain's IPs
|
|
||||||
nfqws,tpws: internal hostlist deduplication to save RAM
|
|
||||||
nfqws,tpws: hostlist/ipset auto reload on file change. no more HUP.
|
|
||||||
nfqws,tpws: --filter-tcp, --filter-udp take comma separated port range list
|
|
||||||
nfqws,tpws: @<config_file> - read config from a file
|
|
||||||
config: <HOSTLIST_NOAUTO> marker
|
|
||||||
binaries: remove zapret-winws. add win32.
|
|
||||||
blockcheck, install_easy.sh: preserve user environment variables during elevation
|
|
||||||
blockcheck: do not require root if SKIP_PKTWS=1
|
|
||||||
|
|
||||||
v68:
|
|
||||||
|
|
||||||
docs : move russian version to markdown
|
|
||||||
nfqws,tpws: use alternate $ sign for $<config_file>
|
|
||||||
repo: binaries removed from repo. git actions binaries build in releases.
|
|
||||||
uninstall_easy.sh: offer to remove dependencies in openwrt
|
|
||||||
install_easy.sh: allow to download lists in autohostlist filter mode
|
|
||||||
|
|
||||||
v69:
|
|
||||||
|
|
||||||
nfqws, tpws: multisplit/multidisorder support.
|
|
||||||
nfqws: name change split->fakedsplit, disorder->fakeddisorder. compat : old names are synonyms
|
|
||||||
nfqws: --dpi-desync-split-http-req, --dpi-desync-split-tls deprecated. compat : these parameters add split point to multisplit.
|
|
||||||
nfqws: --dpi-desync=split2|disorder2 deprecated. compat: they are now synonyms for multisplit/multidisorder
|
|
||||||
nfqws: cancel seqovl if MTU is exceeded (linux only). cancel seqovl for disorder if seqovl>=first_part_size.
|
|
||||||
nfqws: fixed splits in multiple TLS segments.
|
|
||||||
tpws: --split-http-req,--split-tls deprecated. compat : these parameters add split point to multisplit.
|
|
||||||
tpws: --tlsrec now takes pos markers. compat : old names are converted to pos markers
|
|
||||||
tpws: --tlsrec-pos deprecated. compat : sets absolute pos marker
|
|
||||||
nfqws,tpws: chown autohostlist, autohostlist debug log and debug log files after options parse
|
|
||||||
nfqws,tpws: set EXEDIR env var to use in @config (won't work for stadalone winws without /bin/sh)
|
|
||||||
dvtws: set random/increasing ip_id value in generated packets
|
|
||||||
mdig: fixed parsing of DNS reply in windows (stdin is opened as text, not binary)
|
|
||||||
tpws: support compile for android NDK api level >= 21 (Android 5.0)
|
|
||||||
tpws: --fix-seg segmentation fixer
|
|
||||||
repo: build for android NDK api level 21 (Android 5.0)
|
|
||||||
install_easy: support for APK package manager in openwrt
|
|
||||||
blockcheck: removed ignore CA question
|
|
||||||
blockcheck: removed IGNORE_CA, CURL_VERBOSE
|
|
||||||
blockcheck: added CURL_OPT
|
|
||||||
blockcheck: new strategies support
|
|
||||||
blockcheck: test sequence rework
|
|
||||||
blockcheck: view all working strategies in summary
|
|
||||||
|
|
||||||
v69.1:
|
|
||||||
|
|
||||||
init.d: keenetic udp fix custom
|
|
||||||
tpws: fixed incorrect hostlist checks
|
|
||||||
|
|
||||||
v69.2:
|
|
||||||
|
|
||||||
nfqws,tpws: --skip
|
|
||||||
nfqws: --methodeol
|
|
||||||
init.d: do not use pgrep in sysv for busybox compat
|
|
||||||
|
|
||||||
v69.3
|
|
||||||
|
|
||||||
nfqws,tpws: fixed ipsets and hostlists
|
|
||||||
all progs: version numbers for github, build date/time for self built
|
|
||||||
repo: light release for openwrt and embedded systems
|
|
||||||
repo: sha256sum
|
|
||||||
|
|
||||||
v69.4
|
|
||||||
|
|
||||||
nfqws: fakedsplit/fakeddisorder fakes for both split segments
|
|
||||||
nfqws: --dpi-desync-fakedsplit-pattern
|
|
||||||
|
|
||||||
v69.5
|
|
||||||
|
|
||||||
nfqws,tpws: --dry-run
|
|
||||||
install_easy: check tpws and nfqws options validity
|
|
||||||
|
|
||||||
v69.6
|
|
||||||
|
|
||||||
nfqws: set NETLINK_NO_ENOBUFS to fix possible nfq recv errors
|
|
||||||
init.d: unify custom scripts for linux
|
|
||||||
init.d: new custom scripts : 20-fw-extra, 50-wg4all
|
|
||||||
|
|
||||||
v69.7
|
|
||||||
|
|
||||||
nfqws,tpws: --comment
|
|
||||||
nfqws: trash flood warning
|
|
||||||
winws: exclude empty outgoing ack packets in windivert filter
|
|
||||||
|
|
||||||
v69.8
|
|
||||||
|
|
||||||
winws: accept empty outgoing RST and FIN packets for conntrack needs
|
|
||||||
repo: lexra build
|
|
||||||
|
|
||||||
v69.9
|
|
||||||
|
|
||||||
init.d: exclude ipban from tpws redirection
|
|
||||||
macos: fix install_easy
|
|
||||||
macos: fix national decimal separator in sleep
|
|
||||||
ipset: scripts maintenance
|
|
||||||
|
|
||||||
v70
|
|
||||||
|
|
||||||
blockcheck: override all dialog questions and enable batch mode
|
|
||||||
blockcheck: parallel attempts
|
|
||||||
nfqws: weaken wireguard initiation recognition. use len=148 and data[0]=1 signature
|
|
||||||
nfqws: apply split+seqovl only to the first reasm fragment
|
|
||||||
install_easy: dnf packager support
|
|
||||||
nfqws,tpws: hostlist/ipset track not only file mod time but also file size
|
|
||||||
nfqws,tpws,ipset: return lists reload on HUP
|
|
||||||
nfqws,blockcheck: --dpi-desync-fake-tls-mod
|
|
||||||
|
|
||||||
v70.1
|
|
||||||
|
|
||||||
nfqws: --dpi-desync-fake-tls-mod=dupsid
|
|
||||||
nfqws,tpws: test accessibility of list files after privs drop
|
|
||||||
nfqws,tpws: --version
|
|
||||||
|
|
||||||
v70.4
|
|
||||||
|
|
||||||
nfqws,tpws: ^ prefix in hostlist to disable subdomain matches
|
|
||||||
nfqws,tpws: optional systemd notify support. compile using 'make systemd'
|
|
||||||
nfqws,tpws: systemd instance templates for nfqws and tpws
|
|
||||||
nfqws,tpws: separate droproot from dropcaps
|
|
||||||
tpws: detect WSL 1 and warn about non-working options
|
|
||||||
|
|
||||||
v70.5
|
|
||||||
|
|
||||||
nfqws: multiple --dpi-desync-fake-xxx
|
|
||||||
nfqws: support of inter-packet fragmented QUIC CRYPTO
|
|
||||||
|
|
||||||
v70.6
|
|
||||||
|
|
||||||
nfqws: detect Discord Voice IP discovery packets
|
|
||||||
nfqws: detect STUN message packets
|
|
||||||
nfqws: change SNI to specified value tls mod : --dpi-desync-fake-tls-mod sni=<sni>
|
|
||||||
nfqws: update default TLS ClientHello fake. firefox 136.0.4 finger, no kyber, SNI=microsoft.com
|
|
||||||
nfqws: multiple mods for multiple TLS fakes
|
|
||||||
init.d: remove 50-discord
|
|
||||||
blockcheck: use tpws --fix-seg on linux for multiple splits
|
|
||||||
|
|
||||||
v70.7
|
|
||||||
|
|
||||||
nfqws,tpws: debug tls version, alpn, ech
|
|
||||||
|
@ -1,57 +1,42 @@
|
|||||||
How to compile native programs for use in openwrt
|
How to compile native programs for use in openwrt
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
1) Install required packages to the host system :
|
1) <fetch correct version of openwrt>
|
||||||
|
|
||||||
debian,ubuntu : apt install build-essential patch libncurses-dev python3-distutils unzip gawk wget git
|
cd ~
|
||||||
fedora: dnf install make patch gcc g++ ncurses-devel git perl
|
|
||||||
|
|
||||||
Other packages may be required on your distribution. Look for the errors.
|
<chaos calmer>
|
||||||
|
git clone git://git.openwrt.org/15.05/openwrt.git
|
||||||
|
<barrier breaker>
|
||||||
|
git clone git://git.openwrt.org/14.07/openwrt.git
|
||||||
|
<trunk>
|
||||||
|
git clone git://git.openwrt.org/openwrt.git
|
||||||
|
|
||||||
2) Download latest SDK for your target platform from https://downloads.openwrt.org
|
cd openwrt
|
||||||
|
|
||||||
examples :
|
2) ./scripts/feeds update -a
|
||||||
|
./scripts/feeds install -a
|
||||||
|
|
||||||
curl -o - https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz | tar -Jxv
|
3) #add zapret packages to build root
|
||||||
cd openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64
|
#copy package descriptions
|
||||||
|
copy compile/openwrt/* to ~/openwrt
|
||||||
|
#copy source code of tpws
|
||||||
|
copy tpws to ~/openwrt/package/zapret/tpws
|
||||||
|
#copy source code of nfq
|
||||||
|
copy nfq to ~/openwrt/package/zapret/nfq
|
||||||
|
#copy source code of ip2net
|
||||||
|
copy ip2net to ~/openwrt/package/zapret/ip2net
|
||||||
|
|
||||||
curl -o - https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64.tar.zst | tar --zstd -xv
|
4) make menuconfig
|
||||||
cd openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64
|
#select your target architecture
|
||||||
|
#select packages Network/Zapret/* as "M"
|
||||||
|
|
||||||
3) Install required libs
|
5) make toolchain/compile
|
||||||
|
|
||||||
./scripts/feeds update base packages
|
6) make package/tpws/compile
|
||||||
./scripts/feeds install libnetfilter-queue zlib libcap
|
make package/nfqws/compile
|
||||||
|
make package/ip2net/compile
|
||||||
|
make package/mdig/compile
|
||||||
|
|
||||||
4) Prepare openwrt package definitions
|
7) find bin -name tpws*.ipk
|
||||||
|
#take your tpws*.ipk , nfqws*.ipk , ip2net*.ipk, mdig*.ipk from there
|
||||||
cp -R /opt/zapret/docs/compile/openwrt/. .
|
|
||||||
cp -R /opt/zapret/tpws package/zapret/tpws
|
|
||||||
cp -R /opt/zapret/nfq package/zapret/nfqws
|
|
||||||
cp -R /opt/zapret/mdig package/zapret/mdig
|
|
||||||
cp -R /opt/zapret/ip2net package/zapret/ip2net
|
|
||||||
rm -f package/zapret/tpws/tpws/tpws package/zapret/nfqws/nfq/nfqws package/zapret/mdig/mdig/mdig package/zapret/ip2net/ip2net/ip2net
|
|
||||||
|
|
||||||
5) Prepare .config
|
|
||||||
|
|
||||||
make defconfig
|
|
||||||
|
|
||||||
If you only need bins without packages comment 'CONFIG_AUTOREMOVE=y' line in .config
|
|
||||||
|
|
||||||
6) Compile
|
|
||||||
|
|
||||||
dynamic build : make package/{tpws,nfqws,mdig,ip2net}/compile
|
|
||||||
static build : make CFLAGS=-static package/{tpws,nfqws,mdig,ip2net}/compile
|
|
||||||
|
|
||||||
7) Get result
|
|
||||||
|
|
||||||
executables only : build_dir/target/<progname>
|
|
||||||
ipk or apk packages : bin/packages/*/base
|
|
||||||
|
|
||||||
8) Installing to openwrt to use with zapret
|
|
||||||
|
|
||||||
zapret with or without binaries should be already installed in /opt/zapret.
|
|
||||||
Install ipk's or apk's with all compiled progs using opkg or apk.
|
|
||||||
Bins are placed to /opt/zapret/binaries/my.
|
|
||||||
Or copy binaries there manually and set chmod 755 to them.
|
|
||||||
Run install_bin.sh or install_easy.sh. They will use bins in 'my' folder.
|
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
debian,ubuntu :
|
|
||||||
|
|
||||||
apt install make gcc zlib1g-dev libcap-dev libnetfilter-queue-dev libsystemd-dev
|
|
||||||
make -C /opt/zapret systemd
|
|
||||||
|
|
||||||
FreeBSD :
|
|
||||||
|
|
||||||
make -C /opt/zapret
|
|
||||||
|
|
||||||
OpenBSD :
|
|
||||||
|
|
||||||
make -C /opt/zapret bsd
|
|
||||||
|
|
||||||
MacOS :
|
|
||||||
|
|
||||||
make -C /opt/zapret mac
|
|
@ -1,29 +0,0 @@
|
|||||||
Windows x64
|
|
||||||
|
|
||||||
1) Download latest cygwin for windows 7
|
|
||||||
|
|
||||||
curl -O https://www.cygwin.com/setup-x86_64.exe
|
|
||||||
setup-x86_64.exe --allow-unsupported-windows --no-verify --site http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2024/01/30/231215
|
|
||||||
|
|
||||||
2) During setup install packages : make gcc-core zlib-devel
|
|
||||||
|
|
||||||
3) Run Cygwin.bat
|
|
||||||
|
|
||||||
4) cd to %ZAPRET_BASE%/nfq
|
|
||||||
|
|
||||||
cd C:/Users/user/Downloads/zapret/nfq
|
|
||||||
|
|
||||||
5) Compile
|
|
||||||
|
|
||||||
make cygwin64
|
|
||||||
|
|
||||||
use winws.exe
|
|
||||||
|
|
||||||
6) Take windivert.dll and windivert64.sys here : https://reqrypt.org/download
|
|
||||||
Choose version 2.2.2 for Windows 10 and 2.2.0 for Windows 7.
|
|
||||||
|
|
||||||
7) Copy cygwin1.dll, winws.exe, windivert.dll and windivert64.sys to one folder.
|
|
||||||
|
|
||||||
8) Run winws.exe from cmd.exe running as administrator.
|
|
||||||
winws will not run from cygwin shell with cygwin1.dll copy in it's folder.
|
|
||||||
winws will not run without cygwin1.dll outside of cygwin shell.
|
|
@ -24,8 +24,8 @@ define Build/Compile
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/ip2net/install
|
define Package/ip2net/install
|
||||||
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
$(INSTALL_DIR) $(1)/opt/zapret/ip2net
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ip2net $(1)/opt/zapret/binaries/my
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ip2net $(1)/opt/zapret/ip2net
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,ip2net))
|
$(eval $(call BuildPackage,ip2net))
|
||||||
|
@ -24,8 +24,8 @@ define Build/Compile
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/mdig/install
|
define Package/mdig/install
|
||||||
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
$(INSTALL_DIR) $(1)/opt/zapret/mdig
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdig $(1)/opt/zapret/binaries/my
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdig $(1)/opt/zapret/mdig
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,mdig))
|
$(eval $(call BuildPackage,mdig))
|
||||||
|
@ -25,8 +25,8 @@ define Build/Compile
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/nfqws/install
|
define Package/nfqws/install
|
||||||
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
$(INSTALL_DIR) $(1)/opt/zapret/nfq
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/nfqws $(1)/opt/zapret/binaries/my
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/nfqws $(1)/opt/zapret/nfq
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,nfqws))
|
$(eval $(call BuildPackage,nfqws))
|
||||||
|
@ -25,8 +25,8 @@ define Build/Compile
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/tpws/install
|
define Package/tpws/install
|
||||||
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
$(INSTALL_DIR) $(1)/opt/zapret/tpws
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tpws $(1)/opt/zapret/binaries/my
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tpws $(1)/opt/zapret/tpws
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,tpws))
|
$(eval $(call BuildPackage,tpws))
|
||||||
|
@ -12,7 +12,7 @@ iptables -t mangle -I POSTROUTING -p udp --dport 443 -m mark ! --mark 0x40000000
|
|||||||
# auto hostlist with avoiding wrong ACK numbers in RST,ACK packets sent by russian DPI
|
# auto hostlist with avoiding wrong ACK numbers in RST,ACK packets sent by russian DPI
|
||||||
sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
|
sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
|
||||||
iptables -t mangle -I POSTROUTING -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:12 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
iptables -t mangle -I POSTROUTING -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:12 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
||||||
iptables -t mangle -I PREROUTING -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:3 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
iptables -t mangle -I PREROUTING -p tcp -m multiport --sports 80,443 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
|
||||||
|
|
||||||
|
|
||||||
For TPROXY :
|
For TPROXY :
|
||||||
|
282
docs/manual_setup.txt
Normal file
282
docs/manual_setup.txt
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
Пример ручной установки на debian-подобную систему
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
На debian основано большое количество дистрибутивов linux, включая ubuntu.
|
||||||
|
Здесь рассматриваются прежде всего Debian 8+ и Ubuntu 16+.
|
||||||
|
Но с большой вероятностью может сработать и на производных от них.
|
||||||
|
Главное условие - наличие systemd, apt и нескольких стандартных пакетов в репозитории.
|
||||||
|
|
||||||
|
Установить пакеты :
|
||||||
|
apt-get update
|
||||||
|
apt-get install ipset curl dnsutils git
|
||||||
|
|
||||||
|
Если хотите использовать nftables, то нужен пакет nftables, а ipset не обязателен.
|
||||||
|
|
||||||
|
Скопировать директорию zapret в /opt или скачать через git :
|
||||||
|
cd /opt
|
||||||
|
git clone --depth 1 https://github.com/bol-van/zapret
|
||||||
|
|
||||||
|
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики.
|
||||||
|
/opt/zapret/install_bin.sh
|
||||||
|
АЛЬТЕРНАТИВА : make -C /opt/zapret. Получите динамические бинарики под вашу ось.
|
||||||
|
Для сборки требуются dev пакеты : zlib1g-dev libcap-dev libnetfilter-queue-dev
|
||||||
|
|
||||||
|
Создать конфиг по умолчанию :
|
||||||
|
cp /opt/zapret/config.default /opt/zapret/config
|
||||||
|
|
||||||
|
Настроить параметры согласно разделу "Выбор параметров".
|
||||||
|
|
||||||
|
Создать user листы по умолчанию :
|
||||||
|
cp /opt/zapret/ipset/zapret-hosts-user-exclude.txt.default /opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||||
|
echo nonexistent.domain >/opt/zapret/ipset/zapret-hosts-user.txt
|
||||||
|
touch /opt/zapret/ipset/zapret-hosts-user-ipban.txt
|
||||||
|
|
||||||
|
Создать ссылку на service unit в systemd :
|
||||||
|
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system
|
||||||
|
|
||||||
|
Удалить старые листы, если они были созданы ранее :
|
||||||
|
/opt/zapret/ipset/clear_lists.sh
|
||||||
|
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||||
|
Выполнить скрипт обновления листа :
|
||||||
|
/opt/zapret/ipset/get_config.sh
|
||||||
|
Настроить таймер systemd для обновления листа :
|
||||||
|
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /lib/systemd/system
|
||||||
|
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /lib/systemd/system
|
||||||
|
|
||||||
|
Принять изменения в systemd :
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
Включить автозапуск службы :
|
||||||
|
systemctl enable zapret
|
||||||
|
|
||||||
|
Включить таймер обновления листа :
|
||||||
|
systemctl enable zapret-list-update.timer
|
||||||
|
|
||||||
|
Запустить службу :
|
||||||
|
systemctl start zapret
|
||||||
|
|
||||||
|
Шпаргалка по управлению службой и таймером :
|
||||||
|
|
||||||
|
enable auto start : systemctl enable zapret
|
||||||
|
disable auto start : systemctl disable zapret
|
||||||
|
start : systemctl start zapret
|
||||||
|
stop : systemctl stop zapret
|
||||||
|
status, output messages : systemctl status zapret
|
||||||
|
timer info : systemctl list-timer
|
||||||
|
delete service : systemctl disable zapret ; rm /lib/systemd/system/zapret.service
|
||||||
|
delete timer : systemctl disable zapret-list-update.timer ; rm /lib/systemd/system/zapret-list-update.*
|
||||||
|
|
||||||
|
Centos 7+, Fedora
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Centos с 7 версии и более-менее новые федоры построены на systemd.
|
||||||
|
В качестве пакетного менеджера используется yum.
|
||||||
|
|
||||||
|
Установить пакеты :
|
||||||
|
yum install -y curl ipset dnsutils git
|
||||||
|
|
||||||
|
Далее все аналогично debian.
|
||||||
|
|
||||||
|
OpenSUSE
|
||||||
|
--------
|
||||||
|
|
||||||
|
Новые OpenSUSE основаны на systemd и менеджере пакетов zypper.
|
||||||
|
|
||||||
|
Установить пакеты :
|
||||||
|
zypper --non-interactive install curl ipset
|
||||||
|
|
||||||
|
Далее все аналогично debian, кроме расположения systemd.
|
||||||
|
В opensuse он находится не в /lib/systemd, а в /usr/lib/systemd.
|
||||||
|
Правильные команды будут :
|
||||||
|
|
||||||
|
ln -fs /opt/zapret/init.d/systemd/zapret.service /usr/lib/systemd/system
|
||||||
|
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /usr/lib/systemd/system
|
||||||
|
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /usr/lib/systemd/system
|
||||||
|
|
||||||
|
Arch linux
|
||||||
|
----------
|
||||||
|
|
||||||
|
Построен на базе systemd.
|
||||||
|
|
||||||
|
Установить пакеты :
|
||||||
|
pacman -Syy
|
||||||
|
pacman --noconfirm -S ipset curl
|
||||||
|
|
||||||
|
Далее все аналогично debian.
|
||||||
|
|
||||||
|
Gentoo
|
||||||
|
------
|
||||||
|
|
||||||
|
Эта система использует OpenRC - улучшенную версию sysvinit.
|
||||||
|
Установка пакетов производится командой : emerge <package_name>
|
||||||
|
Пакеты собираются из исходников.
|
||||||
|
|
||||||
|
Требуются все те же ipset, curl, git для скачивания с github.
|
||||||
|
git и curl по умолчанию могут присутствовать, ipset отсутствует.
|
||||||
|
|
||||||
|
emerge ipset
|
||||||
|
|
||||||
|
Настроить параметры согласно разделу "Выбор параметров".
|
||||||
|
|
||||||
|
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики.
|
||||||
|
/opt/zapret/install_bin.sh
|
||||||
|
АЛЬТЕРНАТИВА : make -C /opt/zapret. Получите динамические бинарики под вашу ось.
|
||||||
|
|
||||||
|
Удалить старые листы, если они были созданы ранее :
|
||||||
|
/opt/zapret/ipset/clear_lists.sh
|
||||||
|
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||||
|
Выполнить скрипт обновления листа :
|
||||||
|
/opt/zapret/ipset/get_config.sh
|
||||||
|
Зашедулить обновление листа :
|
||||||
|
crontab -e
|
||||||
|
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
||||||
|
|
||||||
|
Подключить init скрипт :
|
||||||
|
|
||||||
|
ln -fs /opt/zapret/init.d/openrc/zapret /etc/init.d
|
||||||
|
rc-update add zapret
|
||||||
|
|
||||||
|
Запустить службу :
|
||||||
|
|
||||||
|
rc-service zapret start
|
||||||
|
|
||||||
|
Шпаргалка по управлению службой :
|
||||||
|
|
||||||
|
enable auto start : rc-update add zapret
|
||||||
|
disable auto start : rc-update del zapret
|
||||||
|
start : rc-service zapret start
|
||||||
|
stop : rc-service zapret stop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ручная установка на openwrt/LEDE 15.xx-21.xx
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
!!! Данная инструкция написана для систем, основанных на iptables+firewall3
|
||||||
|
!!! В новых версиях openwrt переходит на nftables+firewall4, инструкция неприменима. Пользуйтесь install_easy.sh
|
||||||
|
|
||||||
|
Установить дополнительные пакеты :
|
||||||
|
opkg update
|
||||||
|
opkg install iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra ipset curl
|
||||||
|
(ipv6) opkg install ip6tables-mod-nat
|
||||||
|
(опционально) opkg install gzip
|
||||||
|
(опционально) opkg install coreutils-sort
|
||||||
|
|
||||||
|
ЭКОНОМИЯ МЕСТА :
|
||||||
|
|
||||||
|
gzip от busybox в разы медленней полноценного варианта. gzip используется скриптами получения листов.
|
||||||
|
sort от busybox медленней полноценного варианта и жрет намного больше памяти. sort используется скриптами получения листов.
|
||||||
|
iptables-mod-nfqueue можно выкинуть, если не будем пользоваться nfqws
|
||||||
|
curl можно выкинуть, если для получения ip листа будет использоваться только get_user.sh
|
||||||
|
|
||||||
|
Самая главная трудность - скомпилировать программы на C. Это можно сделать на linux x64 при помощи SDK, который
|
||||||
|
можно скачать с официального сайта openwrt или LEDE. Но процесс кросс компиляции - это всегда сложности.
|
||||||
|
Недостаточно запустить make как на традиционной linux системе.
|
||||||
|
Поэтому в binaries имеются готовые статические бинарики для всех самых распространенных архитектур.
|
||||||
|
Статическая сборка означает, что бинарик не зависит от типа libc (glibc, uclibc или musl) и наличия установленных so.
|
||||||
|
Его можно использовать сразу. Лишь бы подходил тип CPU. У ARM и MIPS есть несколько версий.
|
||||||
|
Скорее всего найдется рабочий вариант. Если нет - вам придется собирать самостоятельно.
|
||||||
|
Для всех поддерживаемых архитектур бинарики запакованы upx. На текущий момент все, кроме mips64.
|
||||||
|
|
||||||
|
Скопировать директорию "zapret" в /opt на роутер.
|
||||||
|
|
||||||
|
Если места достаточно, самый простой способ :
|
||||||
|
opkg update
|
||||||
|
opkg install git-http
|
||||||
|
mkdir /opt
|
||||||
|
cd /opt
|
||||||
|
git clone --depth 1 https://github.com/bol-van/zapret
|
||||||
|
|
||||||
|
Если места немного :
|
||||||
|
opkg update
|
||||||
|
opkg install openssh-sftp-server unzip
|
||||||
|
ifconfig br-lan
|
||||||
|
Скачать на комп с github zip архив кнопкой "Clone or download"->Download ZIP
|
||||||
|
Скопировать средствами sftp zip архив на роутер в /tmp.
|
||||||
|
mkdir /opt
|
||||||
|
cd /opt
|
||||||
|
unzip /tmp/zapret-master.zip
|
||||||
|
mv zapret-master zapret
|
||||||
|
rm /tmp/zapret-master.zip
|
||||||
|
|
||||||
|
Если места совсем мало :
|
||||||
|
На linux системе скачать и распаковать zapret. Оставить необходимый минимум файлов.
|
||||||
|
Запаковать в архив zapret.tar.gz.
|
||||||
|
nc -l -p 1111 <zapret.tar.gz
|
||||||
|
На роутере
|
||||||
|
cd /tmp
|
||||||
|
nc <linux_system_ip> 1111 >zapret.tar.gz
|
||||||
|
|
||||||
|
Не стоит работать с распакованной версией zapret на windows. Потеряются ссылки и chmod.
|
||||||
|
|
||||||
|
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики.
|
||||||
|
/opt/zapret/install_bin.sh
|
||||||
|
|
||||||
|
Создать ссылку на скрипт запуска :
|
||||||
|
ln -fs /opt/zapret/init.d/openwrt/zapret /etc/init.d
|
||||||
|
Создать ссылку на скрипт события поднятия интерфейса :
|
||||||
|
ln -fs /opt/zapret/init.d/openwrt/90-zapret /etc/hotplug.d/iface
|
||||||
|
|
||||||
|
Создать конфиг по умолчанию :
|
||||||
|
cp /opt/zapret/config.default /opt/zapret/config
|
||||||
|
|
||||||
|
Настроить параметры согласно разделу "Выбор параметров".
|
||||||
|
|
||||||
|
Создать user листы по умолчанию :
|
||||||
|
cp /opt/zapret/ipset/zapret-hosts-user-exclude.txt.default /opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||||
|
echo nonexistent.domain >/opt/zapret/ipset/zapret-hosts-user.txt
|
||||||
|
touch /opt/zapret/ipset/zapret-hosts-user-ipban.txt
|
||||||
|
|
||||||
|
Удалить старые листы, если они были созданы ранее :
|
||||||
|
/opt/zapret/ipset/clear_lists.sh
|
||||||
|
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||||
|
Выполнить скрипт обновления листа :
|
||||||
|
/opt/zapret/ipset/get_config.sh
|
||||||
|
Зашедулить обновление листа :
|
||||||
|
crontab -e
|
||||||
|
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
||||||
|
|
||||||
|
Включить автозапуск службы и запустить ее :
|
||||||
|
/etc/init.d/zapret enable
|
||||||
|
/etc/init.d/zapret start
|
||||||
|
ПРИМЕЧАНИЕ : на этапе старта системы интерфейсы еще не подняты. в некоторых случаях невозможно правильно
|
||||||
|
сформировать параметры запуска демонов, не зная имя физического интерфейса LAN.
|
||||||
|
Cкрипт из /etc/hotplug.d/iface перезапустит демоны по событию поднятия LAN.
|
||||||
|
|
||||||
|
Создать ссылку на firewall include :
|
||||||
|
ln -fs /opt/zapret/init.d/openwrt/firewall.zapret /etc/firewall.zapret
|
||||||
|
Проверить была ли создана ранее запись о firewall include :
|
||||||
|
uci show firewall | grep firewall.zapret
|
||||||
|
Если firewall.zapret нет, значит добавить :
|
||||||
|
uci add firewall include
|
||||||
|
uci set firewall.@include[-1].path="/etc/firewall.zapret"
|
||||||
|
uci set firewall.@include[-1].reload="1"
|
||||||
|
uci commit firewall
|
||||||
|
Проверить не включен ли flow offload :
|
||||||
|
uci show firewall.@defaults[0]
|
||||||
|
Если flow_offloading=1 или flow_offloading_hw=1 ,
|
||||||
|
uci set firewall.@defaults[0].flow_offloading=0
|
||||||
|
uci set firewall.@defaults[0].flow_offloading_hw=0
|
||||||
|
uci commit firewall
|
||||||
|
Перезапустить фаервол :
|
||||||
|
fw3 restart
|
||||||
|
|
||||||
|
Посмотреть через iptables -nL, ip6tables -nL или через luci вкладку "firewall" появились ли нужные правила.
|
||||||
|
|
||||||
|
ЭКОНОМИЯ МЕСТА : если его мало, то можно оставить в директории zapret лишь подкаталоги
|
||||||
|
ipset, common, файл config, init.d/openwrt.
|
||||||
|
Далее нужно создать подкаталоги с реально используемыми бинариками (ip2net, mdig, tpws, nfq)
|
||||||
|
и скопировать туда из binaries рабочие executables.
|
||||||
|
|
||||||
|
ЕСЛИ ВСЕ ПЛОХО С МЕСТОМ : откажитесь от работы со списком РКН. используйте только get_user.sh
|
||||||
|
|
||||||
|
ЕСЛИ СОВСЕМ ВСЕ УЖАСНО С МЕСТОМ : берете tpws и делаете все своими руками. поднятие iptables, автостарт бинарика.
|
||||||
|
С некоторых версий скрипты запуска zapret без ipset не работают (он требуется для ip exclude)
|
||||||
|
|
||||||
|
СОВЕТ : Покупайте только роутеры с USB. В USB можно воткнуть флэшку и вынести на нее корневую файловую систему
|
||||||
|
или использовать ее в качестве оверлея. Не надо мучать себя, запихивая незапихиваемое в 8 мб встроенной флэшки.
|
||||||
|
Для комфортной работы с zapret нужен роутер с 16 Mb встроенной памяти или USB разъемом и 128+ Mb RAM.
|
||||||
|
На 64 Mb без swap будут проблемы с листами РКН. Если у вас только 64 Mb, и вы хотите листы РКН, подключите swap.
|
||||||
|
32 Mb для современных версий openwrt - конфигурация на грани живучести. Возможны хаотические падения процессов в oom.
|
||||||
|
Работа с листами РКН невозможна в принципе.
|
||||||
|
|
@ -19,8 +19,8 @@ For dpi desync attack :
|
|||||||
nft delete table inet ztest
|
nft delete table inet ztest
|
||||||
nft create table inet ztest
|
nft create table inet ztest
|
||||||
nft add chain inet ztest post "{type filter hook postrouting priority mangle;}"
|
nft add chain inet ztest post "{type filter hook postrouting priority mangle;}"
|
||||||
nft add rule inet ztest post meta mark and 0x40000000 == 0 tcp dport "{80,443}" ct original packets 1-6 queue num 200 bypass
|
nft add rule inet ztest post meta mark and 0x40000000 == 0 tcp dport "{80,443}" ct original packets 1-12 queue num 200 bypass
|
||||||
nft add rule inet ztest post meta mark and 0x40000000 == 0 udp dport 443 ct original packets 1-6 queue num 200 bypass
|
nft add rule inet ztest post meta mark and 0x40000000 == 0 udp dport 443 ct original packets 1-12 queue num 200 bypass
|
||||||
|
|
||||||
# auto hostlist with avoiding wrong ACK numbers in RST,ACK packets sent by russian DPI
|
# auto hostlist with avoiding wrong ACK numbers in RST,ACK packets sent by russian DPI
|
||||||
sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
|
sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user