mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-11 17:29:16 +05:00
ipset: rewrite IPSET_HOOK logic. now scripts outputs ip addresses
This commit is contained in:
parent
027b3818c3
commit
e079e3a607
4
config
4
config
@ -13,8 +13,8 @@ SET_MAXELEM=522288
|
|||||||
# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough
|
# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough
|
||||||
# too large hashsize will waste lots of RAM
|
# too large hashsize will waste lots of RAM
|
||||||
IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM"
|
IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM"
|
||||||
# create_ipset hook
|
# dynamically generate additional ip. $1 = ipset/nfset/table name
|
||||||
#IPSET_POST_HOOK="/etc/zapret.ipset.hook"
|
#IPSET_HOOK="/etc/zapret.ipset.hook"
|
||||||
|
|
||||||
# options for ip2net. "-4" or "-6" auto added by ipset create script
|
# options for ip2net. "-4" or "-6" auto added by ipset create script
|
||||||
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
|
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
|
||||||
|
@ -158,6 +158,9 @@ NFQUEUE работает без изменений.
|
|||||||
|
|
||||||
Рекомендуется версия nft 1.0.2 или выше.
|
Рекомендуется версия nft 1.0.2 или выше.
|
||||||
|
|
||||||
|
Относительно старые версии ядра и/или утилиты nft могут вызывать ошибки.
|
||||||
|
В частности, на ubuntu 18.04 с ядром 4.15 будут проблемы. В 20.04 - работает.
|
||||||
|
|
||||||
|
|
||||||
Когда это работать не будет
|
Когда это работать не будет
|
||||||
---------------------------
|
---------------------------
|
||||||
@ -945,6 +948,10 @@ TMPDIR=/opt/zapret/tmp
|
|||||||
SET_MAXELEM=262144
|
SET_MAXELEM=262144
|
||||||
IPSET_OPT="hashsize 262144 maxelem 2097152"
|
IPSET_OPT="hashsize 262144 maxelem 2097152"
|
||||||
|
|
||||||
|
Хук, позволяющий внести ip адреса динамически. $1 = имя таблицы
|
||||||
|
Адреса выводятся в stdout. В случае nfset автоматически решается проблема возможного пересечения интервалов.
|
||||||
|
IPSET_HOOK="/etc/zapret.ipset.hook"
|
||||||
|
|
||||||
ПРО РУГАНЬ в dmesg по поводу нехватки памяти.
|
ПРО РУГАНЬ в dmesg по поводу нехватки памяти.
|
||||||
Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный ipset
|
Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный ipset
|
||||||
ядро начинает громко ругаться, ipset заполняется не полностью.
|
ядро начинает громко ругаться, ipset заполняется не полностью.
|
||||||
|
@ -19,6 +19,7 @@ NFSET_TEMP="$TMPDIR/nfset_temp.txt"
|
|||||||
NFSET_SAVERAM_MIN_FILESIZE=16384
|
NFSET_SAVERAM_MIN_FILESIZE=16384
|
||||||
NFSET_SAVERAM_CHUNK_SIZE=1000
|
NFSET_SAVERAM_CHUNK_SIZE=1000
|
||||||
|
|
||||||
|
IPSET_HOOK_TEMP="$TMPDIR/ipset_hook.txt"
|
||||||
|
|
||||||
while [ -n "$1" ]; do
|
while [ -n "$1" ]; do
|
||||||
[ "$1" = "no-update" ] && NO_UPDATE=1
|
[ "$1" = "no-update" ] && NO_UPDATE=1
|
||||||
@ -53,10 +54,15 @@ ipset_restore_chunked()
|
|||||||
|
|
||||||
|
|
||||||
ipset_get_script()
|
ipset_get_script()
|
||||||
|
{
|
||||||
|
# $1 - ipset name
|
||||||
|
sed -nEe "s/^.+$/add $1 &/p"
|
||||||
|
}
|
||||||
|
ipset_get_script_from_file()
|
||||||
{
|
{
|
||||||
# $1 - filename
|
# $1 - filename
|
||||||
# $2 - ipset name
|
# $2 - ipset name
|
||||||
zzcat "$1" | sort -u | sed -nEe "s/^.+$/add $2 &/p"
|
zzcat "$1" | sort -u | ipset_get_script $2
|
||||||
}
|
}
|
||||||
ipset_restore()
|
ipset_restore()
|
||||||
{
|
{
|
||||||
@ -75,11 +81,11 @@ ipset_restore()
|
|||||||
echo $T
|
echo $T
|
||||||
|
|
||||||
if [ "$svram" = "1" ]; then
|
if [ "$svram" = "1" ]; then
|
||||||
ipset_get_script "$2" "$1" >"$IPSET_CMD"
|
ipset_get_script_from_file "$2" "$1" >"$IPSET_CMD"
|
||||||
ipset_restore_chunked "$IPSET_CMD" $IPSET_SAVERAM_CHUNK_SIZE
|
ipset_restore_chunked "$IPSET_CMD" $IPSET_SAVERAM_CHUNK_SIZE
|
||||||
rm -f "$IPSET_CMD"
|
rm -f "$IPSET_CMD"
|
||||||
else
|
else
|
||||||
ipset_get_script "$2" "$1" | ipset -! restore
|
ipset_get_script_from_file "$2" "$1" | ipset -! restore
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
create_ipset()
|
create_ipset()
|
||||||
@ -97,7 +103,7 @@ create_ipset()
|
|||||||
for f in "$5" "$6" ; do
|
for f in "$5" "$6" ; do
|
||||||
ipset_restore "$2" "$f"
|
ipset_restore "$2" "$f"
|
||||||
done
|
done
|
||||||
ipset_post_hook "$2"
|
[ -n "$IPSET_HOOK" ] && $IPSET_HOOK $2 | ipset_get_script $2 | ipset -! restore
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -139,7 +145,13 @@ nfset_restore()
|
|||||||
# $2,$3,... - filenames
|
# $2,$3,... - filenames
|
||||||
|
|
||||||
echo "Adding to nfset $1 : $2 $3 $4 $5"
|
echo "Adding to nfset $1 : $2 $3 $4 $5"
|
||||||
nfset_get_script_multi "$@" | nft -f -
|
local hookfile
|
||||||
|
[ -n "$IPSET_HOOK" ] && {
|
||||||
|
$IPSET_HOOK $1 >"$IPSET_HOOK_TEMP"
|
||||||
|
[ -s "$IPSET_HOOK_TEMP" ] && hookfile=$IPSET_HOOK_TEMP
|
||||||
|
}
|
||||||
|
nfset_get_script_multi "$@" $hookfile | nft -f -
|
||||||
|
rm -f "$IPSET_HOOK_TEMP"
|
||||||
}
|
}
|
||||||
create_nfset()
|
create_nfset()
|
||||||
{
|
{
|
||||||
@ -156,7 +168,6 @@ create_nfset()
|
|||||||
}
|
}
|
||||||
[ "$DO_CLEAR" = "1" ] || {
|
[ "$DO_CLEAR" = "1" ] || {
|
||||||
nfset_restore $2 $4 $5
|
nfset_restore $2 $4 $5
|
||||||
ipset_post_hook "$2"
|
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -192,7 +203,7 @@ create_ipfw_table()
|
|||||||
populate_ipfw_table $name "$1"
|
populate_ipfw_table $name "$1"
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
ipset_post_hook $name
|
[ -n "$IPSET_HOOK" ] && $IPSET_HOOK $name | add_ipfw_table $name
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -211,11 +222,6 @@ print_reloading_backend()
|
|||||||
echo $s
|
echo $s
|
||||||
}
|
}
|
||||||
|
|
||||||
ipset_post_hook()
|
|
||||||
{
|
|
||||||
[ -n "$IPSET_POST_HOOK" ] && $IPSET_POST_HOOK "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
oom_adjust_high
|
oom_adjust_high
|
||||||
get_fwtype
|
get_fwtype
|
||||||
@ -227,7 +233,7 @@ if [ -n "$LISTS_RELOAD" ] ; then
|
|||||||
else
|
else
|
||||||
echo executing custom ip list reload command : $LISTS_RELOAD
|
echo executing custom ip list reload command : $LISTS_RELOAD
|
||||||
$LISTS_RELOAD
|
$LISTS_RELOAD
|
||||||
ipset_post_hook
|
[ -n "$IPSET_HOOK" ] && $IPSET_HOOK
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
case "$FWTYPE" in
|
case "$FWTYPE" in
|
||||||
|
Loading…
Reference in New Issue
Block a user