Вспоминаем учителя Инь Фу Во


Некоторые события напомнили мне о Дао информационной безопасности. Рекомендую ознакомиться с полной версией.

2.2
Инь Фу Во два дня настраивал VPN-туннель для своего персонального компьютера. Когда туннель заработал, Инь уселся, почтительно повернувшись лицом к югу, и стал читать свою френдленту.
– О, Учитель, – спросил его Сисадмин, – я не могу понять, зачем вам VPN?
– Ты разве не знаешь, что в VPN-туннеле весь трафик шифруется? – удивился Инь.
– Знаю. Но ваш туннель терминируется на обычном сервере в стране западных варваров. А далее весь ваш яшмовый трафик идёт по Сети в открытом виде.
– Сети нет дела до моего трафика, чего не скажешь о провайдере, – ответил Учитель. Видя, что Сисадмин не понял, он добавил. – Вот, например, ты доверил свои деньги банку.
Сисадмин кивнул.
– Но ты не можешь доверить все свои деньги собственной супруге, – продолжал мудрый Инь. – Почему? Потому что она может посчитать эти деньги своими. А с банком такого не случится.
Просветлённый Сисадмин ушёл поднимать себе VPN-туннель.

2.10
Директор сказал:
– Зачем нам шифровать содержимое дисков? Зачем нам VPN? У нас нет противозаконной информации.
Мудрый Инь Фу Во ответил:
– Безгрешность – не результат праведности, а результат наивности.

Соответственно, для принятия некоторых привентивных мер нужно поднять тунель в "страны западных варваров".

Задачка из двух частей:

  1. Помнить, что оно должно работать.
  2. Соответственно, автоматически поднимать и контролировать терпимое качество работы.

Решать будем по убунтой с иксами (Важно для оповещения). Если что, все необходимые пакеты доставляются:

sudo apt-get install openvpn zenity iperf

Напоминаие о белом адресе

Напоминание о белом IP делаем через крон с частотой по вкусу. Использовать можно любой инструмент, как IM, почту и т.д., так и стандартные диалоги. Я выбрал стандартные диалоги:

wget -O - -q ip.icanhazip.com | grep -E '^111\.111.111|^22.222.22\.' && (DISPLAY=:0.0 zenity --info --title="IP Checker" --text="Your IP real")

icanhazip.com - отдает нам адрес протокола используемого по умолчанию, т.е. может отдать как IPv4, так и IPv6
ip.icanhazip.com - отдаст наш IPv4 адрес.
ip6.icanhazip.com - отдаст наш IPv6 адрес.

^111\.111.111|^22\.222\.22\. - это заменяем на свои возможные адреса. Если что - изучаем regexp и grep :-)

Автоматическое поднятие тунеля и контроль его скорости.

Для этих целей дешевле всего использовать ресурс www.vpngate.net.

Цитата с хабра:

VPN Gate — академический эксперимент Проект представляет собой интернет-сервис как научных исследований в Высшей Школе Университета Цукуба, Япония. Цель данного исследования заключается в расширении знаний «Глобальные Распределенные открытый ретранслятор Сервера VPN».

Как говорит автор, целью проекта было помочь пользователям в странах, где действует государственная цензура интернет-трафика. VPN Gate так же бесплатен и открыт для всех желающих, как и Tor. С момента запуска в пятницу всего за пять дней сервисом воспользовались 77 тыс. пользователей, сгенерировав около четырёх терабайт трафика, так что спрос на бесплатные VPN явно присутствует.

Решение простое:

  1. Получаем список серверов
  2. Выбираем случайный сервер
  3. Получаем его настройки для openvpn
  4. Подключаемся к нему
  5. Тестируем скорость
  6. Если не устраивает, то рвем соединение и возвращаемся к пункту 1.
  7. Радуемся

Соответственно, сам скрипт подключения:

#!/bin/bash

number=$RANDOM
RANGE=90
let "number %= $RANGE"

vpn_config="test.ovpn"
pid_file="/var/run/vpngate_opvn.pid"
good_vpn_dir="good"

#Получаем настройки случайного сервера, предварительно удалив сервера нужной страны.
wget -O - -q http://www.vpngate.net/api/iphone/ | grep -v -E 'Russian'| sed "${number}!d" | sed 's/.*,.*,.*,.*,.*,.*,.*,//' | base64 --decode > ${vpn_config}
# Получаем адрес сервера и показываем

server=`cat ${vpn_config} | awk '{if ($1=="remote") print $2}' `
echo ${server}
openvpn  --writepid --daemon --config ${vpn_config}
#Немного подожем соединения
sleep 30
tun_true=`ifconfig -s | grep tun`
if [ -z "${tun_true}" ]
then
        echo Not found tunnel. Stop and restart.
        kill `cat ${pid_file}`

        bash $0
fi

#Тестирем скорость

speedtest_result=`iperf -f K -c iperf.eltel.net | tail -n1 | awk '{if ($7>100) print "good" }'`
if [ "${speedtest_result}" = "good" ]
then

echo good
cp ${vpn_config} ${good_vpn_dir}/${server}.ovpn

else
        echo Not found tunnel. Stop and restart.
        kill `cat ${pid_file}`
        bash $0
fi

Соответственно, чуть подрихтовав тоже спокойно запихиваем в крон и радуемся жизни.

Плюсы решения:

  • Все можно автоматизировать
  • Наиболее стандартные средства
  • Скорее всего, можно пройти многие фаерволы, т.к. сервера находятся на самых разных портах, но тут нужно разбираться.
  • Халява, Сэр. (с)

Минусы решения:

  • Некоторое падение скорости
  • Рекламу начинают показывать на японском и других языках.

P.S. Написано не очень красиво, т.к. писалось почти по ходу пьесы. Для красоты нужно будет несколько допилить.