Обновить install.sh
Add safe uninstall and hide destination IP after setup
This commit is contained in:
+85
-13
@@ -8,6 +8,7 @@ YELLOW='\033[1;33m'
|
|||||||
MAGENTA='\033[0;35m'
|
MAGENTA='\033[0;35m'
|
||||||
WHITE='\033[1;37m'
|
WHITE='\033[1;37m'
|
||||||
NC='\033[0m'
|
NC='\033[0m'
|
||||||
|
KASKAD_COMMENT="BERLOGA-KASKAD"
|
||||||
|
|
||||||
check_root() {
|
check_root() {
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
@@ -170,22 +171,26 @@ apply_iptables_rules() {
|
|||||||
|
|
||||||
echo -e "${YELLOW}[*] Применение правил...${NC}"
|
echo -e "${YELLOW}[*] Применение правил...${NC}"
|
||||||
|
|
||||||
# Удаление старых правил (по входящему порту)
|
# Удаление старых правил (по входящему порту), включая правила старых версий.
|
||||||
iptables -t nat -D PREROUTING -p "$PROTO" --dport "$IN_PORT" -j DNAT --to-destination "$TARGET_IP:$OUT_PORT" 2>/dev/null
|
iptables -t nat -D PREROUTING -p "$PROTO" --dport "$IN_PORT" -j DNAT --to-destination "$TARGET_IP:$OUT_PORT" 2>/dev/null
|
||||||
|
iptables -t nat -D PREROUTING -p "$PROTO" --dport "$IN_PORT" -m comment --comment "$KASKAD_COMMENT" -j DNAT --to-destination "$TARGET_IP:$OUT_PORT" 2>/dev/null
|
||||||
iptables -D INPUT -p "$PROTO" --dport "$IN_PORT" -j ACCEPT 2>/dev/null
|
iptables -D INPUT -p "$PROTO" --dport "$IN_PORT" -j ACCEPT 2>/dev/null
|
||||||
|
iptables -D INPUT -p "$PROTO" --dport "$IN_PORT" -m comment --comment "$KASKAD_COMMENT" -j ACCEPT 2>/dev/null
|
||||||
iptables -D FORWARD -p "$PROTO" -d "$TARGET_IP" --dport "$OUT_PORT" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 2>/dev/null
|
iptables -D FORWARD -p "$PROTO" -d "$TARGET_IP" --dport "$OUT_PORT" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 2>/dev/null
|
||||||
|
iptables -D FORWARD -p "$PROTO" -d "$TARGET_IP" --dport "$OUT_PORT" -m state --state NEW,ESTABLISHED,RELATED -m comment --comment "$KASKAD_COMMENT" -j ACCEPT 2>/dev/null
|
||||||
iptables -D FORWARD -p "$PROTO" -s "$TARGET_IP" --sport "$OUT_PORT" -m state --state ESTABLISHED,RELATED -j ACCEPT 2>/dev/null
|
iptables -D FORWARD -p "$PROTO" -s "$TARGET_IP" --sport "$OUT_PORT" -m state --state ESTABLISHED,RELATED -j ACCEPT 2>/dev/null
|
||||||
|
iptables -D FORWARD -p "$PROTO" -s "$TARGET_IP" --sport "$OUT_PORT" -m state --state ESTABLISHED,RELATED -m comment --comment "$KASKAD_COMMENT" -j ACCEPT 2>/dev/null
|
||||||
|
|
||||||
# Новые правила
|
# Новые правила
|
||||||
iptables -A INPUT -p "$PROTO" --dport "$IN_PORT" -j ACCEPT
|
iptables -A INPUT -p "$PROTO" --dport "$IN_PORT" -m comment --comment "$KASKAD_COMMENT" -j ACCEPT
|
||||||
iptables -t nat -A PREROUTING -p "$PROTO" --dport "$IN_PORT" -j DNAT --to-destination "$TARGET_IP:$OUT_PORT"
|
iptables -t nat -A PREROUTING -p "$PROTO" --dport "$IN_PORT" -m comment --comment "$KASKAD_COMMENT" -j DNAT --to-destination "$TARGET_IP:$OUT_PORT"
|
||||||
|
|
||||||
if ! iptables -t nat -C POSTROUTING -o "$IFACE" -j MASQUERADE 2>/dev/null; then
|
if ! iptables -t nat -C POSTROUTING -o "$IFACE" -j MASQUERADE 2>/dev/null; then
|
||||||
iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
|
iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
iptables -A FORWARD -p "$PROTO" -d "$TARGET_IP" --dport "$OUT_PORT" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
|
iptables -A FORWARD -p "$PROTO" -d "$TARGET_IP" --dport "$OUT_PORT" -m state --state NEW,ESTABLISHED,RELATED -m comment --comment "$KASKAD_COMMENT" -j ACCEPT
|
||||||
iptables -A FORWARD -p "$PROTO" -s "$TARGET_IP" --sport "$OUT_PORT" -m state --state ESTABLISHED,RELATED -j ACCEPT
|
iptables -A FORWARD -p "$PROTO" -s "$TARGET_IP" --sport "$OUT_PORT" -m state --state ESTABLISHED,RELATED -m comment --comment "$KASKAD_COMMENT" -j ACCEPT
|
||||||
|
|
||||||
# Настройка UFW если активен
|
# Настройка UFW если активен
|
||||||
if command -v ufw &> /dev/null && ufw status | grep -q "Status: active"; then
|
if command -v ufw &> /dev/null && ufw status | grep -q "Status: active"; then
|
||||||
@@ -197,10 +202,31 @@ apply_iptables_rules() {
|
|||||||
netfilter-persistent save > /dev/null
|
netfilter-persistent save > /dev/null
|
||||||
|
|
||||||
echo -e "${GREEN}[SUCCESS] $NAME настроен!${NC}"
|
echo -e "${GREEN}[SUCCESS] $NAME настроен!${NC}"
|
||||||
echo -e "$PROTO: Вход $IN_PORT -> Выход $TARGET_IP:$OUT_PORT"
|
echo -e "$PROTO: входящий порт $IN_PORT настроен. Адрес назначения скрыт."
|
||||||
|
echo -e "Посмотреть параметры правила можно отдельно через пункт 5."
|
||||||
read -p "Нажмите Enter для возврата в меню..."
|
read -p "Нажмите Enter для возврата в меню..."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
remove_rule_tuple() {
|
||||||
|
local d_port="$1" d_proto="$2" d_dest="$3"
|
||||||
|
local target_ip="${d_dest%:*}"
|
||||||
|
local target_port="${d_dest#*:}"
|
||||||
|
|
||||||
|
# Удаляем как новые помеченные правила, так и совместимые правила старой версии.
|
||||||
|
iptables -t nat -D PREROUTING -p "$d_proto" --dport "$d_port" -m comment --comment "$KASKAD_COMMENT" -j DNAT --to-destination "$d_dest" 2>/dev/null || \
|
||||||
|
iptables -t nat -D PREROUTING -p "$d_proto" --dport "$d_port" -j DNAT --to-destination "$d_dest" 2>/dev/null || true
|
||||||
|
iptables -D INPUT -p "$d_proto" --dport "$d_port" -m comment --comment "$KASKAD_COMMENT" -j ACCEPT 2>/dev/null || \
|
||||||
|
iptables -D INPUT -p "$d_proto" --dport "$d_port" -j ACCEPT 2>/dev/null || true
|
||||||
|
iptables -D FORWARD -p "$d_proto" -d "$target_ip" --dport "$target_port" -m state --state NEW,ESTABLISHED,RELATED -m comment --comment "$KASKAD_COMMENT" -j ACCEPT 2>/dev/null || \
|
||||||
|
iptables -D FORWARD -p "$d_proto" -d "$target_ip" --dport "$target_port" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 2>/dev/null || true
|
||||||
|
iptables -D FORWARD -p "$d_proto" -s "$target_ip" --sport "$target_port" -m state --state ESTABLISHED,RELATED -m comment --comment "$KASKAD_COMMENT" -j ACCEPT 2>/dev/null || \
|
||||||
|
iptables -D FORWARD -p "$d_proto" -s "$target_ip" --sport "$target_port" -m state --state ESTABLISHED,RELATED -j ACCEPT 2>/dev/null || true
|
||||||
|
|
||||||
|
if command -v ufw >/dev/null 2>&1 && ufw status | grep -q "Status: active"; then
|
||||||
|
ufw delete allow "$d_port/$d_proto" >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# --- СПИСОК ПРАВИЛ ---
|
# --- СПИСОК ПРАВИЛ ---
|
||||||
list_active_rules() {
|
list_active_rules() {
|
||||||
echo -e "\n${CYAN}--- Активные переадресации ---${NC}"
|
echo -e "\n${CYAN}--- Активные переадресации ---${NC}"
|
||||||
@@ -244,19 +270,58 @@ delete_single_rule() {
|
|||||||
|
|
||||||
# Разбираем строку
|
# Разбираем строку
|
||||||
IFS=':' read -r d_port d_proto d_dest <<< "${RULES_LIST[$rule_num]}"
|
IFS=':' read -r d_port d_proto d_dest <<< "${RULES_LIST[$rule_num]}"
|
||||||
local target_ip="${d_dest%:*}"
|
remove_rule_tuple "$d_port" "$d_proto" "$d_dest"
|
||||||
local target_port="${d_dest#*:}"
|
|
||||||
|
|
||||||
iptables -t nat -D PREROUTING -p "$d_proto" --dport "$d_port" -j DNAT --to-destination "$d_dest" 2>/dev/null
|
|
||||||
iptables -D INPUT -p "$d_proto" --dport "$d_port" -j ACCEPT 2>/dev/null
|
|
||||||
iptables -D FORWARD -p "$d_proto" -d "$target_ip" --dport "$target_port" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 2>/dev/null
|
|
||||||
iptables -D FORWARD -p "$d_proto" -s "$target_ip" --sport "$target_port" -m state --state ESTABLISHED,RELATED -j ACCEPT 2>/dev/null
|
|
||||||
|
|
||||||
netfilter-persistent save > /dev/null
|
netfilter-persistent save > /dev/null
|
||||||
echo -e "${GREEN}[OK] Правило удалено.${NC}"
|
echo -e "${GREEN}[OK] Правило удалено.${NC}"
|
||||||
read -p "Нажмите Enter..."
|
read -p "Нажмите Enter..."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- УДАЛЕНИЕ KASKAD ---
|
||||||
|
uninstall_kaskad() {
|
||||||
|
echo -e "\n${RED}--- Удаление Kaskad ---${NC}"
|
||||||
|
echo "Будут удалены команда gokaskad и все показанные Kaskad-переадресации."
|
||||||
|
echo "Docker, iptables-persistent и системные параметры других служб не удаляются."
|
||||||
|
echo ""
|
||||||
|
list_active_rules_no_pause
|
||||||
|
read -p "Продолжить удаление? Введите DELETE: " confirm
|
||||||
|
if [[ "$confirm" != "DELETE" ]]; then
|
||||||
|
echo "Отменено."
|
||||||
|
read -p "Нажмите Enter..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
local d_port d_proto d_dest
|
||||||
|
d_port=$(echo "$line" | grep -oP '(?<=--dport )\d+')
|
||||||
|
d_proto=$(echo "$line" | grep -oP '(?<=-p )\w+')
|
||||||
|
d_dest=$(echo "$line" | grep -oP '(?<=--to-destination )[\d\.:]+')
|
||||||
|
[[ -n "$d_port" && -n "$d_proto" && -n "$d_dest" ]] || continue
|
||||||
|
remove_rule_tuple "$d_port" "$d_proto" "$d_dest"
|
||||||
|
done < <(iptables -t nat -S PREROUTING | grep "DNAT" || true)
|
||||||
|
|
||||||
|
netfilter-persistent save >/dev/null 2>&1 || true
|
||||||
|
rm -f /usr/local/bin/gokaskad
|
||||||
|
echo -e "${GREEN}[OK] Kaskad удалён. Текущий файл install.sh оставлен — его можно удалить вручную.${NC}"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
list_active_rules_no_pause() {
|
||||||
|
echo -e "${MAGENTA}ПОРТ (ВХОД)\tПРОТОКОЛ\tЦЕЛЬ (IP:ВЫХОД)${NC}"
|
||||||
|
local found=0
|
||||||
|
while read -r line; do
|
||||||
|
local l_port l_proto l_dest
|
||||||
|
l_port=$(echo "$line" | grep -oP '(?<=--dport )\d+')
|
||||||
|
l_proto=$(echo "$line" | grep -oP '(?<=-p )\w+')
|
||||||
|
l_dest=$(echo "$line" | grep -oP '(?<=--to-destination )[\d\.:]+')
|
||||||
|
if [[ -n "$l_port" ]]; then
|
||||||
|
echo -e "$l_port\t\t$l_proto\t\t$l_dest"
|
||||||
|
found=1
|
||||||
|
fi
|
||||||
|
done < <(iptables -t nat -S PREROUTING | grep "DNAT" || true)
|
||||||
|
[[ $found -eq 1 ]] || echo "Нет активных переадресаций."
|
||||||
|
}
|
||||||
|
|
||||||
# --- ПОЛНАЯ ОЧИСТКА ---
|
# --- ПОЛНАЯ ОЧИСТКА ---
|
||||||
flush_rules() {
|
flush_rules() {
|
||||||
echo -e "\n${RED}!!! ВНИМАНИЕ !!!${NC}"
|
echo -e "\n${RED}!!! ВНИМАНИЕ !!!${NC}"
|
||||||
@@ -292,6 +357,7 @@ show_menu() {
|
|||||||
echo -e "7) ${RED}Сбросить ВСЕ настройки${NC}"
|
echo -e "7) ${RED}Сбросить ВСЕ настройки${NC}"
|
||||||
echo -e "8) ${YELLOW}Показать заставку BERLOGA${NC}"
|
echo -e "8) ${YELLOW}Показать заставку BERLOGA${NC}"
|
||||||
echo -e "9) ${MAGENTA}📚 ИНСТРУКЦИЯ (Как настроить)${NC}"
|
echo -e "9) ${MAGENTA}📚 ИНСТРУКЦИЯ (Как настроить)${NC}"
|
||||||
|
echo -e "10) ${RED}Полностью удалить Kaskad${NC}"
|
||||||
echo -e "0) Выход"
|
echo -e "0) Выход"
|
||||||
echo -e "------------------------------------------------------"
|
echo -e "------------------------------------------------------"
|
||||||
read -p "Ваш выбор: " choice
|
read -p "Ваш выбор: " choice
|
||||||
@@ -306,6 +372,7 @@ show_menu() {
|
|||||||
7) flush_rules ;;
|
7) flush_rules ;;
|
||||||
8) show_berloga ;;
|
8) show_berloga ;;
|
||||||
9) show_instructions ;;
|
9) show_instructions ;;
|
||||||
|
10) uninstall_kaskad ;;
|
||||||
0) exit 0 ;;
|
0) exit 0 ;;
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
@@ -314,6 +381,11 @@ show_menu() {
|
|||||||
|
|
||||||
# --- ЗАПУСК ---
|
# --- ЗАПУСК ---
|
||||||
check_root
|
check_root
|
||||||
|
|
||||||
|
if [[ "${1:-}" == "--uninstall" ]]; then
|
||||||
|
uninstall_kaskad
|
||||||
|
fi
|
||||||
|
|
||||||
prepare_system
|
prepare_system
|
||||||
show_berloga
|
show_berloga
|
||||||
show_menu
|
show_menu
|
||||||
|
|||||||
Reference in New Issue
Block a user