Eu tinha a mesma configuração, e "VPN kill switches" são mais complicados do que se imagina.
No entanto, seguindo sua especificação, que diz "matar certos aplicativos quando a VPN cair", existe uma solução simples.
No Ubuntu, o monitor de rede possui retornos de chamada para eventos de rede, para que você possa escrever um script para matar os aplicativos que deseja. Exemplo a seguir:
Editar /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
:
#!/usr/bin/env ruby
if ARGV == [ 'tun0', 'vpn-down' ]
`pkill -f transmission`
`pkill -f deluge`
end
O tornam executável:, chmod 755 /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb
e aproveite :-)
Este script está em Ruby (portanto, requer ruby), mas pode ser convertido trivialmente em um script de shell.
Ele também pressupõe que o adaptador VPN seja tun0
, o padrão para as configurações do OpenVPN.
ARGV
começou'tun0'
por um longo tempo e de repente mudou para'tun1'
sem aviso prévio. Assim, para manter o kill switch trabalhando apesar deste primeiro (inútil) valor mudando, eu tive que mudar o testeif ARGV.last == 'vpn-down'
Eu tinha essa mesma necessidade e desenvolvi minha própria solução, pois parece não haver nenhuma ferramenta dedicada para isso no Linux. Não há necessidade de descartar / fechar aplicativos abertos! :)
Você precisa configurar o firewall do iptables, para que sua máquina possa se conectar SOMENTE a servidores VPN especificados (nenhum outro tráfego é permitido, exceto local, para que não haja "vazamentos"). Aqui está um script para isso (encontrado na web):
Você precisará configurar a tabela
servers=()
. Basta especificar os IPs dos seus servidores VPN favoritos.Verifique também se outras variáveis no início do script estão definidas corretamente, caso contrário, ele bloqueará toda a sua conexão.
Certifique-se de fazer o backup do iptables com:
(restaurar com
sudo iptables-restore < working.iptables.rules
)Ele suporta conexões TCP e UDP, se você precisar apenas de uma delas, remova duas linhas indesejadas do
for ()
loop. Verifique também se o seu provedor está usando as mesmas portas - pode ser diferente.Execute este script com fe
sudo /home/user/vpn.sh
.Se você deseja carregá-lo na inicialização (o iptables geralmente redefine após a reinicialização), adicione ao seu
/etc/rc.local
arquivo uma linha comobash /home/user/vpn.sh
.A próxima parte é o conector automático e o monitor da VPN. Aqui está minha própria engenhoca para isso:
Ele se conecta automaticamente ao iniciar e monitora sua conexão com um determinado intervalo (
amount=10
fornece um intervalo de 10 segundos) e se reconecta com a conexão perdida. Possui recurso de log e algumas outras opções.Verifique as UUIDs de suas conexões
nmcli con show
e adicione seus favoritos (combinando com os IPs adicionados ao firewall) navpn=()
tabela. Sempre que ele seleciona aleatoriamente uma conexão especificada nesta tabela.Você pode adicioná-lo ao início automático (não precisa do privilégio do sudo). Aqui está um exemplo de como iniciá-lo no terminal:
... e aqui está como ele fica rodando no terminal:
... e veja como um ping à prova de vazamento se parece após a queda da sua conexão VPN:
Apreciar :)
fonte
/etc/rc.local
?Consegui configurar um simples switch de interrupção de VPN com a UFW. Ele funciona com todos os VPNs que eu tenho.
Aqui estão minhas configurações de ufw:
Funciona para mim muito bem :)
fonte
sudo ufw allow out 443/tcp
permite o vazamento seguro de sites quando a VPN não está conectada. Você não gostaria de parar com isso? Um site HTTPS com AJAX ou WebSockets pode se reconectar em segundo plano por conta própria, talvez por meio de um timer JavaScript.Resolvi esse problema configurando o Ufw para bloquear todo o tráfego de saída e, em seguida, na lista branca de todos os nós da VPN, referenciando seus endereços IP individuais. Isso não é tão oneroso quanto parece: na minha experiência, as VPNs permitem o uso da pesquisa de DNS para obter seus vários endereços IP.
Eu escrevi um programa PHP para fazer isso, chamado ufw-vpn . Eu o uso há alguns anos, com várias pequenas melhorias feitas ao longo do tempo. Você precisará do PHP instalado, é claro, e do Git, se desejar cloná-lo em vez de baixá-lo.
Você também pode pegá-lo usando o wget:
Em seguida, execute o comando para verificar se está OK (sem parâmetros, apenas gera uma mensagem de sintaxe):
Agora, supondo que sua VPN o suporte, você pode usar um domínio totalmente qualificado para obter uma lista de servidores para uma região (você precisará encontrar isso na documentação do seu provedor ou talvez no departamento de suporte):
Isso deve fornecer uma grande lista de regras de firewall a serem adicionadas. Para instalá-los facilmente, basta fazer o seguinte:
Periodicamente, os provedores de VPN atualizam seus endereços IP, portanto, você precisará atualizar o seu para corresponder. Você pode fazer isso através de um diff:
Para uma comparação, vale a pena verificar as regras antes de executá-las, pois excluirá qualquer coisa que não pertença à VPN. Portanto, se você tiver algumas regras personalizadas, elas deverão ser removidas antes da execução.
Mais documentos estão disponíveis no repositório e são todos de código aberto, para que você possa verificar o código quanto a problemas de segurança. Relatórios de bugs e sugestões de recursos são muito bem-vindos.
fonte