Files
zapret.installer/zapret-control.sh

771 lines
27 KiB
Bash
Raw Normal View History

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
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
if [ -d /run/systemd/system ]; then
INIT_SYSTEM="systemd"
2025-03-29 13:51:41 +03:00
elif [ $SYSTEM == openwrt ]; then
INIT_SYSTEM="procd"
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"
else
2025-03-31 00:27:52 +03:00
error_exit "Не удалось определить init."
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() {
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")
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
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
;;
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
;;
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
}
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"
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"
esac
}
install_dependencies() {
kernel="$(uname -s)"
if [ "$kernel" = "Linux" ]; then
. /etc/os-release
2025-03-31 20:11:36 +03:00
declare -A command_by_ID=(
2025-03-31 20:11:36 +03:00
["arch"]="pacman -S --noconfirm ipset"
["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"
)
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
fi
elif [ "$kernel" = "Darwin" ]; then
2025-03-26 21:47:16 +03:00
error_exit "macOS не поддерживается на данный момент."
else
2025-03-30 21:46:43 +03:00
echo "Неизвестная ОС: ${kernel}. Установите iptables и ipset самостоятельно." bash -c 'read -p "Нажмите Enter для продолжения..."'
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) Установить Запрет"
echo "2) Проверить скрипт на обновления"
echo "3) Выйти"
2025-03-20 03:53:56 +03:00
read -p "Выберите действие: " CHOICE
case "$CHOICE" in
1) install_zapret; main_menu;;
2) update_script;;
3) tput rmcup; exit 0;;
2025-03-20 03:53:56 +03:00
*) echo "Неверный ввод!"; sleep 2;;
esac
fi
done
}
install_zapret() {
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
echo "Клонирую репозиторий..."
if ! git clone https://github.com/bol-van/zapret /opt/zapret ; then
2025-03-26 21:47:16 +03:00
error_exit естабильноe/слабое подключение к интернету."
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/слабое подключение к интернету."
fi
echo "Клонирование успешно завершено."
2025-03-20 04:15:11 +03:00
if [[ ! -d /opt/zapret.installer/zapret.binaries ]]; then
echo "Клонирую релиз запрета..."
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 "не удалось получить релиз запрета."
fi
echo "Получение запрета завершено."
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
fi
2025-03-20 19:23:16 +03:00
if [[ ! -d /opt/zapret/binaries ]]; then
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"
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
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 при обновлении"
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
}
update_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
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-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 "Клонирую конфигурации..."
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/слабое подключение к интернету."
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
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
detect_init
main_menu