OpenVPN CLI для killswitch или предотвращения нейтрализации соединения

Если существует 2 сценария в изображении, то переменная, экспортируемая в первой, была бы видима к следующей. Так, если у Вас есть запись крона как

*/5 * * * * ( test1.sh; test2.sh ) > log.txt

И test1.sh как

#!/bin/sh
export I="10"
echo $

Затем $I было бы видимо в test2.sh.

6
13.03.2015, 10:13
2 ответа

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

Вы должны быть в состоянии сделать это с помощью чего-то вроде:

#!/bin/sh
set -e
ip route replace blackhole "$ifconfig_local/$ifconfig_netmask"

i=1
while true; do
  route_network_i="$(eval echo \$route_network_$i)"
  route_netmask_i="$(eval echo \$route_netmask_$i)"
  route_metric_i="$(eval echo \$route_metric_$i)"
  if [ -z "$route_network_i" ]; then
    break
  fi
  ip route replace blackhole "$route_network_i"/"$route_netmask_i" metric $(( $route_metric_i + 1 ))
  i=$(( $i + 1 )
done
1
27.01.2020, 20:30

При защите VPN-туннеля от утечек лучше всего избегать механизмов, которыми VPN-клиент пытается управлять сам. В большинстве случаев это означает, что вам следует прибегать к iptablesили nftвместо ip route, так как OpenVPN манипулирует последним по-разному.

Ниже приводится метод защиты -от утечек, который может блокировать весь трафик, кроме всего, предназначенного для туннельных устройств и самого канала OpenVPN --, независимо от того, как настроены маршруты.


Во-первых, добавьте специальную группу для использования VPN-клиентом (вы можете выбрать другое имя группы, если хотите, если оно еще не используется другим пользователем или программой в вашей системе):

sudo groupadd -r -f tunnel

Затем правила брандмауэра, которые необходимо запускать как rootпри каждом запуске системы или перед запуском VPN:

#!/bin/sh
iptables -F OUTPUT
iptables -P OUTPUT DROP
iptables -A OUTPUT -p all -m owner --gid-owner tunnel -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Обратите внимание, что идентификатор группы 'tunnel' является условием доступа к сети, как и наличие туннельного устройства 'tun+' в качестве выходных данных. Если ваша конфигурация openvpn вместо этого использует устройства tap, вы можете указать «tap+» вместо «tun+».

Наконец, вы можете запустить VPN-клиент под специальным идентификатором группы:

sudo sg tunnel -c 'openvpn --config /etc/openvpn/gateway.conf --group tunnel'

Имя группы «туннель» указано дважды в командной строке, потому что мы должны убедиться, что идентификатор группы для процесса openvpn установлен как во время его первоначального запуска, так и после установления соединения. Если бы openvpn запускался из службы systemd, а не из командной строки или скрипта, то вместо sgиспользовалось бы назначение Group=.

Описанный выше метод должен защитить вас от утечек в клирнет в любое время, когда правила iptables активны, независимо от того, работает openvpn или нет. Это касается как данных, так и пакетов DNS.А политику цепочки OUTPUT можно использовать как переключатель для эффективного включения или выключения правил (с помощью DROP или ACCEPT ).

0
27.01.2020, 20:30

Теги

Похожие вопросы