mirror of
https://github.com/bol-van/zapret.git
synced 2024-12-23 23:04:23 +00:00
wireguard docs: more info, enable nozapret filter
This commit is contained in:
parent
bc8e44fc94
commit
a38d4e79cd
@ -231,11 +231,33 @@ config rule
|
|||||||
# ping 192.168.254.3
|
# ping 192.168.254.3
|
||||||
|
|
||||||
|
|
||||||
|
--- Подготовка zapret ---
|
||||||
|
|
||||||
|
Выполните install_easy.sh. Он настроит режим обхода DPI. Если обход DPI не нужен - выберите MODE=filter.
|
||||||
|
Так же он заресолвит домены из ipset/zapret-hosts-user-ipban.txt и внесет крон-джоб для периодического обновления ip.
|
||||||
|
|
||||||
|
Если вы используете в своих правилах ipset zapret, то он ресолвится и обновляется только, если выбран режим фильтрации обхода DPI по ipset.
|
||||||
|
По сути он вам нужен исключительно, если обход DPI не помогает. Например, удается как-то пробить http, но не удается пробить https.
|
||||||
|
И при этом вы хотите, чтобы на VPN направлялись только ip из скачанного ip листа, в добавок к заресолвленному ipset/zapret-hosts-user.txt.
|
||||||
|
Именно этот случай и рассмотрен в данном примере. Если это не так, то убирайте правила с портом 443 из нижеприведенных правил iptables/nftables.
|
||||||
|
Если не хотите ограничиваться листом, и хотите направлять все на порт 443, то уберите фильтры из правил iptables/nftables,
|
||||||
|
связанные с ipset/nfset "zapret".
|
||||||
|
|
||||||
|
Фильтрация по именам доменов (MODE_FILTER=hostlist) невозможна средствами iptables/nftables. Она производится исключительно в tpws и nfqws
|
||||||
|
по результатам анализа протокола прикладного уровня, иногда достаточно сложного, связанного с дешифировкой пакета (QUIC).
|
||||||
|
Скачиваются листы с именами доменов, не ip адресами. ipset/zapret-hosts-user.txt не ресолвится, а используется как hostlist.
|
||||||
|
Потому вам нельзя расчитывать на ipset zapret.
|
||||||
|
Тем не менее при выборе этого режима фильтрации , либо вовсе при ее отсутствии (MODE_FILTER=none), ipset/zapret-hosts-user-ipban.txt
|
||||||
|
все равно ресолвится. Вы всегда можете расчитывать на ipset/nfset "ipban", "nozapret".
|
||||||
|
|
||||||
|
"nozapret" - это ipset/nfset, связанный с системой исключения ip. Сюда загоняется все из ipset/zapret-hosts-user-exclude.txt после ресолвинга.
|
||||||
|
|
||||||
|
|
||||||
--- Маркировка трафика ---
|
--- Маркировка трафика ---
|
||||||
|
|
||||||
Завернем на vpn все из ipset zapret на tcp:443 и все из ipban.
|
Завернем на vpn все из ipset zapret на tcp:443 и все из ipban.
|
||||||
OUTPUT относится к исходящим с роутера пакетам, PREROUTING - ко всем остальным.
|
OUTPUT относится к исходящим с роутера пакетам, PREROUTING - ко всем остальным.
|
||||||
Если с самого роутера ничего заруливать не надо, можно опустить все до команд с PREROUTING.
|
Если с самого роутера ничего заруливать не надо, можно опустить часть, отвечающую за OUTPUT.
|
||||||
|
|
||||||
--/etc/firewall.user----------------------------
|
--/etc/firewall.user----------------------------
|
||||||
. /opt/zapret/init.d/openwrt/functions
|
. /opt/zapret/init.d/openwrt/functions
|
||||||
@ -245,13 +267,13 @@ create_ipset no-update
|
|||||||
network_find_wan_all wan_iface
|
network_find_wan_all wan_iface
|
||||||
for ext_iface in $wan_iface; do
|
for ext_iface in $wan_iface; do
|
||||||
network_get_device DEVICE $ext_iface
|
network_get_device DEVICE $ext_iface
|
||||||
ipt OUTPUT -t mangle -o $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -j MARK --set-mark 0x800/0x800
|
ipt OUTPUT -t mangle -o $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
ipt OUTPUT -t mangle -o $DEVICE -m set --match-set ipban dst -j MARK --set-mark 0x800/0x800
|
ipt OUTPUT -t mangle -o $DEVICE -m set --match-set ipban dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
done
|
done
|
||||||
|
|
||||||
network_get_device DEVICE lan
|
network_get_device DEVICE lan
|
||||||
ipt PREROUTING -t mangle -i $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -j MARK --set-mark 0x800/0x800
|
ipt PREROUTING -t mangle -i $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
ipt PREROUTING -t mangle -i $DEVICE -m set --match-set ipban dst -j MARK --set-mark 0x800/0x800
|
ipt PREROUTING -t mangle -i $DEVICE -m set --match-set ipban dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
# /etc/init.d/firewall restart
|
# /etc/init.d/firewall restart
|
||||||
@ -264,6 +286,7 @@ ipt PREROUTING -t mangle -i $DEVICE -m set --match-set ipban dst -j MARK --set-m
|
|||||||
будут устанавливаться без сжатия squashfs. Убедитесь, что у вас достаточно места.
|
будут устанавливаться без сжатия squashfs. Убедитесь, что у вас достаточно места.
|
||||||
Либо сразу настраивайте образ через image builder.
|
Либо сразу настраивайте образ через image builder.
|
||||||
|
|
||||||
|
Фаервол fw4 работает в одноименной nftable - "inet fw4". "inet" означает, что таблица принимает и ipv4, и ipv6.
|
||||||
Поскольку для маркировки трафика используется nfset, принадлежащий таблице zapret, цепочки необходимо помещать в ту же таблицу.
|
Поскольку для маркировки трафика используется nfset, принадлежащий таблице zapret, цепочки необходимо помещать в ту же таблицу.
|
||||||
Для синхронизации лучше всего использовать хук
|
Для синхронизации лучше всего использовать хук
|
||||||
INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"
|
INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"
|
||||||
@ -282,18 +305,36 @@ EOF
|
|||||||
cat << EOF | nft -f -
|
cat << EOF | nft -f -
|
||||||
add chain inet $ZAPRET_NFT_TABLE my_output { type route hook output priority mangle; }
|
add chain inet $ZAPRET_NFT_TABLE my_output { type route hook output priority mangle; }
|
||||||
flush chain inet $ZAPRET_NFT_TABLE my_output
|
flush chain inet $ZAPRET_NFT_TABLE my_output
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif ip daddr @ipban meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif ip daddr @ipban ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif tcp dport 443 ip daddr @zapret meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif tcp dport 443 ip daddr @zapret ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
|
|
||||||
add chain inet $ZAPRET_NFT_TABLE my_prerouting { type filter hook prerouting priority mangle; }
|
add chain inet $ZAPRET_NFT_TABLE my_prerouting { type filter hook prerouting priority mangle; }
|
||||||
flush chain inet $ZAPRET_NFT_TABLE my_prerouting
|
flush chain inet $ZAPRET_NFT_TABLE my_prerouting
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif ip daddr @ipban meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif ip daddr @ipban ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif tcp dport 443 ip daddr @zapret meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif tcp dport 443 ip daddr @zapret ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
EOF
|
EOF
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
# /etc/init.d/zapret restart_fw
|
# /etc/init.d/zapret restart_fw
|
||||||
|
|
||||||
|
Проверка правил :
|
||||||
|
# /etc/init.d/zapret list_table
|
||||||
|
или
|
||||||
|
# nft -t list table inet zapret
|
||||||
|
|
||||||
|
Должны быть цепочки my_prerouting и my_output.
|
||||||
|
|
||||||
|
Проверка заполнения nfsets :
|
||||||
|
# nft list set inet zapret zapret
|
||||||
|
# nft list set inet zapret ipban
|
||||||
|
# nft list set inet zapret nozapret
|
||||||
|
|
||||||
|
Проверка заполнения множеств lanif, wanif, wanif6, link_local :
|
||||||
|
# /etc/init.d/zapret list_ifsets
|
||||||
|
|
||||||
|
Должны присутствовать имена интерфейсов во множествах lanif, wanif.
|
||||||
|
wanif6 заполняется только при включении ipv6.
|
||||||
|
link_local нужен только для tpws при включении ipv6.
|
||||||
|
|
||||||
--- По поводу двойного NAT ---
|
--- По поводу двойного NAT ---
|
||||||
|
|
||||||
@ -370,14 +411,14 @@ create_ipset no-update
|
|||||||
network_find_wan_all wan_iface
|
network_find_wan_all wan_iface
|
||||||
for ext_iface in $wan_iface; do
|
for ext_iface in $wan_iface; do
|
||||||
network_get_device DEVICE $ext_iface
|
network_get_device DEVICE $ext_iface
|
||||||
ipt OUTPUT -t mangle -o $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -j MARK --set-mark 0x800/0x800
|
ipt OUTPUT -t mangle -o $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
ipt OUTPUT -t mangle -o $DEVICE -m set --match-set ipban dst -j MARK --set-mark 0x800/0x800
|
ipt OUTPUT -t mangle -o $DEVICE -m set --match-set ipban dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
ipt OUTPUT -t mangle -o $DEVICE -j MARK --set-mark 0x1000/0x1000
|
ipt OUTPUT -t mangle -o $DEVICE -j MARK --set-mark 0x1000/0x1000
|
||||||
done
|
done
|
||||||
|
|
||||||
network_get_device DEVICE lan
|
network_get_device DEVICE lan
|
||||||
ipt PREROUTING -t mangle -i $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -j MARK --set-mark 0x800/0x800
|
ipt PREROUTING -t mangle -i $DEVICE -p tcp --dport 443 -m set --match-set zapret dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
ipt PREROUTING -t mangle -i $DEVICE -m set --match-set ipban dst -j MARK --set-mark 0x800/0x800
|
ipt PREROUTING -t mangle -i $DEVICE -m set --match-set ipban dst -m set ! --match-set nozapret dst -j MARK --set-mark 0x800/0x800
|
||||||
|
|
||||||
# do masquerade for OUTPUT to ensure correct outgoing address
|
# do masquerade for OUTPUT to ensure correct outgoing address
|
||||||
ipt postrouting_tunvps_rule -t nat -m mark --mark 0x1000/0x1000 -j MASQUERADE
|
ipt postrouting_tunvps_rule -t nat -m mark --mark 0x1000/0x1000 -j MASQUERADE
|
||||||
@ -407,16 +448,16 @@ EOF
|
|||||||
cat << EOF | nft -f -
|
cat << EOF | nft -f -
|
||||||
add chain inet $ZAPRET_NFT_TABLE my_output { type route hook output priority mangle; }
|
add chain inet $ZAPRET_NFT_TABLE my_output { type route hook output priority mangle; }
|
||||||
flush chain inet $ZAPRET_NFT_TABLE my_output
|
flush chain inet $ZAPRET_NFT_TABLE my_output
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif ip daddr @ipban meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif ip daddr @ipban ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif tcp dport 443 ip daddr @zapret meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif tcp dport 443 ip daddr @zapret ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif meta mark set mark or 0x1000
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif meta mark set mark or 0x1000
|
||||||
|
|
||||||
add chain inet $ZAPRET_NFT_TABLE my_prerouting { type filter hook prerouting priority mangle; }
|
add chain inet $ZAPRET_NFT_TABLE my_prerouting { type filter hook prerouting priority mangle; }
|
||||||
flush chain inet $ZAPRET_NFT_TABLE my_prerouting
|
flush chain inet $ZAPRET_NFT_TABLE my_prerouting
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname $DEVICE ct state new ct mark set ct mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname $DEVICE ct state new ct mark set ct mark or 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname != $DEVICE meta mark set ct mark and 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname != $DEVICE meta mark set ct mark and 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif ip daddr @ipban meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif ip daddr @ipban ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif tcp dport 443 ip daddr @zapret meta mark set mark or 0x800
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif tcp dport 443 ip daddr @zapret ip daddr != @nozapret meta mark set mark or 0x800
|
||||||
|
|
||||||
add chain inet $ZAPRET_NFT_TABLE my_nat { type nat hook postrouting priority 100 ; }
|
add chain inet $ZAPRET_NFT_TABLE my_nat { type nat hook postrouting priority 100 ; }
|
||||||
flush chain inet $ZAPRET_NFT_TABLE my_nat
|
flush chain inet $ZAPRET_NFT_TABLE my_nat
|
||||||
|
Loading…
Reference in New Issue
Block a user