Tuesday, November 27, 2018

Использование связки OpenVPN -> TOR на операционной системе TAILS

Создание связки OpenVPN ->TOR в системе TAILS это очень просто!















Подразумевается, что вы уже имеете установленную флешке TAILS с примонтированным хранилищем Persistent.

Метод проверен на TAILS ver. 3.10.

Шаг первый.

Установка openvpn.

Открываем терминал и в нем пишем:

sudo apt-get update 
эта команда обновит информацию о доступных пакетах

sudo apt-get install -y openvpn
эта команда установит openvpn

Шаг второй.

Заходим на сайт cryptovpn.com и выкачиваем нужный вам конфиг серверов. Можно скачать несколько на будущее, т.к. специфика впн такова, что сервер может стать недоступным в любой момент.

Все файлы кладем в папку /home/amnesia/Persistent/cryptovpn/

Теперь необходимо кое-как обработать наши файлики.
Открываем их и удаляем внутри все секции <connection></connection> и оставляем просто одну строку

remote наш_ип порт

например remote 12.13.14.51 443 udp

Шаг третий. 

В папке /home/amnesia/Persistent/cryptovpn/  создаем файл vpn.sh
со следующим содержимым:

#!/bin/bash

if [ ! `id -u` = 0 ] ; then
        echo "error: This script needs to be run using 'sudo SCRIPT' or in 'root terminal'" >&2
  echo "exiting now" >&2
  exit 1
fi
if `grep -r $'\r' /home/amnesia/Persistent/cryptovpn/$1 >/dev/null`
then
  unset tovcfgperm
  tovcfgperm=`stat -c%a /home/amnesia/Persistent/cryptovpn/$1`
  tr -d $'\r' < /home/amnesia/Persistent/cryptovpn/$1 >/tmp/$1 && mv /tmp/$1 /home/amnesia/
  chmod "$tovcfgperm" /home/amnesia/Persistent/cryptovpn/$1
  unset tovcfgperm
fi
grep "net.ipv6.conf.all.disable_ipv6 = 1" /etc/sysctl.conf || echo net.ipv6.conf.all.disable_ipv6 = 1 >> /etc/sysctl.conf
sysctl -p
unset vpnserver_ip
unset vpnserver_port
unset vpnserver_proto
vpnserver_ip=`cat /home/amnesia/Persistent/cryptovpn/$1 | grep "^remote " | awk '{print $2}'`
if [[ -z "$vpnserver_ip" ]] ; then echo 'error: VPN server IP not found in $1!' >&2; exit 1; fi
if ! [[ "$vpnserver_ip" =~ ^[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+$ ]] ; then echo "error: 'remote' appears not to be an IP address in $1" >&2; exit 1; fi
vpnserver_port=`cat /home/amnesia/Persistent/cryptovpn/$1 | grep "^remote " | awk '{print $3}'`
if [[ -z "$vpnserver_port" ]]
then
  vpnserver_port=`cat /home/amnesia/Persistent/cryptovpn/$1 | grep "^port " | awk '{print $2}'`
fi
if [[ -z "$vpnserver_port" ]] ; then echo 'error: VPN server port not found in $1!' >&2; exit 1; fi
if ! [[ "$vpnserver_port" =~ ^[0-9]+$ ]] ; then echo "error: 'port' appears not to be an integer (number)e in $1" >&2; exit 1; fi
vpnserver_proto=`cat /home/amnesia/Persistent/cryptovpn/$1 | grep "^remote " | awk '{print $4}'`
if [[ -z "$vpnserver_proto" ]]
then
  vpnserver_proto=`cat /home/amnesia/Persistent/cryptovpn/$1 | grep "^proto " | awk '{print $2}'`
fi
if [[ -z "$vpnserver_proto" ]] ; then echo 'info: VPN server protocol not found in $1, using UDP' >&2; vpnserver_proto=udp; fi
if [ ! -f /usr/sbin/openvpn ]
then
  apt-cache search openvpn 2>/dev/nul | grep "openvpn - virtual private network daemon" || apt-get update
  apt-get install -y openvpn
fi
if [[ ! $(cat /etc/ferm/ferm.conf | grep "White-list access to Openvpnserver:port for user root") ]]
then
  awk '/White-list access to local resources/{print "            # White-list access to Openvpnserver:port for user root" RS "            daddr '$vpnserver_ip' proto '$vpnserver_proto' dport '$vpnserver_port' {" RS "                    mod owner uid-owner root ACCEPT;" RS "            }"  RS RS $0;next}1' /etc/ferm/ferm.conf >/tmp/ferm.conf && mv /tmp/ferm.conf /etc/ferm
fi
if [[ ! $(cat /etc/ferm/ferm.conf | grep "# But only when using tun0.") ]]
then
   awk '/mod owner uid-owner debian-tor ACCEPT;/{print "            # But only when using tun0." RS "            outerface tun0 mod owner uid-owner debian-tor ACCEPT;";next}1' /etc/ferm/ferm.conf >/tmp/ferm.conf && mv /tmp/ferm.conf /etc/ferm
fi
rm -f /var/cache/ferm/*
/etc/init.d/ferm reload
openvpn --config /home/amnesia/Persistent/cryptovpn/$1

Как можно видеть этот простенький скрипт добавляет ип впн сервера в белый список системы и запускает опенвпн.

Шаг 4.
Выдаем скрипту права на исполнение командой
chmod +x vpn.sh
 
и стартуем нашу гравицапу командой

sudo ./vpn.sh CryptoVPN_xx1.ovpn (где CryptoVPN_xx1.ovpn - имя файла конфига опенвпн)

Вводим пароль для судо и логин/пароль для опенвпн и ждем коннекта, который обыкновенно заканчивается строкой:
 Initialization Sequence Completed

Шаг 5.

Открываем еще один треминал и перезапускаем тейловский тор командой:
sudo restart-tor
(терминал можно сразу закрыть если он мешает)


Готово. Теперь мы можем работать со связкой OpenVPN -> TOR!

Такая настройка даст гарантию практически 100% безопасности.

P.S. Если нужно отключить опенвпн, то в терминале где он запущен нажимаем на клавиатуре комбинацию CTRL+C.
Перед каждым отключением/подключением/переподключением опенвпн необходимо выполнять команду restart-tor