Мне нужен переключатель kill, который убивает исходящие соединения, если OpenVPN не запущен, потому что иначе VPN не будет иметь никакого смысла - если он отключается и соединение установлено, мой настоящий IP освобождается.

Допустим, 1.2.3.4 - это адрес моего VPN-сервера, и это мои iptables после того, как я выполнил свой скрипт kill-switch:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  255.255.255.255      anywhere
ACCEPT     all  --  192.168.0.0/16       192.168.0.0/16

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             255.255.255.255
ACCEPT     all  --  192.168.0.0/16       192.168.0.0/16
DROP       all  --  anywhere            !1.2.3.4

Имо, это должно работать просто отлично. Но я не могу подключиться к Интернету, пока идет местный трафик. Вы видите проблему в этой конфигурации?

В этой ситуации мой компьютер - Raspberry Pi 3, и я использую OpenVPN поверх TCP, и у меня есть Fritz.Коробка подключена к WAN.

Вы видите какие-либо ошибки? Мой сценарий следующий:

#!/bin/bash

# check that OpenVPN is actually running.
running=$(ps -e | grep openvpn)
if [ $? -eq 1 ]; then
    echo "No active VPN session found."
    exit 1
fi

iptables -F

# Get WAN IP
WAN_IP=$(wget -q -O - http://ipecho.net/plain)

# Configure IPTable rules
# Change eth0 to wlan0 (or whatever network interface is being used) for wireless
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 255.255.255.255 -j  ACCEPT
iptables -A INPUT -s 255.255.255.255 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A OUTPUT -o eth0 ! -d $WAN_IP -j DROP

Он собран из следующих источников: https://github.com/qbwaggle/vpnkillswitch/blob/master/vpnkillswitch.sh, https://www.reddit.com/r/VPN/comments/43djk3/generic_kill_switch_script_for_openvpn_lin

Я тоже пробовал эти сценарии самостоятельно, но они тоже не работают (думаю, это та же ошибка?).

Есть идеи? Заранее спасибо.

1 ответ1

1

OpenVPN позволяет использовать внешние скрипты, когда следующая директива,

 script-security 2

включен в файлы конфигурации клиента. Используйте директивы

up /path/to/executable/script
down /path/to/another/executable/script

запустить эти два сценария, когда интерфейсы устанавливаются или разрушаются. В вашем случае up не имеет значения, но вы можете использовать down, чтобы отключить все сетевые интерфейсы при сбое OpenVPN, чтобы убедиться, что трафик не пропущен через незашифрованные каналы. Обратите внимание, что если OpenVPN зависает или отключается, пока ваш клиент думает, что он подключен , утечек не будет, поскольку трафик все еще отправляется в зашифрованном виде (и, возможно, сжимается) на сервер OpenVPN. Таким образом, это невозможно перехватить.

Сценарий вниз может быть записан следующим образом :

#!/bin/bash
find /sys/class/net  -mindepth 1 -maxdepth 1  -exec sh -c '[ "$1" != "lo" ] && ip link set dev $(basename $1) down' something {}   \;

Это отключает все интерфейсы, кроме lo, который необходим для работы вашего компьютера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .