У меня была такая же настройка, и «VPN kill switch» хитрее, чем можно было бы подумать.
Однако, следуя вашей спецификации, которая гласит «убивать определенные приложения при падении VPN», существует простое решение.
В Ubuntu у сетевого монитора есть обратные вызовы для сетевых событий, так что вы можете написать скрипт для уничтожения нужных вам приложений. Пример следует:
Редактировать /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
:
#!/usr/bin/env ruby
if ARGV == [ 'tun0', 'vpn-down' ]
`pkill -f transmission`
`pkill -f deluge`
end
Сделайте его исполняемым: chmod 755 /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
и наслаждайтесь :-)
Этот скрипт написан на Ruby (поэтому он требует ruby), но его можно легко преобразовать в скрипт оболочки.
Также предполагается, что адаптер VPN есть tun0
, что является стандартом для конфигураций OpenVPN.
ARGV
все началось'tun0'
довольно долго и неожиданно изменилось на'tun1'
без уведомления. Поэтому, чтобы выключатель kill работал, несмотря на это первое (бесполезное) изменение значения, мне пришлось изменить тест наif ARGV.last == 'vpn-down'
У меня была такая же потребность, и я разработал собственное решение, так как в Linux, похоже, нет специального инструмента для этого. Нет необходимости удалять / закрывать открытые приложения! :)
Вам необходимо настроить брандмауэр iptables, чтобы ваша машина могла подключаться ТОЛЬКО к указанным VPN-серверам (другой трафик не разрешен, кроме локального, поэтому «утечек» не будет). Вот сценарий для этого (нашел его в Интернете):
Вам нужно будет настроить таблицу
servers=()
. Просто укажите там IP-адреса ваших любимых VPN-серверов.Также убедитесь, что другие переменные в начале скрипта установлены правильно, иначе это заблокирует все ваше соединение.
Обязательно сделайте резервную копию iptables с:
(восстановить с помощью
sudo iptables-restore < working.iptables.rules
)Он поддерживает соединения TCP и UDP, если вам нужно только одно из них, удалите ненужные две строки из
for ()
цикла. Также проверьте, использует ли ваш провайдер одни и те же порты - могут отличаться.Запустите этот скрипт с fe
sudo /home/user/vpn.sh
.Если вы хотите загрузить его при загрузке (iptables обычно сбрасывается после перезагрузки), добавьте в свой
/etc/rc.local
файл, например, строкуbash /home/user/vpn.sh
.Следующая часть - это автоконнектор и монитор VPN. Вот моя собственная хитрость для этого:
Он будет автоматически подключаться при запуске и контролировать ваше соединение с заданным интервалом (с интервалом в
amount=10
10 секунд) и повторно подключаться при потере соединения. Есть функция регистрации и некоторые другие опции.Проверьте UUID вашего соединения
nmcli con show
и добавьте ваши любимые (в соответствии с IP, добавленными в брандмауэр) вvpn=()
таблицу. Каждый раз он будет случайным образом выбирать соединение, указанное в этой таблице.Вы можете добавить его в свой автозапуск (не требует привилегий sudo). Вот пример, как запустить его в терминале:
... и вот как это работает в терминале:
... и вот как выглядит проверка на утечку после разрыва вашего VPN-соединения:
Наслаждаться :)
источник
/etc/rc.local
?Мне удалось настроить простой VPN kill-переключатель с UFW. Это работает со всеми VPN, которые у меня есть.
Вот мои настройки UFW:
У меня работает просто отлично :)
источник
sudo ufw allow out 443/tcp
разрешает безопасную утечку веб-сайта, когда VPN не подключен. Разве вы не хотите это остановить? Сайт HTTPS с AJAX или WebSockets может повторно подключаться в фоновом режиме самостоятельно, возможно, через таймер JavaScript.Я решил эту проблему, настроив Ufw для блокировки всего исходящего трафика, а затем занес в белый список все узлы VPN, указав их отдельные IP-адреса. Это не так обременительно, как кажется: VPN по моему опыту позволяет использовать поиск DNS для получения различных IP-адресов.
Я написал PHP-программу для этого, которая называется ufw-vpn . Я использовал его в течение нескольких лет с различными небольшими улучшениями, сделанными со временем. Конечно, вам понадобится PHP и Git, если вы хотите клонировать его, а не скачать.
Вы также можете получить его с помощью wget:
Затем выполните команду, чтобы убедиться, что она выглядит нормально (без параметров просто выводит синтаксическое сообщение):
Теперь, предполагая, что ваш VPN поддерживает его, вы можете использовать полностью определенный домен, чтобы получить список серверов для региона (вам нужно будет найти это в документации вашего провайдера или, возможно, в их отделе поддержки):
Это должно дать вам большой список правил брандмауэра для добавления. Чтобы установить их легко, вы можете просто сделать это:
Время от времени провайдеры VPN будут обновлять свои IP-адреса, поэтому вам нужно будет обновить свои, чтобы они соответствовали. Вы можете сделать это через diff:
Для сравнения стоит проверить правила перед выполнением этого, так как это удалит все, что не принадлежит VPN. Так что, если у вас есть некоторые пользовательские правила, их нужно будет удалить перед запуском.
В репозитории доступно больше документов, и все они с открытым исходным кодом, так что вы можете проверить код на наличие проблем безопасности. Отчеты об ошибках и пожелания приветствуются.
источник