• XSS.stack #1 – первый литературный журнал от юзеров форума

Killswitch Помощь с правилами

Vendette

floppy-диск
Пользователь
Регистрация
20.01.2025
Сообщения
9
Реакции
0
Всем привет, нужна помощь как настроит правильно , правила Iptables таким образом чтобы killswitch мгновенно отрубал инет в случае падения впн , Система линукс Пытался настроить не получается
дело в том что либо блокировать трафик вообще в ноль тогда инета нету или делать что он проверяет каждую секунду сооедениение но как я понял линкус мгновенно не может блочить он виснет не понимая что впн отвалился и работает еще от 1-10 сек тем самым айпи утекает и дает пару пакетов
 
Всем привет, нужна помощь как настроит правильно , правила Iptables таким образом чтобы killswitch мгновенно отрубал инет в случае падения впн , Система линукс Пытался настроить не получается
дело в том что либо блокировать трафик вообще в ноль тогда инета нету или делать что он проверяет каждую секунду сооедениение но как я понял линкус мгновенно не может блочить он виснет не понимая что впн отвалился и работает еще от 1-10 сек тем самым айпи утекает и дает пару пакетов

Чтобы настроить Kill Switch через iptables, который мгновенно обрывает интернет при падении VPN, нужно разрешить только трафик через интерфейс VPN, и заблокировать весь остальной исходящий трафик. Это гарантирует, что при отключении VPN весь интернет-трафик будет остановлен.

🔐 Пример настройки для OpenVPN (tun0)
Предположим, что VPN-интерфейс — это tun0.

🔧 Шаги
1. Сброс всех правил:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

2. Политики по умолчанию: запретить всё

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
3. Разрешаем трафик на localhost:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4. Разрешаем установку VPN-соединения (например, если это OpenVPN через UDP 1194)
Замените eth0 на ваш интернет-интерфейс, и VPN_SERVER_IP — на IP вашего VPN-сервера.


iptables -A OUTPUT -o eth0 -p udp -d VPN_SERVER_IP --dport 1194 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --sport 1194 -s VPN_SERVER_IP -j ACCEPT
5. Разрешаем трафик через VPN-интерфейс:

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
🛡 Kill Switch работает так:
Пока VPN поднят, tun0 существует, и трафик разрешён.

Если VPN падает, tun0 исчезает, а все остальные исходящие подключения (eth0 и др.) — запрещены.

Даже DNS-запросы не проходят без VPN.

✅ Тест Kill Switch
Подключитесь к VPN.

Запустите ping 8.8.8.8 — работает.

Отключите VPN (kill процесс или вручную отключите).

Попробуйте снова — трафик должен мгновенно остановиться.

🧠 Советы
Чтобы DNS не "утекал" в обход VPN — используйте локальный DNS (например, через resolv.conf) или DNS через VPN.

Можно использовать iptables-save для сохранения правил:

iptables-save > /etc/iptables/rules.v4

Если у вас WireGuard, tun0 будет заменён на wg0, и порты/IP могут отличаться — скажите, какой именно VPN вы используете, и я уточню правила.
 
Bash:
#!/bin/bash
: << 'END'
===============================
 VPN Watchdog Script - Manual
===============================
Filename: vpn-watchdog.sh
Author: CHINGCHONG
Version: v1.1
Last Updated: 2025-06-16
-------------------------------------
 CHANGELOG
-------------------------------------
v1.1 - Interface Auto-Detection + Prompt
 - Removes hardcoded internet/VPN interfaces
 - Prompts user to select from available interfaces
 - Safer and easier for first-time use
v1.0 - Initial Stable Release
 - Added usage flags: --run, --help, --reset-firewall
 - Enforces kill switch via iptables
 - Auto-recovers VPN on disconnect
 - Optional UDP support
 - Safety improvements: default iptables policy set before flushing
 - Manual and inline help
-------------------------------------
 PURPOSE
-------------------------------------
This script monitors a VPN connection and ensures that no internet traffic leaks if the VPN connection is lost.
It:
- Enforces a VPN-only kill switch via iptables
- Starts the VPN and brings up your internet interface
- Monitors VPN connection (typically tun0)
- Automatically disables the internet if the VPN goes down
- Optionally restarts the VPN connection
- Resets iptables on demand

-------------------------------------
 USAGE
-------------------------------------
Run as root:
    sudo ./vpn-watchdog.sh --run
This will:
- Prompt you to select your internet interface (e.g., eth0, wlan0)
- Prompt you to select your VPN profile (as defined in NetworkManager)
- Apply VPN-only firewall rules (kill switch)
- Auto-reconnect if VPN fails
To disable the kill switch and restore internet access:
    sudo ./vpn-watchdog.sh --reset-firewall
To show this manual again:
    sudo ./vpn-watchdog.sh --help
-------------------------------------
 NOTES
-------------------------------------
- VPN interface is assumed to be `tun0` (change if needed)
- Uses `nmcli` to manage interfaces and connections
- Works with OpenVPN and other VPNs managed by NetworkManager
END
# ========== Configuration ==========
INTERFACE_VPN="tun0"   # VPN interface (typically tun0)
INTERFACE_INTERNET=""
INTERFACE_VPN_TCP=""
#INTERFACE_VPN_UDP=""  # Optional
# ========== Styling ==========
COLOR_RED="\e[31m"
COLOR_GREEN="\e[32m"
COLOR_BLUE="\e[34m"
COLOR_DARK_GREY="\e[90m"
COLOR_RESET="\e[0m"
MESSAGE_INFO="${COLOR_BLUE}[*]${COLOR_RESET}"
MESSAGE_GOOD="${COLOR_GREEN}[+]${COLOR_RESET}"
MESSAGE_SHIT="${COLOR_RED}[-]${COLOR_RESET}"
MESSAGE_VPN_OKAY="VPN connection established"
MESSAGE_VPN_LOST="VPN connection is lost !!!"
MESSAGE_INTERFACE_KILL="Emergency kill interface.."
command -v nmcli >/dev/null 2>&1 || {
  echo -e "${MESSAGE_SHIT} nmcli is required but not installed. Aborting."
  exit 1
}
show_usage() {
  echo -e "${MESSAGE_INFO} Usage: sudo ./vpn-watchdog.sh <command>"
  echo -e ""
  echo -e "  ${MESSAGE_GOOD}--run             ${COLOR_RESET}Start VPN watchdog"
  echo -e "  ${MESSAGE_GOOD}--help            ${COLOR_RESET}Show full manual"
  echo -e "  ${MESSAGE_GOOD}--reset-firewall  ${COLOR_RESET}Flush iptables rules and disable kill switch"
  echo -e ""
  echo -e "${MESSAGE_INFO} Tip: Run './vpn-watchdog.sh --help' for full setup instructions."
}
reset_firewall() {
  echo -e "$MESSAGE_INFO Resetting iptables..."
  
  iptables -F
  iptables -X
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
  
  echo -e "$MESSAGE_INFO Firewall reset to allow all traffic."
}

case "$1" in
  --run)
    ;;
  --reset-firewall)
    reset_firewall
    exit 0
    ;;
  --help)
    sed -n "/^: << 'END'/,/^END/p" "$0" | sed '1d;$d'
    exit 0
    ;;
  *)
    show_usage
    exit 1
    ;;
esac
prompt_for_configuration() {
  echo -e "${MESSAGE_INFO} Detecting active network interfaces..."
  interfaces=$(nmcli device status | awk '$2 == "ethernet" || $2 == "wifi" { print $1 }')
  echo -e "${MESSAGE_INFO} Select your Internet interface:"
  select iface in $interfaces; do
    if [[ -n "$iface" ]]; then
      INTERFACE_INTERNET="$iface"
      break
    fi
  done
  echo -e "${MESSAGE_INFO} Detecting available VPN connections..."
  vpn_conns=$(nmcli connection show | awk '/vpn/ { print $1 }')
  if [[ -z "$vpn_conns" ]]; then
    echo -e "${MESSAGE_SHIT} No VPN connections found. Please create one using NetworkManager."
    exit 1
  fi
  echo -e "${MESSAGE_INFO} Select your VPN connection:"
  select vpn in $vpn_conns; do
    if [[ -n "$vpn" ]]; then
      INTERFACE_VPN_TCP="$vpn"
      break
    fi
  done
  echo -e "${MESSAGE_GOOD} Internet Interface: $INTERFACE_INTERNET"
  echo -e "${MESSAGE_GOOD} VPN Connection Name: $INTERFACE_VPN_TCP"
  sleep 1
}
apply_killswitch() {
  read -p "WARNING: This will flush existing iptables rules. Continue? (y/n): " ans
  [[ "$ans" != "y" ]] && exit 1
  echo -e "$MESSAGE_INFO Applying VPN kill switch rules..."
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT DROP
  iptables -F
  iptables -X
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A OUTPUT -o lo -j ACCEPT
  iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  iptables -A OUTPUT -o "$INTERFACE_VPN" -j ACCEPT
  iptables -A INPUT  -i "$INTERFACE_VPN" -j ACCEPT
  iptables -A OUTPUT -o "$INTERFACE_INTERNET" -p udp --dport 1194 -j ACCEPT
  iptables -A OUTPUT -o "$INTERFACE_INTERNET" -p tcp --dport 443 -j ACCEPT
  iptables -A OUTPUT ! -o "$INTERFACE_VPN" -j DROP
}


if [[ "$1" == "--reset-firewall" ]]; then
  reset_firewall
  exit 0
fi
bring_up_internet() {
  echo -e "$MESSAGE_INFO Bringing up Internet interface: $INTERFACE_INTERNET"
  nmcli device up "$INTERFACE_INTERNET"
}
bring_up_vpn() {
  echo -e "$MESSAGE_INFO Starting VPN connection..."
  nmcli connection up "$INTERFACE_VPN_TCP"
}
restart_interface() {
  bring_up_internet
  bring_up_vpn
  echo -e "$MESSAGE_INFO Waiting for VPN interface ($INTERFACE_VPN) to come up..."
  for i in {1..20}; do
    if ip link show "$INTERFACE_VPN" > /dev/null 2>&1; then
      echo -e "$MESSAGE_GOOD VPN is up."
      return
    fi
    sleep 0.5
  done
  echo -e "$MESSAGE_SHIT VPN did not start properly."
}
vpn_is_normal() {
  echo -e "$MESSAGE_GOOD $MESSAGE_VPN_OKAY"
}
emergency_kill_interface() {
  echo -e "$MESSAGE_SHIT $MESSAGE_VPN_LOST"
  echo -e "$MESSAGE_SHIT $MESSAGE_INTERFACE_KILL"
  nmcli device down "$INTERFACE_INTERNET"
}
check_vpn_status() {
  ip link show "$INTERFACE_VPN" > /dev/null 2>&1
}
main_loop() {
  while true; do
    if check_vpn_status; then
      vpn_is_normal
    else
      emergency_kill_interface
      restart_interface
    fi
    sleep 1
  done
}
# INIT
tput civis
prompt_for_configuration
apply_killswitch
restart_interface
main_loop

держи
делал для себя, мож пригодится

./vpn-watchdog.sh кратко как юзать
./vpn-watchdog.sh --help полный мануал
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх