Если существует 2 сценария в изображении, то переменная, экспортируемая в первой, была бы видима к следующей. Так, если у Вас есть запись крона как
*/5 * * * * ( test1.sh; test2.sh ) > log.txt
И test1.sh как
#!/bin/sh
export I="10"
echo $
Затем $I
было бы видимо в test2.sh.
Вы можете сделать это, установив правила 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
При защите 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 ).