mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 21:42:59 +03:00
Compare commits
503 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
63256a142f | ||
|
4a9a8bd48e | ||
|
b996abd5ce | ||
|
12461de3b0 | ||
|
7dab497b57 | ||
|
41dbba1c4c | ||
|
d19f6c19a4 | ||
|
b12b1a5a17 | ||
|
8022e2576d | ||
|
f4ea264ba9 | ||
|
061acb27e4 | ||
|
8eb830d304 | ||
|
2fb93c6add | ||
|
ad5c246629 | ||
|
58e73d0331 | ||
|
9ebeff621a | ||
|
69df271a16 | ||
|
e285b2401d | ||
|
6e1e7e43bc | ||
|
d04419a60c | ||
|
fc1bf47e82 | ||
|
929df3f094 | ||
|
7272b243cb | ||
|
72d48d957a | ||
|
f4069d484a | ||
|
1c82b0a6af | ||
|
c08e69aa65 | ||
|
8097f08020 | ||
|
4cae291e6f | ||
|
82ad5508dc | ||
|
fa8ddcfc79 | ||
|
b560e32e18 | ||
|
67e1aee8a8 | ||
|
1d8385a9b4 | ||
|
340dec62a7 | ||
|
db4585c02f | ||
|
e792ca67ef | ||
|
e5e53db6b8 | ||
|
e14ee9d1fe | ||
|
360506ba4e | ||
|
aa769e05c6 | ||
|
6b0bc7a96b | ||
|
93bdfdb6be | ||
|
6d95eada2b | ||
|
e452ee8688 | ||
|
6e746f94cd | ||
|
9fd61e5d38 | ||
|
0c0fba4461 | ||
|
056e4c588a | ||
|
4b288643ac | ||
|
cbdee74e5f | ||
|
743eb5a4a2 | ||
|
4e8e3a9ed9 | ||
|
b9b91a0e68 | ||
|
9de7b66eef | ||
|
a2ffa3455d | ||
|
60b97dbed0 | ||
|
e56e4f5f35 | ||
|
5305ea83c8 | ||
|
14b3dd459b | ||
|
66fda2c33d | ||
|
77df43b9cb | ||
|
85f2b37c88 | ||
|
e2d600fcc6 | ||
|
37eda0ad98 | ||
|
770be21e1c | ||
|
1b880d42f9 | ||
|
6387315c0b | ||
|
3d4b395bfe | ||
|
55950ed7d0 | ||
|
f2b0341484 | ||
|
b2d89c5d22 | ||
|
778b611f86 | ||
|
ffaf91c251 | ||
|
326b42fafd | ||
|
94d4238af2 | ||
|
15e22fa1bd | ||
|
bd8decddc5 | ||
|
2db1ebafe3 | ||
|
33bcf6f7b4 | ||
|
f037f1acb2 | ||
|
cdd9b32b27 | ||
|
7934125c09 | ||
|
6493d55977 | ||
|
cafbb17e70 | ||
|
9ac73f7d2f | ||
|
08a6e8e069 | ||
|
644a934099 | ||
|
0eec445af0 | ||
|
b8acc1b979 | ||
|
123eb057ae | ||
|
56d06456fb | ||
|
a6efe05aa6 | ||
|
a1d29b0c3a | ||
|
756603338b | ||
|
8b73e2ea8e | ||
|
2a0e952153 | ||
|
1065202349 | ||
|
307d38f6af | ||
|
8ac4fc0af5 | ||
|
af89d03118 | ||
|
d89daaaeac | ||
|
f62b289cb5 | ||
|
5f9fa28251 | ||
|
bd67b41f32 | ||
|
00619c8dab | ||
|
58e26c3e9d | ||
|
eddbc3c3e0 | ||
|
2cc73de15c | ||
|
9762f2d22b | ||
|
8c9aa188c3 | ||
|
2f151c0943 | ||
|
9498456c4a | ||
|
860607bce2 | ||
|
94f59511f0 | ||
|
b07ce8d8ca | ||
|
6fc4e75d89 | ||
|
fb894a8e2c | ||
|
86352430d4 | ||
|
e5f20d05f6 | ||
|
b610f08a9c | ||
|
8bbd2d97d5 | ||
|
972f665d88 | ||
|
a9a497fa77 | ||
|
14a170c9a3 | ||
|
d4080b6c6f | ||
|
20f1fb2cfd | ||
|
35c3216287 | ||
|
628f629c49 | ||
|
33d3059dc8 | ||
|
f5cf7917fb | ||
|
b39508de7f | ||
|
c69a92f901 | ||
|
aba1fdeb04 | ||
|
02c76a4fb6 | ||
|
2ff6ec03aa | ||
|
80a0b38295 | ||
|
e0e935c2ae | ||
|
31cf106728 | ||
|
502e34a96d | ||
|
29ab747e5b | ||
|
b897ec5d9a | ||
|
440878cb9f | ||
|
1935473bd1 | ||
|
de6cadf8e4 | ||
|
d509497bb8 | ||
|
d7949f70b1 | ||
|
0912b7d104 | ||
|
29ff997a3f | ||
|
f21bd0c63c | ||
|
41693b1008 | ||
|
d000345043 | ||
|
f986da9ae2 | ||
|
c6e729b237 | ||
|
12a800db97 | ||
|
5e84656707 | ||
|
e87965cd2f | ||
|
4585cc4656 | ||
|
c0a08d3353 | ||
|
77474c9f76 | ||
|
15b2ee2d82 | ||
|
709279d6cf | ||
|
35d676406c | ||
|
9aff90b466 | ||
|
bc463930aa | ||
|
6fe9471077 | ||
|
884213f7ac | ||
|
80bf409615 | ||
|
3fe46ffb82 | ||
|
42c52014ee | ||
|
8aabc8b743 | ||
|
5df9b5d109 | ||
|
50616896c8 | ||
|
eb1cf7c15a | ||
|
b878c313f8 | ||
|
869e2cd8f9 | ||
|
8a996b415e | ||
|
62d2de904b | ||
|
a02be13dd1 | ||
|
c6058a4ea9 | ||
|
27ffe77243 | ||
|
3eb969cdaf | ||
|
73040bb156 | ||
|
c2bda9388f | ||
|
6cd0de7a0b | ||
|
85d319568c | ||
|
b3fd5c5dc1 | ||
|
202b7224fb | ||
|
647ee11917 | ||
|
63fbf2857c | ||
|
9c8636081c | ||
|
578d6d6db8 | ||
|
9ab9aef32b | ||
|
d4a72df111 | ||
|
ead91ae4f7 | ||
|
49385b6e57 | ||
|
499f9824ab | ||
|
2be5f1221a | ||
|
fef64e8849 | ||
|
675a8e52b6 | ||
|
d9a24b4105 | ||
|
594e613fcb | ||
|
7b7a6dd154 | ||
|
dcf78a76e5 | ||
|
fc42f6e20e | ||
|
45b93f3a45 | ||
|
1476cd2149 | ||
|
4ec6e5fa9f | ||
|
9d8398628c | ||
|
fe98c9d972 | ||
|
720c2fad86 | ||
|
7b057491af | ||
|
8e7b694076 | ||
|
e8395eea56 | ||
|
6e619eba1a | ||
|
f8bd218e67 | ||
|
207a6faf33 | ||
|
991e3534a6 | ||
|
ebb22dfa3f | ||
|
9bd65e0c1d | ||
|
5b337b6015 | ||
|
4189803693 | ||
|
1175b171ba | ||
|
bea643c967 | ||
|
addc813956 | ||
|
0f1721d2c4 | ||
|
abdc8d9449 | ||
|
9e9136cffd | ||
|
c802069a11 | ||
|
4e5caf4087 | ||
|
de63ee7321 | ||
|
d6688b935d | ||
|
21e08ca55e | ||
|
c4f53549b1 | ||
|
08645997f8 | ||
|
e42a545ebc | ||
|
8324c04a41 | ||
|
166847ba92 | ||
|
1904f01cf4 | ||
|
4ae1ad053d | ||
|
7d9946b007 | ||
|
86462f4cee | ||
|
669182c133 | ||
|
f81bb51f4a | ||
|
d4ff423add | ||
|
b14ff9b647 | ||
|
277c5f9e00 | ||
|
f016e5a4dc | ||
|
fc3912b4fe | ||
|
c01a764e1f | ||
|
4ecb40e03b | ||
|
be9c300cb3 | ||
|
839c720f60 | ||
|
127bec2f14 | ||
|
15879c82f6 | ||
|
9d188840c1 | ||
|
35a28f4efe | ||
|
78ea379e0f | ||
|
007cbe600b | ||
|
d1a8e276b5 | ||
|
eb2f5b5f45 | ||
|
a623cef95d | ||
|
f00b45a28e | ||
|
422faaa29c | ||
|
16a9e3f9c9 | ||
|
7c5869bc29 | ||
|
feb3dd4d73 | ||
|
b4204ca2ba | ||
|
89a67e6952 | ||
|
34199b151c | ||
|
c6962f575e | ||
|
9c8662b25e | ||
|
fedb62df66 | ||
|
44c19c1743 | ||
|
56aa481226 | ||
|
9184317549 | ||
|
a3048ae120 | ||
|
fc44d74f2b | ||
|
1779cfad30 | ||
|
4856be4ef1 | ||
|
033043bdc0 | ||
|
46284938ce | ||
|
09378553b9 | ||
|
6b85884cdf | ||
|
1b14a8210c | ||
|
182fe850db | ||
|
62b081e9fb | ||
|
e3e7449d74 | ||
|
669f1978a3 | ||
|
57c4b1a2b2 | ||
|
ac7385391e | ||
|
50a52d79ec | ||
|
d77a1c8cd6 | ||
|
395b9480c5 | ||
|
4470c73e48 | ||
|
9812630ef2 | ||
|
818520452e | ||
|
f0cc49c7e3 | ||
|
cc30a90556 | ||
|
e12dd237c2 | ||
|
19e7fca627 | ||
|
a0e1742861 | ||
|
a93b142dcd | ||
|
fc2d511d78 | ||
|
5207104c06 | ||
|
06147836d0 | ||
|
46eb30a897 | ||
|
840617a0c3 | ||
|
f7ae5eaae5 | ||
|
827a838715 | ||
|
db5c60e19f | ||
|
256c2d7e50 | ||
|
07c8cd3d5d | ||
|
8979384847 | ||
|
2a134b864a | ||
|
765770d2c7 | ||
|
ba58892011 | ||
|
63f40dd8a4 | ||
|
30443ed31d | ||
|
a8432a3caa | ||
|
53546a8d92 | ||
|
97f20a1cb5 | ||
|
2816f93831 | ||
|
8624ae1c4a | ||
|
ebcec6e79d | ||
|
faa9a3e714 | ||
|
69007b5098 | ||
|
ee44aebcc4 | ||
|
667d32a3e7 | ||
|
9a087fc6c9 | ||
|
3ad029efe0 | ||
|
92c27ea7d8 | ||
|
7b850e2e0e | ||
|
c48398871c | ||
|
8629a29eaa | ||
|
df69ce1991 | ||
|
c56e672600 | ||
|
677feecada | ||
|
5d6c91f7e9 | ||
|
cde3ca15c2 | ||
|
fa6f6822a1 | ||
|
ce33a27c57 | ||
|
4d47749e7c | ||
|
42090daf24 | ||
|
36cd8ca3b2 | ||
|
9ec2d685e3 | ||
|
46d31003e2 | ||
|
ef9f9ae428 | ||
|
e5bcc5f682 | ||
|
4961e0d1a5 | ||
|
6a20fa27b3 | ||
|
01af779f2a | ||
|
feb332140a | ||
|
a85a0f19da | ||
|
611292281c | ||
|
14e9fc4d43 | ||
|
8bc74333b8 | ||
|
28797184e4 | ||
|
08238664cd | ||
|
187affb844 | ||
|
5a82874624 | ||
|
200cd9caf2 | ||
|
f8b3dca6f5 | ||
|
f973a6f3a6 | ||
|
9b3bbb7285 | ||
|
284f911785 | ||
|
a17e490851 | ||
|
c1e670be23 | ||
|
918d52c2e6 | ||
|
1c7080ca68 | ||
|
656c549113 | ||
|
41b4c6650b | ||
|
925fdd633a | ||
|
c16b125a55 | ||
|
591b246ed6 | ||
|
07b8567beb | ||
|
f0e68527ba | ||
|
6514b6f4c3 | ||
|
d551f2f4ae | ||
|
acb07c9792 | ||
|
da3eedb443 | ||
|
d7ce95ed50 | ||
|
c2413e4944 | ||
|
ad0aa27860 | ||
|
b5ade9baf0 | ||
|
68c7631713 | ||
|
4f31fb3b6b | ||
|
22534787a9 | ||
|
9e79c17a9f | ||
|
9345bdfe1e | ||
|
72cca01172 | ||
|
2466d5c758 | ||
|
43c24c501b | ||
|
b9962a0308 | ||
|
29520c9827 | ||
|
14dc328940 | ||
|
3bdedb2a9d | ||
|
f45fb421d8 | ||
|
6695245357 | ||
|
ca39017d10 | ||
|
7129923a70 | ||
|
9f1687ffec | ||
|
e1e55b1653 | ||
|
abe507c9c3 | ||
|
fa1430b604 | ||
|
a5e6b20e71 | ||
|
b79d8becd3 | ||
|
905a9519ce | ||
|
527c11e86f | ||
|
6250a26127 | ||
|
e1d417578d | ||
|
7ee5306d06 | ||
|
db0caf7d58 | ||
|
34c6c5e9ba | ||
|
868d115c5d | ||
|
969ddfb84c | ||
|
a5be4da22e | ||
|
a9dbb74973 | ||
|
6481f2204e | ||
|
a585d09c03 | ||
|
7f4356aa7e | ||
|
773da6383b | ||
|
07cd46bf90 | ||
|
c07fe4225a | ||
|
4374ca2290 | ||
|
cf320a7a2d | ||
|
086a0e4408 | ||
|
b28447e796 | ||
|
cff12dd431 | ||
|
cbba8a7876 | ||
|
bbeee9d640 | ||
|
466a142ebe | ||
|
8aa8bb5941 | ||
|
ffa701e497 | ||
|
e0063eecd5 | ||
|
2d530d5f63 | ||
|
95b3830afd | ||
|
0ea3215187 | ||
|
27745a3747 | ||
|
c68b75d4ac | ||
|
f4d31cdcb6 | ||
|
f2ea38cf93 | ||
|
9e84bf7a42 | ||
|
4559169e78 | ||
|
1987209613 | ||
|
913372a574 | ||
|
0ea4709726 | ||
|
9eef0ca113 | ||
|
88d7fd4088 | ||
|
1144f9afdc | ||
|
380d104407 | ||
|
31d4eaaa14 | ||
|
b2f94b083c | ||
|
4bdce508af | ||
|
74b6281770 | ||
|
a581e13498 | ||
|
174772e87f | ||
|
8f8e082ab4 | ||
|
7abf105777 | ||
|
db7078dcca | ||
|
cc38472e32 | ||
|
8b4b8c3fb0 | ||
|
228572afb5 | ||
|
ebb89c48e0 | ||
|
067be122b3 | ||
|
a4632ef6d7 | ||
|
c964677913 | ||
|
e0f8ff06b9 | ||
|
34e632a1f8 | ||
|
4adeb9499b | ||
|
149a7ed927 | ||
|
f22dcb2487 | ||
|
794336a509 | ||
|
d8082fbaec | ||
|
abb3cd3316 | ||
|
7f0eccb39c | ||
|
f8bf9bbb38 | ||
|
1548c86f87 | ||
|
bb74fa765a | ||
|
ee5d4c5017 | ||
|
d04eb28c7f | ||
|
ce2a51a137 | ||
|
4f37c19771 | ||
|
9d43dfdc71 | ||
|
b176af43a4 | ||
|
a6ef91124e | ||
|
1a722c1b78 | ||
|
2452a529eb | ||
|
daac1d2127 | ||
|
acfd844a49 | ||
|
2464d27550 | ||
|
1fdf5477b4 | ||
|
6686c4a190 | ||
|
e979f88963 | ||
|
840292e7d9 | ||
|
43cd263cff | ||
|
d8c07baab7 | ||
|
6e8dbb045a | ||
|
8446470de3 | ||
|
552ddee0da | ||
|
6be62d775b | ||
|
d59c77a899 | ||
|
37b5651976 |
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1,4 +1,3 @@
|
|||||||
* 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
Normal file
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
blank_issues_enabled: false
|
19
.github/ISSUE_TEMPLATE/issue-warning.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/issue-warning.md
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
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
Normal file
488
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,488 @@
|
|||||||
|
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
|
41
.github/workflows/libnetfilter_queue-android.patch
vendored
Normal file
41
.github/workflows/libnetfilter_queue-android.patch
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
--- 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,11 +1,12 @@
|
|||||||
/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,6 +15,32 @@ 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 \
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,9 +0,0 @@
|
|||||||
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
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,721 +0,0 @@
|
|||||||
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
|
|
Binary file not shown.
@ -1,13 +0,0 @@
|
|||||||
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
|
|
@ -1,9 +0,0 @@
|
|||||||
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
|
|
@ -1,9 +0,0 @@
|
|||||||
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"
|
|
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
%~dp0killall -HUP winws
|
|
@ -1,12 +0,0 @@
|
|||||||
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
|
|
@ -1,7 +0,0 @@
|
|||||||
call :srvdel winws1
|
|
||||||
rem call :srvdel winws2
|
|
||||||
goto :eof
|
|
||||||
|
|
||||||
:srvdel
|
|
||||||
net stop %1
|
|
||||||
sc delete %1
|
|
@ -1,2 +0,0 @@
|
|||||||
sc start winws1
|
|
||||||
rem sc start winws2
|
|
@ -1,2 +0,0 @@
|
|||||||
net stop winws1
|
|
||||||
rem net stop winws2
|
|
@ -1,4 +0,0 @@
|
|||||||
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%"
|
|
@ -1,4 +0,0 @@
|
|||||||
schtasks /End /TN winws1
|
|
||||||
schtasks /Delete /TN winws1 /F
|
|
||||||
rem schtasks /End /TN winws2
|
|
||||||
rem schtasks /Delete /TN winws2 /F
|
|
@ -1,2 +0,0 @@
|
|||||||
schtasks /Run /TN winws1
|
|
||||||
rem schtasks /Run /TN winws2
|
|
@ -1,2 +0,0 @@
|
|||||||
schtasks /End /TN winws1
|
|
||||||
rem schtasks /End /TN winws2
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
718
blockcheck.sh
718
blockcheck.sh
File diff suppressed because it is too large
Load Diff
@ -60,11 +60,22 @@ 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
|
||||||
@ -230,7 +241,7 @@ fix_sbin_path()
|
|||||||
# it can calculate floating point expr
|
# it can calculate floating point expr
|
||||||
calc()
|
calc()
|
||||||
{
|
{
|
||||||
awk "BEGIN { print $*}";
|
LC_ALL=C awk "BEGIN { print $*}";
|
||||||
}
|
}
|
||||||
|
|
||||||
fsleep_setup()
|
fsleep_setup()
|
||||||
@ -307,18 +318,27 @@ 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' | cut -c 1-17)
|
r=1$(echo $rs | $MD5 | sed 's/[^0-9]//g' | $RCUT)
|
||||||
echo $(( ($r % ($2-$1+1)) + $1 ))
|
echo $(( ($r % ($2-$1+1)) + $1 ))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -400,6 +420,7 @@ 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
|
||||||
@ -408,8 +429,7 @@ 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 it's not the best option"
|
echo "WARNING ! it would work but on ${UNAME:-$(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,6 +3,8 @@ 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,13 +1,28 @@
|
|||||||
require_root()
|
require_root()
|
||||||
{
|
{
|
||||||
local exe
|
local exe preserve_env
|
||||||
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 && exec sudo sh "$exe"
|
exists sudo && {
|
||||||
exists su && exec su root -c "sh \"$exe\""
|
echo elevating with sudo
|
||||||
|
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 @@
|
|||||||
readonly GET_LIST_PREFIX=/ipset/get_
|
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\"" | sed "s/$EDITVAR_NEWLINE_DELIMETER /$EDITVAR_NEWLINE_DELIMETER\n/g"
|
echo "$v\"" | tr '\n' ' ' | tr -d '\r' | sed -e 's/^ *//' -e 's/ *$//' -e "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,6 +170,7 @@ list_vars()
|
|||||||
echo_var $1
|
echo_var $1
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
openrc_test()
|
openrc_test()
|
||||||
@ -190,6 +191,7 @@ check_system()
|
|||||||
|
|
||||||
get_fwtype
|
get_fwtype
|
||||||
OPENWRT_FW3=
|
OPENWRT_FW3=
|
||||||
|
OPENWRT_FW4=
|
||||||
|
|
||||||
local info
|
local info
|
||||||
UNAME=$(uname)
|
UNAME=$(uname)
|
||||||
@ -201,27 +203,35 @@ 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 uci && [ "$INIT" = "procd" ] ; then
|
elif [ -f "/etc/openwrt_release" ] && exists opkg || exists apk && 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="openwrt firewall uses fw3"
|
info="${info}firewall 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
|
||||||
info="openwrt firewall uses fw4. flow offloading requires nftables."
|
OPENWRT_FW4=1
|
||||||
|
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.txt for manual setup info.
|
echo you have to do it manually. check readme.md 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
|
||||||
@ -232,11 +242,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.txt for supported systems and manual setup info.
|
echo easy installer only supports Linux and MacOS. check readme.md 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" ] && echo $info
|
[ -n "$info" ] && printf "${info}\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_free_space_mb()
|
get_free_space_mb()
|
||||||
@ -420,14 +430,21 @@ check_kmod()
|
|||||||
}
|
}
|
||||||
check_package_exists_openwrt()
|
check_package_exists_openwrt()
|
||||||
{
|
{
|
||||||
[ -n "$(opkg list $1)" ]
|
[ -n "$($OPENWRT_PACKAGER 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()
|
||||||
{
|
{
|
||||||
@ -516,9 +533,8 @@ restart_openwrt_firewall()
|
|||||||
|
|
||||||
local FW=fw4
|
local FW=fw4
|
||||||
[ -n "$OPENWRT_FW3" ] && FW=fw3
|
[ -n "$OPENWRT_FW3" ] && FW=fw3
|
||||||
$FW -q restart || {
|
exists $FW && $FW -q restart || {
|
||||||
echo could not restart firewall $FW
|
echo could not restart firewall $FW
|
||||||
exitp 30
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
remove_openwrt_firewall()
|
remove_openwrt_firewall()
|
||||||
@ -601,11 +617,17 @@ 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"
|
||||||
@ -634,6 +656,7 @@ 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)
|
||||||
@ -641,39 +664,23 @@ 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 || {
|
"$APTGET" install -y --no-install-recommends $PKGS dnsutils || no_prereq_exit
|
||||||
echo could not install prerequisites
|
elif [ -x "$DNF" ] ; then
|
||||||
exitp 6
|
"$DNF" -y install $PKGS || no_prereq_exit
|
||||||
}
|
|
||||||
elif [ -x "$YUM" ] ; then
|
elif [ -x "$YUM" ] ; then
|
||||||
"$YUM" -y install $PKGS || {
|
"$YUM" -y install $PKGS || no_prereq_exit
|
||||||
echo could not install prerequisites
|
|
||||||
exitp 6
|
|
||||||
}
|
|
||||||
elif [ -x "$PACMAN" ] ; then
|
elif [ -x "$PACMAN" ] ; then
|
||||||
"$PACMAN" -Syy
|
"$PACMAN" -Syy
|
||||||
"$PACMAN" --noconfirm -S $PKGS || {
|
"$PACMAN" --noconfirm -S $PKGS || no_prereq_exit
|
||||||
echo could not install prerequisites
|
|
||||||
exitp 6
|
|
||||||
}
|
|
||||||
elif [ -x "$ZYPPER" ] ; then
|
elif [ -x "$ZYPPER" ] ; then
|
||||||
"$ZYPPER" --non-interactive install $PKGS || {
|
"$ZYPPER" --non-interactive install $PKGS || no_prereq_exit
|
||||||
echo could not install prerequisites
|
|
||||||
exitp 6
|
|
||||||
}
|
|
||||||
elif [ -x "$EOPKG" ] ; then
|
elif [ -x "$EOPKG" ] ; then
|
||||||
"$EOPKG" -y install $PKGS || {
|
"$EOPKG" -y install $PKGS || no_prereq_exit
|
||||||
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 || {
|
"$APK" add $PKGS || no_prereq_exit
|
||||||
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
|
||||||
@ -682,16 +689,59 @@ 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 PKGS="curl" UPD=0 local pkg_iptables
|
||||||
|
|
||||||
case "$FWTYPE" in
|
case "$FWTYPE" in
|
||||||
iptables)
|
iptables)
|
||||||
PKGS="$PKGS ipset iptables iptables-mod-extra iptables-mod-nfqueue iptables-mod-filter iptables-mod-ipopt iptables-mod-conntrack-extra"
|
pkg_iptables=iptables
|
||||||
[ "$DISABLE_IPV6" != "1" ] && PKGS="$PKGS ip6tables ip6tables-mod-nat ip6tables-extra"
|
check_package_exists_openwrt iptables-zz-legacy && pkg_iptables=iptables-zz-legacy
|
||||||
|
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"
|
||||||
@ -703,9 +753,9 @@ check_prerequisites_openwrt()
|
|||||||
else
|
else
|
||||||
echo \* installing prerequisites
|
echo \* installing prerequisites
|
||||||
|
|
||||||
opkg update
|
$OPENWRT_PACKAGER_UPDATE
|
||||||
UPD=1
|
UPD=1
|
||||||
opkg install $PKGS || {
|
$OPENWRT_PACKAGER_INSTALL $PKGS || {
|
||||||
echo could not install prerequisites
|
echo could not install prerequisites
|
||||||
exitp 6
|
exitp 6
|
||||||
}
|
}
|
||||||
@ -718,10 +768,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" ] && {
|
||||||
opkg update
|
$OPENWRT_PACKAGER_UPDATE
|
||||||
UPD=1
|
UPD=1
|
||||||
}
|
}
|
||||||
opkg install --force-overwrite gzip
|
$OPENWRT_PACKAGER_INSTALL --force-overwrite gzip
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
is_linked_to_busybox sort && {
|
is_linked_to_busybox sort && {
|
||||||
@ -731,10 +781,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" ] && {
|
||||||
opkg update
|
$OPENWRT_PACKAGER_UPDATE
|
||||||
UPD=1
|
UPD=1
|
||||||
}
|
}
|
||||||
opkg install --force-overwrite coreutils-sort
|
$OPENWRT_PACKAGER_INSTALL --force-overwrite coreutils-sort
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
[ "$FSLEEP" = 0 ] && is_linked_to_busybox sleep && {
|
[ "$FSLEEP" = 0 ] && is_linked_to_busybox sleep && {
|
||||||
@ -743,10 +793,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" ] && {
|
||||||
opkg update
|
$OPENWRT_PACKAGER_UPDATE
|
||||||
UPD=1
|
UPD=1
|
||||||
}
|
}
|
||||||
opkg install --force-overwrite coreutils-sleep
|
$OPENWRT_PACKAGER_INSTALL --force-overwrite coreutils-sleep
|
||||||
fsleep_setup
|
fsleep_setup
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -779,3 +829,37 @@ 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,5 +1,9 @@
|
|||||||
std_ports
|
std_ports
|
||||||
readonly ipt_connbytes="-m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes"
|
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()
|
||||||
{
|
{
|
||||||
@ -132,7 +136,7 @@ _fw_tpws4()
|
|||||||
|
|
||||||
ipt_print_op $1 "$2" "tpws (port $3)"
|
ipt_print_op $1 "$2" "tpws (port $3)"
|
||||||
|
|
||||||
rule="$2 $IPSET_EXCLUDE dst -j DNAT --to $TPWS_LOCALHOST4:$3"
|
rule="$2 $IPSET_EXCLUDE dst $IPBAN_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
|
||||||
@ -160,7 +164,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"
|
rule="$2 $IPSET_EXCLUDE6 dst $IPBAN_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
|
||||||
@ -349,27 +353,37 @@ ipt_do_nfqws_in_out()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zapret_do_firewall_standard_rules_ipt()
|
zapret_do_firewall_standard_tpws_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()
|
||||||
{
|
{
|
||||||
|
55
common/linux_daemons.sh
Normal file
55
common/linux_daemons.sh
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
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,6 +4,8 @@
|
|||||||
# 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()
|
||||||
{
|
{
|
||||||
@ -125,3 +127,13 @@ 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,4 +1,5 @@
|
|||||||
readonly HOSTLIST_MARKER="<HOSTLIST>"
|
HOSTLIST_MARKER="<HOSTLIST>"
|
||||||
|
HOSTLIST_NOAUTO_MARKER="<HOSTLIST_NOAUTO>"
|
||||||
|
|
||||||
find_hostlists()
|
find_hostlists()
|
||||||
{
|
{
|
||||||
@ -24,10 +25,9 @@ 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
|
local v parm parm1 parm2 parm3 parm4 parm5 parm6 parm7 parm8 parmNA
|
||||||
eval v="\$$1"
|
eval v="\$$1"
|
||||||
contains "$v" "$HOSTLIST_MARKER" &&
|
if contains "$v" "$HOSTLIST_MARKER" || contains "$v" "$HOSTLIST_NOAUTO_MARKER"; then
|
||||||
{
|
|
||||||
[ "$MODE_FILTER" = hostlist -o "$MODE_FILTER" = autohostlist ] &&
|
[ "$MODE_FILTER" = hostlist -o "$MODE_FILTER" = autohostlist ] &&
|
||||||
{
|
{
|
||||||
find_hostlists
|
find_hostlists
|
||||||
@ -40,13 +40,16 @@ 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
|
||||||
readonly nft_connbytes="ct original packets"
|
nft_connbytes="ct original packets"
|
||||||
|
|
||||||
# required for : nft -f -
|
# required for : nft -f -
|
||||||
create_dev_stdin
|
create_dev_stdin
|
||||||
@ -263,28 +263,6 @@ 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
|
||||||
@ -370,9 +348,8 @@ 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
|
||||||
if nft_hw_offload_supported $i; then
|
# first try to add interface itself
|
||||||
nft_create_or_update_flowtable 'offload' $i
|
nft_create_or_update_flowtable 'offload' $i 2>/dev/null
|
||||||
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)
|
||||||
@ -380,7 +357,6 @@ 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
|
||||||
@ -411,8 +387,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 $FW_EXTRA_POST dnat ip to $TPWS_LOCALHOST4:$port
|
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_pre iifname @lanif $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
|
||||||
prepare_route_localnet
|
prepare_route_localnet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -426,9 +402,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 $FW_EXTRA_POST dnat ip6 to [::1]:$port
|
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
|
||||||
[ -n "$3" ] && {
|
[ -n "$3" ] && {
|
||||||
nft_insert_rule dnat_pre $filter ip6 daddr != @nozapret6 $FW_EXTRA_POST dnat ip6 to iifname map @link_local:$port
|
nft_insert_rule dnat_pre $filter ip6 daddr != @nozapret6 ip6 daddr != @ipban6 $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
|
||||||
@ -640,25 +616,31 @@ nft_apply_nfqws_in_out()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zapret_apply_firewall_standard_rules_nft()
|
zapret_apply_firewall_standard_tpws_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,20 +50,22 @@ 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> placeholders to engage standard hostlists and autohostlist in ipset dir
|
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
|
||||||
# they are replaced to empty string if MODE_FILTER does not satisfy
|
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
|
||||||
|
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
|
||||||
TPWS_SOCKS_OPT="
|
TPWS_SOCKS_OPT="
|
||||||
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
||||||
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST>
|
--filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST>
|
||||||
"
|
"
|
||||||
|
|
||||||
TPWS_ENABLE=0
|
TPWS_ENABLE=0
|
||||||
TPWS_PORTS=80,443
|
TPWS_PORTS=80,443
|
||||||
# use <HOSTLIST> placeholders to engage standard hostlists and autohostlist in ipset dir
|
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
|
||||||
# they are replaced to empty string if MODE_FILTER does not satisfy
|
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
|
||||||
|
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
|
||||||
TPWS_OPT="
|
TPWS_OPT="
|
||||||
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
--filter-tcp=80 --methodeol <HOSTLIST> --new
|
||||||
--filter-tcp=443 --split-tls=sni --disorder <HOSTLIST>
|
--filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST>
|
||||||
"
|
"
|
||||||
|
|
||||||
NFQWS_ENABLE=0
|
NFQWS_ENABLE=0
|
||||||
@ -83,18 +85,19 @@ 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> placeholders to engage standard hostlists and autohostlist in ipset dir
|
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
|
||||||
# they are replaced to empty string if MODE_FILTER does not satisfy
|
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
|
||||||
|
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
|
||||||
NFQWS_OPT="
|
NFQWS_OPT="
|
||||||
--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
|
--filter-tcp=80 --dpi-desync=fake,multisplit --dpi-desync-split-pos=method+2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
|
||||||
--filter-tcp=443 --dpi-desync=fake,disorder2 --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-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST>
|
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST_NOAUTO>
|
||||||
"
|
"
|
||||||
|
|
||||||
# none,ipset,hostlist,autohostlist
|
# none,ipset,hostlist,autohostlist
|
||||||
MODE_FILTER=none
|
MODE_FILTER=none
|
||||||
|
|
||||||
# openwrt only : donttouch,none,software,hardware
|
# 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-2021 bol-van
|
Copyright (c) 2016-2024 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=split2
|
/opt/zapret/nfq/dvtws --port=989 --daemon --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||||
```
|
```
|
||||||
|
|
||||||
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=split2
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||||
```
|
```
|
||||||
|
|
||||||
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=split2
|
/opt/zapret/nfq/dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||||
```
|
```
|
||||||
|
|
||||||
Reinjection loop avoidance. FreeBSD artificially ignores sockarg for ipv6 in
|
Reinjection loop avoidance. FreeBSD artificially ignores sockarg for ipv6 in
|
||||||
@ -217,8 +217,9 @@ 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. Because git is absent the most convinient way to copy files is ssh.
|
commands.
|
||||||
curl is present by default.
|
curl is present by default. You can use it to download `tar.gz` release directly from github.
|
||||||
|
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
|
||||||
@ -227,9 +228,6 @@ 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)
|
||||||
```
|
```
|
||||||
@ -247,7 +245,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=split2
|
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
|
# required for newer pfsense versions (2.6.0 tested) to return ipfw to functional state
|
||||||
pfctl -d ; pfctl -e
|
pfctl -d ; pfctl -e
|
||||||
@ -282,7 +280,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-http-req=method --split-pos=2
|
tpws --daemon --port=988 --enable-pf --bind-addr=127.0.0.1 --bind-iface6=em1 --bind-linklocal=force --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:
|
||||||
@ -344,7 +342,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=split2
|
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||||
```
|
```
|
||||||
|
|
||||||
`dwtws` only for table zapret with the exception of table nozapret :
|
`dwtws` only for table zapret with the exception of table nozapret :
|
||||||
@ -377,7 +375,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=split2
|
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||||
```
|
```
|
||||||
|
|
||||||
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
Normal file
725
docs/bsd.md
Normal file
@ -0,0 +1,725 @@
|
|||||||
|
# Настройка 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
476
docs/bsd.txt
@ -1,476 +0,0 @@
|
|||||||
Поддерживаемые версии
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
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=split2
|
./dvtws --port=989 --dpi-desync=multisplit --dpi-desync-split-pos=2
|
||||||
|
|
||||||
; 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,3 +341,147 @@ 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,42 +1,57 @@
|
|||||||
How to compile native programs for use in openwrt
|
How to compile native programs for use in openwrt
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
1) <fetch correct version of openwrt>
|
1) Install required packages to the host system :
|
||||||
|
|
||||||
cd ~
|
debian,ubuntu : apt install build-essential patch libncurses-dev python3-distutils unzip gawk wget git
|
||||||
|
fedora: dnf install make patch gcc g++ ncurses-devel git perl
|
||||||
|
|
||||||
<chaos calmer>
|
Other packages may be required on your distribution. Look for the errors.
|
||||||
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
|
|
||||||
|
|
||||||
cd openwrt
|
2) Download latest SDK for your target platform from https://downloads.openwrt.org
|
||||||
|
|
||||||
2) ./scripts/feeds update -a
|
examples :
|
||||||
./scripts/feeds install -a
|
|
||||||
|
|
||||||
3) #add zapret packages to build root
|
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
|
||||||
#copy package descriptions
|
cd openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64
|
||||||
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
|
|
||||||
|
|
||||||
4) make menuconfig
|
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
|
||||||
#select your target architecture
|
cd openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64
|
||||||
#select packages Network/Zapret/* as "M"
|
|
||||||
|
|
||||||
5) make toolchain/compile
|
3) Install required libs
|
||||||
|
|
||||||
6) make package/tpws/compile
|
./scripts/feeds update base packages
|
||||||
make package/nfqws/compile
|
./scripts/feeds install libnetfilter-queue zlib libcap
|
||||||
make package/ip2net/compile
|
|
||||||
make package/mdig/compile
|
|
||||||
|
|
||||||
7) find bin -name tpws*.ipk
|
4) Prepare openwrt package definitions
|
||||||
#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.
|
||||||
|
16
docs/compile/build_howto_unix.txt
Normal file
16
docs/compile/build_howto_unix.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
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
|
29
docs/compile/build_howto_windows.txt
Normal file
29
docs/compile/build_howto_windows.txt
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
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/ip2net
|
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ip2net $(1)/opt/zapret/ip2net
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ip2net $(1)/opt/zapret/binaries/my
|
||||||
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/mdig
|
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdig $(1)/opt/zapret/mdig
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdig $(1)/opt/zapret/binaries/my
|
||||||
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/nfq
|
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/nfqws $(1)/opt/zapret/nfq
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/nfqws $(1)/opt/zapret/binaries/my
|
||||||
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/tpws
|
$(INSTALL_DIR) $(1)/opt/zapret/binaries/my
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tpws $(1)/opt/zapret/tpws
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tpws $(1)/opt/zapret/binaries/my
|
||||||
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:6 -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
|
||||||
|
|
||||||
|
|
||||||
For TPROXY :
|
For TPROXY :
|
||||||
|
@ -1,282 +0,0 @@
|
|||||||
Пример ручной установки на 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-12 queue num 200 bypass
|
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 udp dport 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
|
||||||
|
|
||||||
# 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