2025-03-20 03:53:56 +03:00
#!/bin/bash
set -e
if [ [ $EUID -ne 0 ] ] ; then
exec sudo " $0 " " $@ "
fi
2025-03-26 21:47:16 +03:00
error_exit( ) {
2025-03-29 16:42:15 +03:00
$TPUT_E
2025-03-26 21:47:16 +03:00
echo -e " \e[31mО шиб ка :\e[0m $1 " >& 2
exit 1
}
2025-03-20 03:53:56 +03:00
2025-03-20 14:58:09 +03:00
detect_init( ) {
2025-03-29 13:51:41 +03:00
GET_LIST_PREFIX = /ipset/get_
SYSTEMD_DIR = /lib/systemd
[ -d " $SYSTEMD_DIR " ] || SYSTEMD_DIR = /usr/lib/systemd
[ -d " $SYSTEMD_DIR " ] && SYSTEMD_SYSTEM_DIR = " $SYSTEMD_DIR /system "
INIT_SCRIPT = /etc/init.d/zapret
2025-03-20 14:58:09 +03:00
if [ -d /run/systemd/system ] ; then
INIT_SYSTEM = "systemd"
2025-03-29 13:51:41 +03:00
elif [ $SYSTEM = = openwrt ] ; then
INIT_SYSTEM = "procd"
2025-03-20 14:58:09 +03:00
elif command -v openrc-init >/dev/null 2>& 1; then
INIT_SYSTEM = "openrc"
elif command -v runit >/dev/null 2>& 1; then
INIT_SYSTEM = "runit"
2025-03-29 13:51:41 +03:00
elif [ -x /sbin/init ] && /sbin/init --version 2>& 1 | grep -qi "sysv init" ; then
INIT_SYSTEM = "sysvinit"
2025-03-20 14:58:09 +03:00
else
2025-03-31 00:27:52 +03:00
error_exit "Н е удалось определить init."
2025-03-20 14:58:09 +03:00
fi
}
2025-03-22 19:37:28 +03:00
check_zapret_exist( ) {
case " $INIT_SYSTEM " in
systemd)
2025-03-22 23:50:51 +03:00
if [ -f /etc/systemd/system/timers.target.wants/zapret-list-update.timer ] ; then
2025-03-22 19:37:28 +03:00
service_exists = true
else
service_exists = false
fi
; ;
2025-03-29 13:51:41 +03:00
procd)
if [ -f /etc/init.d/zapret ] ; then
service_exists = true
else
service_exists = false
fi
; ;
2025-03-22 19:37:28 +03:00
runit)
[ -d /etc/service/zapret ] && service_exists = true || service_exists = false
; ;
sysvinit)
[ -f /etc/init.d/zapret ] && service_exists = true || service_exists = false
; ;
*)
2025-03-22 19:50:54 +03:00
ZAPRET_EXIST = false
2025-03-22 19:37:28 +03:00
return
; ;
esac
if [ -d /opt/zapret ] ; then
dir_exists = true
[ -d /opt/zapret/binaries ] && binaries_exists = true || binaries_exists = false
else
dir_exists = false
binaries_exists = false
fi
if [ " $service_exists " = true ] && [ " $dir_exists " = true ] && [ " $binaries_exists " = true ] ; then
ZAPRET_EXIST = true
else
ZAPRET_EXIST = false
fi
}
2025-03-20 03:53:56 +03:00
check_zapret_status( ) {
2025-03-20 14:58:09 +03:00
case " $INIT_SYSTEM " in
systemd)
2025-03-20 15:56:24 +03:00
ZAPRET_ACTIVE = $( systemctl show -p ActiveState zapret | cut -d= -f2 || true )
ZAPRET_ENABLED = $( systemctl is-enabled zapret 2>/dev/null || echo "false" )
2025-03-20 14:58:09 +03:00
ZAPRET_SUBSTATE = $( systemctl show -p SubState zapret | cut -d= -f2)
if [ [ " $ZAPRET_ACTIVE " = = "active" && " $ZAPRET_SUBSTATE " = = "running" ] ] ; then
ZAPRET_ACTIVE = true
else
ZAPRET_ACTIVE = false
fi
2025-03-20 15:32:05 +03:00
2025-03-20 14:58:09 +03:00
if [ [ " $ZAPRET_ENABLED " = = "enabled" ] ] ; then
ZAPRET_ENABLED = true
else
ZAPRET_ENABLED = false
2025-03-20 15:32:05 +03:00
fi
if [ [ " $ZAPRET_ENABLED " = = "not-found" ] ] ; then
ZAPRET_ENABLED = false
fi
; ;
2025-03-20 14:58:09 +03:00
openrc)
rc-service zapret status >/dev/null 2>& 1 && ZAPRET_ACTIVE = true || ZAPRET_ACTIVE = false
rc-update show | grep -q zapret && ZAPRET_ENABLED = true || ZAPRET_ENABLED = false
2025-03-29 13:51:41 +03:00
; ;
2025-03-31 00:27:52 +03:00
openrc)
rc-service -l | grep -q "zapret" && service_exists = true || service_exists = false
; ;
2025-03-29 13:51:41 +03:00
procd)
if /etc/init.d/zapret status | grep -q "running" ; then
ZAPRET_ACTIVE = true
else
ZAPRET_ACTIVE = false
fi
if ls /etc/rc.d/ | grep -q zapret >/dev/null 2>& 1; then
ZAPRET_ENABLED = true
else
ZAPRET_ENABLED = false
fi
2025-03-20 14:58:09 +03:00
; ;
runit)
sv status zapret >/dev/null 2>& 1 && ZAPRET_ACTIVE = true || ZAPRET_ACTIVE = false
[ -L /var/service/zapret ] && ZAPRET_ENABLED = true || ZAPRET_ENABLED = false
; ;
sysvinit)
service zapret status >/dev/null 2>& 1 && ZAPRET_ACTIVE = true || ZAPRET_ACTIVE = false
; ;
esac
2025-03-20 03:53:56 +03:00
}
2025-03-21 20:17:49 +03:00
2025-03-29 13:51:41 +03:00
exists( )
{
which " $1 " >/dev/null 2>/dev/null
}
existf( )
{
type " $1 " >/dev/null 2>/dev/null
}
whichq( )
{
which $1 2>/dev/null
}
check_openwrt( ) {
if grep -q '^ID="openwrt"$' /etc/os-release; then
SYSTEM = openwrt
2025-04-02 21:44:08 +03:00
fi
}
check_tput( ) {
if command -v tput & >/dev/null; then
2025-03-29 16:42:15 +03:00
TPUT_B = "tput smcup"
TPUT_E = "tput rmcup"
2025-04-02 21:44:08 +03:00
else
TPUT_B = ""
TPUT_E = ""
2025-03-29 13:51:41 +03:00
fi
2025-03-21 20:17:49 +03:00
}
2025-03-29 13:51:41 +03:00
2025-03-21 20:17:49 +03:00
get_fwtype( ) {
[ -n " $FWTYPE " ] && return
local UNAME = " $( uname) "
case " $UNAME " in
Linux)
2025-03-29 13:51:41 +03:00
if [ [ $SYSTEM = = openwrt ] ] ; then
2025-03-31 00:27:52 +03:00
if exists iptables; then
2025-03-31 00:34:48 +03:00
iptables_version = $( iptables --version 2>& 1)
2025-03-31 00:27:52 +03:00
if [ [ " $iptables_version " = = *"legacy" * ] ] ; then
FWTYPE = "iptables"
2025-03-31 00:43:42 +03:00
return 0
2025-03-31 00:27:52 +03:00
elif [ [ " $iptables_version " = = *"nf_tables" * ] ] ; then
FWTYPE = "nftables"
2025-03-31 00:43:42 +03:00
return 0
2025-03-31 00:27:52 +03:00
else
echo "Н е удалось определить файрвол. По умолчанию установлен nftables, вы е г о можете изменить в файле /opt/zapret/config."
echo "Продолжаю через 5 секунд..."
FWTYPE = "nftables"
sleep 5
2025-03-31 00:43:42 +03:00
return 0
2025-03-31 00:27:52 +03:00
fi
2025-03-29 13:51:41 +03:00
else
2025-03-31 00:27:52 +03:00
echo "Н е удалось определить файрвол. По умолчанию установлен nftables, вы е г о можете изменить в файле /opt/zapret/config."
echo "Продолжаю через 5 секунд..."
FWTYPE = "nftables"
sleep 5
2025-03-31 00:43:42 +03:00
return 0
2025-03-29 13:51:41 +03:00
fi
fi
2025-03-21 20:17:49 +03:00
if exists iptables; then
iptables_version = $( iptables -V 2>& 1)
if [ [ " $iptables_version " = = *"legacy" * ] ] ; then
FWTYPE = "iptables"
elif [ [ " $iptables_version " = = *"nf_tables" * ] ] ; then
FWTYPE = "nftables"
else
echo "Н е удалось определить файрвол. По умолчанию установлен iptables, вы е г о можете изменить в файле /opt/zapret/config."
echo "Продолжаю через 5 секунд..."
FWTYPE = "iptables"
sleep 5
fi
else
echo "Н е удалось определить файрвол. По умолчанию установлен iptables, вы е г о можете изменить в файле /opt/zapret/config."
echo "Продолжаю через 5 секунд..."
FWTYPE = "iptables"
sleep 5
fi
; ;
FreeBSD)
if exists ipfw ; then
FWTYPE = "ipfw"
else
echo "Н е удалось определить файрвол. По умолчанию установлен iptables, вы е г о можете изменить в файле /opt/zapret/config."
echo "Продолжаю через 5 секунд..."
FWTYPE = "iptables"
sleep 5
fi
; ;
*)
echo "Н е удалось определить файрвол. По умолчанию установлен iptables, вы е г о можете изменить в файле /opt/zapret/config."
echo "Продолжаю через 5 секунд..."
FWTYPE = "iptables"
sleep 5
; ;
esac
}
2025-03-20 14:58:09 +03:00
manage_service( ) {
case " $INIT_SYSTEM " in
systemd)
SYSTEMD_PAGER = cat systemctl " $1 " zapret
; ;
openrc)
rc-service zapret " $1 "
; ;
runit)
sv " $1 " zapret
; ;
sysvinit)
service zapret " $1 "
; ;
2025-03-31 00:27:52 +03:00
procd)
2025-03-29 13:51:41 +03:00
service zapret " $1 "
2025-03-20 14:58:09 +03:00
esac
}
manage_autostart( ) {
case " $INIT_SYSTEM " in
systemd)
systemctl " $1 " zapret
; ;
runit)
if [ [ " $1 " = = "enable" ] ] ; then
ln -s /etc/sv/zapret /var/service/
else
rm -f /var/service/zapret
fi
; ;
sysvinit)
if [ [ " $1 " = = "enable" ] ] ; then
update-rc.d zapret defaults
else
update-rc.d -f zapret remove
fi
; ;
2025-03-29 13:51:41 +03:00
openrc)
service zapret " $1 "
2025-03-31 00:27:52 +03:00
; ;
procd)
service zapret " $1 "
2025-03-20 14:58:09 +03:00
esac
}
install_dependencies( ) {
kernel = " $( uname -s) "
if [ " $kernel " = "Linux" ] ; then
. /etc/os-release
2025-03-31 20:11:36 +03:00
2025-03-20 14:58:09 +03:00
declare -A command_by_ID = (
2025-03-31 20:11:36 +03:00
[ "arch" ] = "pacman -S --noconfirm ipset"
2025-03-30 21:08:24 +03:00
[ "debian" ] = "apt-get install -y iptables ipset"
[ "fedora" ] = "dnf install -y iptables ipset"
[ "ubuntu" ] = "apt-get install -y iptables ipset"
[ "mint" ] = "apt-get install -y iptables ipset"
[ "void" ] = "xbps-install -y iptables ipset"
[ "gentoo" ] = "emerge net-firewall/iptables net-firewall/ipset"
[ "opensuse" ] = "zypper install -y iptables ipset"
[ "openwrt" ] = "opkg install iptables ipset"
2025-03-30 21:46:43 +03:00
[ "altlinux" ] = "apt-get install -y iptables ipset"
2025-03-20 14:58:09 +03:00
)
if [ [ -v command_by_ID[ $ID ] ] ] ; then
eval " ${ command_by_ID [ $ID ] } "
2025-03-31 20:11:36 +03:00
else
for like in $ID_LIKE ; do
if [ [ -n " ${ command_by_ID [ $like ] } " ] ] ; then
eval " ${ command_by_ID [ $like ] } "
break
fi
done
2025-03-20 14:58:09 +03:00
fi
elif [ " $kernel " = "Darwin" ] ; then
2025-03-26 21:47:16 +03:00
error_exit "macOS не поддерживается на данный момент."
2025-03-20 14:58:09 +03:00
else
2025-03-30 21:46:43 +03:00
echo " Неизвестная О С : ${ kernel } . Установите iptables и ipset самостоятельно. " bash -c 'read -p "Нажмите Enter для продолжения..."'
2025-03-20 14:58:09 +03:00
fi
}
2025-03-20 03:53:56 +03:00
2025-03-25 03:14:08 +03:00
2025-04-02 21:44:08 +03:00
toggle_service( ) {
while true; do
clear
echo "===== Управление сервисом Запрета ====="
if [ [ $ZAPRET_ACTIVE = = true ] ] ; then echo "!Запрет запущен!" ; fi
if [ [ $ZAPRET_ACTIVE = = false ] ] ; then echo "!Запрет выключен!" ; fi
if [ [ $ZAPRET_ENABLED = = true ] ] ; then echo "!Запрет в автозагрузке!" ; fi
if [ [ $ZAPRET_ENABLED = = false ] ] ; then echo "!Запрет не в автозагрузке!" ; fi
2025-04-03 22:36:06 +03:00
echo "======================================="
2025-04-02 21:44:08 +03:00
echo " 1) $( [ [ $ZAPRET_ENABLED = = true ] ] && echo "Убрать из автозагрузки" || echo "Добавить в автозагрузку" ) "
echo " 2) $( [ [ $ZAPRET_ACTIVE = = true ] ] && echo "Выключить Запрет" || echo "Включить Запрет" ) "
echo "3) Посмотреть статус запрета"
echo "4) Перезапустить запрет"
echo "5) Выйти в меню"
read -p "Выберите действие: " CHOICE
case " $CHOICE " in
1) [ [ $ZAPRET_ENABLED = = true ] ] && manage_autostart disable || manage_autostart enable; main_menu; ;
2) [ [ $ZAPRET_ACTIVE = = true ] ] && manage_service stop || manage_service start; main_menu; ;
3) manage_service status; bash -c 'read -p "Нажмите Enter для продолжения..."' ; main_menu; ;
4) manage_service restart; main_menu; ;
5) main_menu; ;
*) echo "Неверный ввод!" ; sleep 2; ;
esac
done
}
2025-03-25 03:14:08 +03:00
2025-03-20 03:53:56 +03:00
main_menu( ) {
while true; do
clear
check_zapret_status
2025-03-22 19:37:28 +03:00
check_zapret_exist
2025-03-20 03:53:56 +03:00
echo "===== Меню управления Запретом ====="
if [ [ $ZAPRET_ACTIVE = = true ] ] ; then echo "!Запрет запущен!" ; fi
2025-03-20 19:27:49 +03:00
if [ [ $ZAPRET_ACTIVE = = false ] ] ; then echo "!Запрет выключен!" ; fi
2025-04-03 22:36:06 +03:00
if [ [ $ZAPRET_ENABLED = = true ] ] ; then echo "!Запрет в автозагрузке!" ; fi
if [ [ $ZAPRET_ENABLED = = false ] ] ; then echo "!Запрет не в автозагрузке!" ; fi
2025-03-22 19:44:07 +03:00
if [ [ $ZAPRET_EXIST = = false ] ] ; then clear; echo "===== Меню управления Запретом =====" ; echo "!Запрет не установлен!" ; fi
2025-04-03 22:36:06 +03:00
echo "====================================="
2025-03-22 19:37:28 +03:00
if [ [ $ZAPRET_EXIST = = true ] ] ; then
2025-03-25 15:45:31 +03:00
echo "1) Проверить на обновления и обновить"
2025-03-25 20:05:24 +03:00
echo "2) Сменить конфигурацию запрета"
2025-04-02 21:44:08 +03:00
echo "3) Управление сервисом запрета"
echo "4) Удалить Запрет"
echo "5) Выйти"
2025-03-20 03:53:56 +03:00
read -p "Выберите действие: " CHOICE
case " $CHOICE " in
2025-03-31 00:27:52 +03:00
1) update_zapret_menu; ;
2025-03-25 20:05:24 +03:00
2) change_configuration; ;
2025-04-02 21:44:08 +03:00
3) toggle_service; ;
4) uninstall_zapret; ;
5) $TPUT_E ; exit 0; ;
2025-03-20 03:53:56 +03:00
*) echo "Неверный ввод!" ; sleep 2; ;
esac
else
echo "1) Установить Запрет"
2025-03-21 20:30:48 +03:00
echo "2) Проверить скрипт на обновления"
echo "3) Выйти"
2025-03-20 03:53:56 +03:00
read -p "Выберите действие: " CHOICE
case " $CHOICE " in
1) install_zapret; main_menu; ;
2025-03-21 20:32:08 +03:00
2) update_script; ;
2025-03-30 21:08:24 +03:00
3) tput rmcup; exit 0; ;
2025-03-20 03:53:56 +03:00
*) echo "Неверный ввод!" ; sleep 2; ;
esac
fi
done
}
install_zapret( ) {
2025-03-20 14:58:09 +03:00
install_dependencies
2025-03-22 19:37:28 +03:00
if [ [ $dir_exists = = true ] ] ; then
2025-03-29 13:51:41 +03:00
read -p "Н а вашем компьютере был найден запрет (/opt/zapret). Для продолжения е г о необходимо удалить. Вы действительно хотите удалить запрет (/opt/zapret) и продолжить? (y/N): " answer
2025-03-22 19:37:28 +03:00
case " $answer " in
[ Yy] * )
if [ [ -f /opt/zapret/uninstall_easy.sh ] ] ; then
cd /opt/zapret
yes "" | ./uninstall_easy.sh
fi
rm -rf /opt/zapret
; ;
* )
main_menu
; ;
esac
fi
2025-03-20 14:58:09 +03:00
echo "Клонирую репозиторий..."
if ! git clone https://github.com/bol-van/zapret /opt/zapret ; then
2025-03-26 21:47:16 +03:00
error_exit "не с та б ильно e/слабое подключение к интернету."
2025-03-20 14:58:09 +03:00
fi
echo "Клонирование успешно завершено."
echo "Клонирую репозиторий..."
if ! git clone https://github.com/Snowy-Fluffy/zapret.cfgs /opt/zapret/zapret.cfgs ; then
2025-03-26 21:47:16 +03:00
error_exit "не с та б ильно e/слабое подключение к интернету."
2025-03-20 14:58:09 +03:00
fi
echo "Клонирование успешно завершено."
2025-03-20 04:15:11 +03:00
2025-03-25 15:32:32 +03:00
if [ [ ! -d /opt/zapret.installer/zapret.binaries ] ] ; then
2025-03-20 14:58:09 +03:00
echo "Клонирую релиз запрета..."
2025-03-30 21:08:24 +03:00
mkdir -p /opt/zapret.installer/zapret.binaries/zapret
if ! curl -L -o /opt/zapret.installer/zapret.binaries/zapret/zapret-v70.4.tar.gz https://github.com/bol-van/zapret/releases/download/v70.4/zapret-v70.4.tar.gz; then
2025-03-29 13:51:41 +03:00
rm -rf /opt/zapret.installer/
2025-03-26 21:47:16 +03:00
error_exit "не удалось получить релиз запрета."
2025-03-20 14:58:09 +03:00
fi
echo "Получение запрета завершено."
2025-03-25 15:32:32 +03:00
tar -xzf /opt/zapret.installer/zapret.binaries/zapret/zapret-v70.4.tar.gz -C /opt/zapret.installer/zapret.binaries/zapret
cp -r /opt/zapret.installer/zapret.binaries/zapret/zapret-v70.4/binaries/ /opt/zapret/binaries
2025-03-20 14:58:09 +03:00
fi
2025-03-20 19:23:16 +03:00
if [ [ ! -d /opt/zapret/binaries ] ] ; then
2025-03-25 15:32:32 +03:00
tar -xzf /opt/zapret.installer/zapret.binaries/zapret/zapret-v70.4.tar.gz -C /opt/zapret.installer/zapret.binaries/zapret
cp -r /opt/zapret.installer/zapret.binaries/zapret/zapret-v70.4/binaries/ /opt/zapret/binaries
2025-03-20 19:23:16 +03:00
fi
2025-03-20 03:53:56 +03:00
cd /opt/zapret
yes "" | ./install_easy.sh
2025-03-26 21:47:16 +03:00
cp -r /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось скопировать скрипт в /bin"
2025-03-25 15:32:32 +03:00
chmod +x /bin/zapret
2025-03-25 20:31:01 +03:00
rm -f /opt/zapret/config
2025-03-26 21:47:16 +03:00
cp -r /opt/zapret/zapret.cfgs/configurations/general /opt/zapret/config || error_exit "не удалось автоматически скопировать конфиг"
2025-04-03 22:36:06 +03:00
2025-03-25 20:31:01 +03:00
rm -f /opt/zapret/ipset/zapret-hosts-user.txt
2025-03-26 21:47:16 +03:00
cp -r /opt/zapret/zapret.cfgs/lists/list-basic.txt /opt/zapret/ipset/zapret-hosts-user.txt || error_exit "не удалось автоматически скопировать хостлист"
2025-04-03 22:36:06 +03:00
2025-03-26 21:47:16 +03:00
cp -r /opt/zapret/zapret.cfgs/lists/ipset-discord.txt /opt/zapret/ipset/ipset-discord.txt || error_exit "не удалось автоматически скопировать ипсет"
2025-03-25 20:31:01 +03:00
manage_service restart
2025-03-25 20:05:24 +03:00
configure_zapret_conf
2025-03-20 03:53:56 +03:00
}
2025-04-02 21:48:58 +03:00
2025-03-25 20:05:24 +03:00
change_configuration( ) {
while true; do
clear
2025-04-03 22:36:06 +03:00
cur_conf
cur_list
echo "===== Управление конфигурацией Запрета ======"
echo " Используется стратегия: $cr_cnf "
echo " Используется хостлист: $cr_lst "
echo "============================================="
2025-03-25 20:05:24 +03:00
echo "1) Сменить стратегию"
echo "2) Сменить лист обхода"
echo "3) Добавить ip-адреса или домены в лист обхода"
echo "4) Удалить ip-адреса или домены из листа обхода"
2025-03-25 22:05:19 +03:00
echo "5) Поиск ip-адреса или домена в листе обхода"
echo "6) Выйти в меню"
2025-03-25 20:05:24 +03:00
read -p "Выберите действие: " CHOICE
case " $CHOICE " in
1) configure_zapret_conf; ;
2) configure_zapret_list; ;
3) add_to_zapret; ;
4) delete_from_zapret; ;
2025-03-25 22:05:19 +03:00
5) search_in_zapret; ;
6) main_menu; ;
2025-03-25 20:05:24 +03:00
*) echo "Неверный ввод!" ; sleep 2; ;
esac
done
}
2025-03-20 03:53:56 +03:00
2025-04-02 21:48:58 +03:00
2025-03-31 00:27:52 +03:00
update_zapret_menu( ) {
while true; do
clear
2025-04-02 21:44:08 +03:00
echo "===== Обновление Запрета ====="
2025-04-03 22:36:06 +03:00
echo "=============================="
echo "1) Обновить zapret и скрипт (не рекомендуется)"
2025-03-31 00:27:52 +03:00
echo "2) Обновить скрипт"
echo "3) Выйти в меню"
read -p "Выберите действие: " CHOICE
case " $CHOICE " in
1) update_zapret; ;
2025-04-02 21:52:05 +03:00
2) update_installed_script; ;
2025-03-31 00:27:52 +03:00
3) main_menu; ;
*) echo "Неверный ввод!" ; sleep 2; ;
esac
done
}
2025-03-20 03:53:56 +03:00
update_zapret( ) {
if [ [ -d /opt/zapret ] ] ; then
cd /opt/zapret && git pull
fi
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
cd /opt/zapret/zapret.cfgs && git pull
fi
2025-03-25 15:32:32 +03:00
if [ [ -d /opt/zapret.installer/ ] ] ; then
cd /opt/zapret.installer/ && git pull
rm -f /bin/zapret
2025-03-26 21:47:16 +03:00
cp -r /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось скопировать скрипт в /bin при обновлении"
2025-03-25 15:32:32 +03:00
chmod +x /bin/zapret
2025-03-20 15:10:32 +03:00
fi
2025-03-25 20:31:01 +03:00
manage_service restart
2025-03-25 22:12:32 +03:00
bash -c 'read -p "Нажмите Enter для продолжения..."'
2025-03-29 16:47:16 +03:00
exec " $0 " " $@ "
2025-03-20 03:53:56 +03:00
}
2025-03-21 20:32:08 +03:00
update_script( ) {
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
cd /opt/zapret/zapret.cfgs && git pull
fi
2025-03-25 15:32:32 +03:00
if [ [ -d /opt/zapret.installer/ ] ] ; then
cd /opt/zapret.installer/ && git pull
2025-03-21 20:32:08 +03:00
fi
2025-04-02 21:52:05 +03:00
bash -c 'read -p "Нажмите Enter для продолжения..."'
exec " $0 " " $@ "
}
update_installed_script( ) {
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
cd /opt/zapret/zapret.cfgs && git pull
fi
if [ [ -d /opt/zapret.installer/ ] ] ; then
cd /opt/zapret.installer/ && git pull
2025-03-31 00:27:52 +03:00
rm -f /bin/zapret
cp -r /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось скопировать скрипт в /bin при обновлении"
chmod +x /bin/zapret
manage_service restart
fi
2025-03-25 22:12:32 +03:00
bash -c 'read -p "Нажмите Enter для продолжения..."'
2025-03-29 16:47:16 +03:00
exec " $0 " " $@ "
2025-03-21 20:32:08 +03:00
}
2025-03-25 20:05:24 +03:00
add_to_zapret( ) {
2025-04-02 21:44:08 +03:00
read -p "Введите IP-адреса или домены для добавления в лист (разделяйте пробелами, запятыми или |)(Enter и пустой ввод для отмены): " input
2025-03-25 22:02:03 +03:00
if [ [ -z " $input " ] ] ; then
main_menu
fi
2025-03-25 20:05:24 +03:00
IFS = ',| ' read -ra ADDRESSES <<< " $input "
2025-03-22 19:37:28 +03:00
2025-03-25 20:05:24 +03:00
for address in " ${ ADDRESSES [@] } " ; do
address = $( echo " $address " | xargs)
if [ [ -n " $address " && ! $( grep -Fxq " $address " "/opt/zapret/ipset/zapret-hosts-user.txt" ) ] ] ; then
echo " $address " >> "/opt/zapret/ipset/zapret-hosts-user.txt"
echo " Добавлено: $address "
else
echo " Уже существует: $address "
fi
done
manage_service restart
echo "Готово"
sleep 2
main_menu
}
delete_from_zapret( ) {
2025-04-02 21:44:08 +03:00
read -p "Введите IP-адреса или домены для удаления из листа (разделяйте пробелами, запятыми или |)(Enter и пустой ввод для отмены): " input
2025-03-25 22:02:03 +03:00
if [ [ -z " $input " ] ] ; then
main_menu
fi
2025-03-25 20:05:24 +03:00
IFS = ',| ' read -ra ADDRESSES <<< " $input "
for address in " ${ ADDRESSES [@] } " ; do
address = $( echo " $address " | xargs)
2025-03-25 20:31:01 +03:00
if [ [ -n " $address " ] ] ; then
if grep -Fxq " $address " "/opt/zapret/ipset/zapret-hosts-user.txt" ; then
sed -i " \|^ $address \$|d " "/opt/zapret/ipset/zapret-hosts-user.txt"
echo " Удалено: $address "
else
echo " Н е найдено: $address "
fi
2025-03-25 20:05:24 +03:00
fi
done
manage_service restart
echo "Готово"
sleep 2
main_menu
}
2025-03-25 22:02:03 +03:00
search_in_zapret( ) {
2025-04-03 22:36:06 +03:00
read -p "Введите домен или IP-адрес для поиска в хостлисте (Enter и пустой ввод для отмены): " keyword
2025-03-25 22:02:03 +03:00
if [ [ -z " $keyword " ] ] ; then
main_menu
fi
matches = $( grep " $keyword " "/opt/zapret/ipset/zapret-hosts-user.txt" )
if [ [ -n " $matches " ] ] ; then
echo "Найденные записи:"
echo " $matches "
2025-03-25 22:12:32 +03:00
bash -c 'read -p "Нажмите Enter для продолжения..."'
2025-03-25 22:02:03 +03:00
else
echo "Совпадений не найдено."
2025-03-25 22:12:32 +03:00
sleep 2
main_menu
2025-03-25 22:02:03 +03:00
fi
}
2025-04-03 22:36:06 +03:00
cur_conf( ) {
cr_cnf = "неизвестно"
if [ [ -f /opt/zapret/config ] ] ; then
for file in /opt/zapret/zapret.cfgs/configurations/*; do
if [ [ -f " $file " && " $( sha256sum " $file " | awk '{print $1}' ) " = = " $( sha256sum /opt/zapret/config | awk '{print $1}' ) " ] ] ; then
cr_cnf = " $( basename " $file " ) "
break
fi
done
fi
}
cur_list( ) {
cr_lst = "неизвестно"
if [ [ -f /opt/zapret/config ] ] ; then
for file in /opt/zapret/zapret.cfgs/lists/*; do
if [ [ -f " $file " && " $( sha256sum " $file " | awk '{print $1}' ) " = = " $( sha256sum /opt/zapret/ipset/zapret-hosts-user.txt | awk '{print $1}' ) " ] ] ; then
cr_lst = " $( basename " $file " ) "
break
fi
done
fi
}
2025-03-25 20:05:24 +03:00
configure_zapret_conf( ) {
2025-03-20 04:15:11 +03:00
if [ [ ! -d /opt/zapret/zapret.cfgs ] ] ; then
2025-03-25 20:05:24 +03:00
echo "Клонирую конфигурации..."
2025-03-20 14:58:09 +03:00
if ! git clone https://github.com/Snowy-Fluffy/zapret.cfgs /opt/zapret/zapret.cfgs ; then
2025-03-26 21:47:16 +03:00
error_exit "не с та б ильно e/слабое подключение к интернету."
2025-03-20 14:58:09 +03:00
fi
2025-03-25 20:05:24 +03:00
echo "Клонирование успешно завершено."
sleep 2
2025-03-20 04:15:11 +03:00
fi
2025-03-20 19:01:53 +03:00
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
2025-03-25 20:05:24 +03:00
echo "Проверяю наличие на обновление конфигураций..."
2025-03-20 19:01:53 +03:00
cd /opt/zapret/zapret.cfgs && git pull
2025-03-25 20:05:24 +03:00
sleep 2
2025-03-20 19:01:53 +03:00
fi
2025-03-22 02:43:51 +03:00
clear
2025-03-22 19:37:28 +03:00
2025-03-25 20:05:24 +03:00
2025-03-25 20:17:01 +03:00
2025-04-02 21:44:08 +03:00
echo "Выберите стратегию (можно поменять в любой момент, запустив Меню управления запретом еще раз):"
PS3 = "Введите номер стратегии (по умолчанию 'general'): "
select CONF in $( for f in /opt/zapret/zapret.cfgs/configurations/*; do echo " $( basename " $f " | tr ' ' '.' ) " ; done ) "Отмена" ; do
2025-03-25 20:11:07 +03:00
if [ [ " $CONF " = = "Отмена" ] ] ; then
2025-03-21 21:47:40 +03:00
main_menu
2025-03-25 20:11:07 +03:00
elif [ [ -n " $CONF " ] ] ; then
2025-04-02 21:44:08 +03:00
CONFIG_PATH = " /opt/zapret/zapret.cfgs/configurations/ ${ CONF //./ } "
2025-03-21 21:47:40 +03:00
rm -f /opt/zapret/config
2025-04-02 21:44:08 +03:00
cp " $CONFIG_PATH " /opt/zapret/config || error_exit "не удалось скопировать стратегию"
2025-03-25 20:11:07 +03:00
echo " Стратегия ' $CONF ' установлена. "
2025-04-02 21:44:08 +03:00
2025-03-22 19:37:28 +03:00
sleep 2
2025-03-21 21:47:40 +03:00
break
else
echo "Неверный выбор, попробуйте снова."
fi
2025-03-20 03:53:56 +03:00
done
2025-03-25 20:05:24 +03:00
2025-04-02 21:44:08 +03:00
2025-03-21 21:47:40 +03:00
2025-03-21 20:17:49 +03:00
get_fwtype
sed -i " s/^FWTYPE=.*/FWTYPE= $FWTYPE / " /opt/zapret/config
2025-03-20 03:53:56 +03:00
2025-03-25 03:27:45 +03:00
manage_service restart
2025-03-22 02:41:06 +03:00
main_menu
2025-03-20 03:53:56 +03:00
}
2025-03-25 20:05:24 +03:00
configure_zapret_list( ) {
if [ [ ! -d /opt/zapret/zapret.cfgs ] ] ; then
echo "Клонирую конфигурации..."
if ! git clone https://github.com/Snowy-Fluffy/zapret.cfgs /opt/zapret/zapret.cfgs ; then
2025-03-26 21:47:16 +03:00
error_exit "не с та б ильно e/слабое подключение к интернету."
2025-03-25 20:05:24 +03:00
fi
echo "Клонирование успешно завершено."
sleep 2
fi
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
echo "Проверяю наличие на обновление конфигураций..."
cd /opt/zapret/zapret.cfgs && git pull
sleep 2
fi
clear
2025-03-20 03:53:56 +03:00
2025-04-02 21:44:08 +03:00
2025-03-25 20:05:24 +03:00
echo "Выберите хостлист (можно поменять в любой момент, запустив Меню управления запретом еще раз):"
2025-04-02 21:44:08 +03:00
PS3 = "Введите номер листа (по умолчанию 'list-basic.txt'): "
select LIST in $( for f in /opt/zapret/zapret.cfgs/lists/list*; do echo " $( basename " $f " ) " ; done ) "Отмена" ; do
2025-03-25 20:05:24 +03:00
if [ [ " $LIST " = = "Отмена" ] ] ; then
main_menu
elif [ [ -n " $LIST " ] ] ; then
2025-04-02 21:44:08 +03:00
LIST_PATH = " /opt/zapret/zapret.cfgs/lists/ $LIST "
2025-03-25 20:05:24 +03:00
rm -f /opt/zapret/ipset/zapret-hosts-user.txt
2025-04-02 21:44:08 +03:00
cp " $LIST_PATH " /opt/zapret/ipset/zapret-hosts-user.txt || error_exit "не удалось скопировать хостлист"
2025-03-25 20:05:24 +03:00
echo " Хостлист ' $LIST ' установлен. "
2025-04-02 21:44:08 +03:00
2025-03-25 20:05:24 +03:00
sleep 2
break
else
echo "Неверный выбор, попробуйте снова."
fi
done
manage_service restart
main_menu
}
2025-03-21 20:26:10 +03:00
2025-03-20 03:53:56 +03:00
uninstall_zapret( ) {
2025-03-21 20:17:49 +03:00
read -p "Вы действительно хотите удалить запрет? (y/N): " answer
case " $answer " in
2025-03-21 20:26:10 +03:00
[ Yy] * )
if [ [ -f /opt/zapret/uninstall_easy.sh ] ] ; then
cd /opt/zapret
yes "" | ./uninstall_easy.sh
fi
rm -rf /opt/zapret
2025-03-25 15:32:32 +03:00
rm -rf /opt/zapret.installer/
rm -r /bin/zapret
2025-03-21 20:26:10 +03:00
; ;
* )
main_menu
; ;
2025-03-21 20:17:49 +03:00
esac
2025-03-20 03:53:56 +03:00
}
2025-03-29 13:51:41 +03:00
check_openwrt
2025-04-02 21:44:08 +03:00
check_tput
2025-03-29 16:42:15 +03:00
$TPUT_B
2025-03-20 14:58:09 +03:00
detect_init
main_menu