Безопасный интернет с Shadowsocks
В связи с предстоящим путешествием за границу я решил заняться поиском решения для безопасного подключения к интернету из
общественных
мест со смартфона. Раньше я этим пренебрегал, а очень зря. Теперь же у меня есть выделенный сервер в Амстердаме и желание уберечь свой трафик от любопытного носа оператора сотовой связи и от
лап злых
кулхацкеров в открытых сетях WiFi.
Итак, нам нужен клиент для Android и сервер для Debian / Ubuntu для организации шифрованного туннеля. После быстрого поиска в
сети на предмет
чего-то отличного от OpenVPN (как-то я возился с ним, много нервов потратил — теперь хочется простоты) я наткнулся в Google Play
на клиента Shadowsocks с
открытым исходным кодом. Пройдя по
ссылкам в описании я понял, что это что-то свежее, и это что-то используют китайцы для преодоления своего Великого Китайского
Файервола.
Впечатляет? Давайте приступим к настройке.
Из описания Shadowsocks следует, что это защищённый сверхбыстрый прокси-сервер с имплементациями на таких языках программирования как python, nodejs, golang, C (libev), C (libuv), erlang и dotcloud. Я выбрал вариант на C, который на GitHub имеет коммиты посвежее — libev.
В приложении нас встретит довольно аскетичный интерфейс, я не сразу заметил, что при свайпе с левого края экрана вправо доступно меню:
Здесь можно создавать отдельные профили для разных серверов или вариантов использования, очистить DNS кэш. Настройка профиля
заключается
в указании IP адреса и портов сервера, пароля и алгоритма шифрования. Эти данные должны совпадать с теми, что содержатся в
конфигурационном файле на сервере.
Приложение также содержит и дополнительные настройки, знать которые очень полезно. В частности, по умолчанию запущенный
Shadowsocks
гонит весь траффик через прокси, но если убрать галочку Global Proxy, то становится доступным список индивидуальных предпочтений
под каждое
приложение.
Список Individual Proxy работает в двух режимах: при выключенном переключателе Bypass через прокси ходят в интернет только те
приложения, что
отмечены галочками. Это неудобно, если необходимо пустить в обход прокси только одно или два приложения. В таком случае стоит
переключиться
в режим Bypass и отметить галочкой теперь уже те программы, которые Shadowsocks должен игнорировать. Например, это может быть
AndFTP,
который соединяется по SSH или FTP c тем же самым сервером, на котором установлен прокси.
Если отмечены опции Traffic Stats и Auto Connect, то приложение Shadowsocks будет выводить информацию о потреблении траффика в области уведомлений и подключаться автоматически при запуске. Опции полезные, я включил после некоторого знакомства с программой.
Для проверки работоспобности тыкаем переключатель в заголовке окна в положение ON и открываем любой браузер (здесь нужно уточнить, что он не должен находиться в списке приложений, которые игнорирует Shadowsocks) и заходим на любой сайт, который предоставляет информацию об IP. Например, ip2location.com — этот покажет ещё и местоположение. Всё, теперь я в Амстердаме :)

Из описания Shadowsocks следует, что это защищённый сверхбыстрый прокси-сервер с имплементациями на таких языках программирования как python, nodejs, golang, C (libev), C (libuv), erlang и dotcloud. Я выбрал вариант на C, который на GitHub имеет коммиты посвежее — libev.
Сборка и установка из исходников
Shadowsocks-libev написан на чистом C и зависит только от пакетов libev и openssl. На Debian / Ubuntu его легко и быстро собрать и установить из исходников с GitHub (должны быть установлены пакеты git, build-essential, autoconf, libtool и libssl-dev):
git clone https://github.com/madeye/shadowsocks-libev.git
cd shadowsocks-libev
./configure && make
sudo make install
cd shadowsocks-libev
./configure && make
sudo make install
Конфигурационный файл
После сборки и установки удобно создать файл конфигурации, хотя можно запускать и с параметрами в командной строке. Мне нравится всё же иметь файл конфигурации (он, кстати, должен быть в формате JSON). Создадим его:
sudo -i
touch /etc/shadowsocks.conf
nano /etc/shadowsocks.conf
Примерное содержимое этого файла (бездумно копировать нельзя!):
touch /etc/shadowsocks.conf
nano /etc/shadowsocks.conf
{
"server":"your_server_ip",
"server_port":8388,
"local_port":1080,
"password":"your_password",
"timeout":600,
"method":"aes-256-cfb"
}
"server":"your_server_ip",
"server_port":8388,
"local_port":1080,
"password":"your_password",
"timeout":600,
"method":"aes-256-cfb"
}
Запуск сервиса через утилиту screen
Для того, чтобы прокси-сервер продолжал работать при выходе из SSH-сессии, запустим его через утилиту screen. Если это слово вам не знакомо — не беда, это просто, в одной из своих прошлых статей я уже затрагивал основы работы со screen. Запустите новую сессию screen, а затем и прокси-сервер:
ss-server -c /etc/shadowsocks.conf
В ответ получим что-то подобное:
INFO: initialize cihpers... aes-256-cfb
INFO: server listening at port 8388.
Это означает, что прокси-сервер работает и ждёт гостей на 8388 порту. Самое время взяться за настройку клиента на смартфоне.
INFO: server listening at port 8388.
Настройка Android-приложения Shadowsocks
Приложение можно найти в Google Play, но если вы, как и я, не пользуетесь сервисами Google на смартфоне — скачайте ночную сборку по ссылке с официального сайта.В приложении нас встретит довольно аскетичный интерфейс, я не сразу заметил, что при свайпе с левого края экрана вправо доступно меню:



Если отмечены опции Traffic Stats и Auto Connect, то приложение Shadowsocks будет выводить информацию о потреблении траффика в области уведомлений и подключаться автоматически при запуске. Опции полезные, я включил после некоторого знакомства с программой.
Для проверки работоспобности тыкаем переключатель в заголовке окна в положение ON и открываем любой браузер (здесь нужно уточнить, что он не должен находиться в списке приложений, которые игнорирует Shadowsocks) и заходим на любой сайт, который предоставляет информацию об IP. Например, ip2location.com — этот покажет ещё и местоположение. Всё, теперь я в Амстердаме :)
Обсуждение
Никто не оставлял здесь комментариев.
Войдите на сайт, чтобы присоединиться к обсуждению.