» » » Debian 8. Установка SOCKS Proxy

Debian 8. Установка SOCKS Proxy

Author: Tatyana dated 17-10-2015, 09:13
  • Dislike
  • +5
  • Like

Способов обхода цензуры есть множество. Один из них - выход во внешний интернет через прокси-сервер. Погуглив, можно найти множество инструкций как сделать это с минимальными затратами или вообще без них. К сожалению совсем без вложений вы получите то, за что платите - дырку от бублика.

Да, есть множество программ для автоматического поиска открытых прокси, но никто не может сказать как долго тот или иной сервер будет онлайн, что он кэширует, что пишет в логи и кто его использует кроме вас, а главное - для чего. Скорость соединения на таких серверах как правило ниже минимальной, а их IP гарантированно во всех мыслимых и немыслимых чёрных списках из-за потока спама и прочего мусора. Большая часть платных прокси серверов так же не панацея, так как чем ниже плата - тем ближе они к бесплатным серверам по качеству.

Рассмотрим вариант с установкой собственного прокси-сервера на сервер под управлением Debian. Предполагается, что вы имеете представление о том ,что такое Linux и как с ним работать.

Для начала нам нужен сервер. Из-за огромного количества предложений на рынке подобных услуг, дешёвого железа и трафика цены на виртуальные сервера порой ниже, чем на обычный шаред-хостинг. По той же причине 95% предложений относится к убитым серверам, медленным каналам и некомпетентным админам. Я слышала много хорошего о сервисе от Amazon, но сама их услугами не пользовалась, так что советую то, что знаю - DigitalOcean. У последних в итоге даже дешевле: $0,007 в час. Что в месяц не превысит пяти долларов, даже если вы никогда не будете выключать свой сервер.

И так, регистрируем аккаунт, вносим средства на счёт и создаём Droplet (так у них называется VDS). Выбираем регион, тарифный план (для наших целей минимального более чем достаточно) и операционную систему. Тут дело хозяйское, но я люблю Debian, поэтому в данном примере мы рассматриваем именно Debian. А именно Debian Jessie x64. Процесс создания VDS не займёт больше полутора минут. По истечении которых вам на почту придёт письмо с данными для доступа к серверу, после чего можно соединиться с сервером по ssh (в Windows с использованием Putty) и начать установку.

К сожалению в репозитории Debian Jessie из легко настраиваемого лишь кэширующий http-прокси Squid. Но его мы ставить не будем. Нас интересует SOCKS сервер с поддержкой IPv6. В данном примере это Dante, который был в Debian 7, но в Debian 8 его по каким-то причинам больше нет. Поэтому его мы будем собирать из исходников.

Устанавливаем нужные компоненты для сборки.
aptitude install make gcc


Переходим в папку с исходниками.
cd /usr/src


Скачиваем исходники последней версии.
wget http://www.inet.no/dante/files/dante-1.4.1.tar.gz


На момент написания этой заметки последняя версия - версия 1.4.1. На официальном сайте проекта можно посмотреть так ли оно сейчас.

Распаковываем скаченный архив и переходим в распакованную папку.
tar xvfz dante-1.4.1.tar.gz
cd dante-1.4.1


Указываем параметры и приступаем к конфигурации. Пример:
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--disable-client \
--without-libwrap \
--without-bsdauth \
--without-gssapi \
--without-krb5 \
--without-upnp \
--without-pam


Собираем и устанавливаем.
make && make install


Создаём файл для загрузки сервера и правим его.
nano /etc/init.d/sockd


Содержание файла:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          sockd
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the dante SOCKS server.
# Description:       SOCKS (v4 and v5) proxy server daemon (sockd).
#                    This server allows clients to connect to it and
#                    request proxying of TCP or UDP network traffic
#                    with extensive configuration possibilities.
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version:  @(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl 
# Via: https://gitorious.org/dante/pkg-debian

PATH=/sbin:/usr/sbin:/bin:/usr/bin
NAME=sockd
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="-D"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DESC="Dante SOCKS daemon"
CONFFILE=/etc/$NAME.conf

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

set -e

# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
  if [ -r $CONFFILE ]; then
    uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`"
    if [ -n "$uid" ]; then
      touch $PIDFILE
      chown $uid $PIDFILE
    fi
  fi
}

case "$1" in
  start)
    if ! egrep -cve '^ *(#|$)' \
        -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
        $CONFFILE > /dev/null
    then
        echo "Not starting $DESC: not configured."
        exit 0
    fi
    echo -n "Starting $DESC: "
    touch_pidfile
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS \
        || return 2
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    echo "$NAME."
    ;;
  reload|force-reload)
    #
    #   If the daemon can reload its config files on the fly
    #   for example by sending it SIGHUP, do it here.
    #
    #   If the daemon responds to changes in its config file
    #   directly anyway, make this a do-nothing entry.
    #
     echo "Reloading $DESC configuration files."
     start-stop-daemon --stop --signal 1 --quiet --pidfile \
        $PIDFILE --exec $DAEMON -- -D
  ;;
  restart)
    #
    #   If the "reload" option is implemented, move the "force-reload"
    #   option to the "reload" entry above. If not, "force-reload" is
    #   just the same as "restart".
    #
    echo -n "Restarting $DESC: "
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
    sleep 1
    touch_pidfile
    start-stop-daemon --start --quiet --pidfile $PIDFILE \
      --exec $DAEMON -- -D
    echo "$NAME."
    ;;
  status)
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  *)
    N=/etc/init.d/$NAME
    # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $N {start|stop|restart|status|force-reload}" >&2
    exit 1
    ;;
esac

exit 0


Выставляем соответствующие права и обновляем конфигурацию.
chmod +x /etc/init.d/sockd
update-rc.d sockd defaults 100


Создаём и правим конфигурационный файл сервера.
nano /etc/sockd.conf


Содержание файла при минимальной конфигурации:
internal: eth1   port = 1080
external: eth0   
user.privileged:   root
user.unprivileged: nobody
socksmethod:       none
logoutput:         /var/log/sockd.log 
connecttimeout: 60 

client pass {
	from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
}

client block {
	from: 0.0.0.0/0 to: 0.0.0.0/0
	log: connect error
}

pass {
	from: 0.0.0.0/0 to: 0.0.0.0/0
	protocol: tcp udp
}

External и internal интерфесы (внешний и внутренний). Тут можно указать либо соответствующие IP адреса, либо имена интерфейсов, как в моём примере. eth1 в моём примере - это интерфейс, смотрящий в локальную сеть. У меня он есть. В зависимости от ваших нужд у вас его может и не быть. В этом случае в обоих строках можно указать eth0 (внешний сетевой интерфейс). Будет работать. Port - порт, который будет слушать сервер на указанных интерфейсах.

Важно! При данной конфигурации любой может соединиться с вашим прокси, что неприемлемо. Поэтому следует закрыть порт фаерволом, или как-то иначе ограничить доступ к данному порту. Фаервол - самый простой вариант. Закрыть доступ всем и оставить доступ только своему IP-адресу. Подробнее о конфигурации Dante можно прочитать на официальном сайте. Учитывая тот факт, что сервер у нас собран без поддержки авторизации, то вариант с IP адресами - единственный. Всё это можно прописать в конфигурации, но вариант с фаерволом проще.

На примере с утилитой ufw делаем следующее:
Устанавливаем.
aptitude install ufw


Запрещаем весь входящий трафик и разрешаем исходящий.
ufw default deny incoming
ufw default allow outgoing


Разрешаем себе доступ ко всем портам сервера.
ufw allow from 10.10.10.10/32


Где 10.10.10.10 - ваш домашний, внешний IP-адрес. Замените это значение на своё. Если у вас нет белого, статичного внешнего IP-адреса, то обратитесь к своему провайдеру для подключения оного. Если по каким-то причинам подключение выделенного IP-адреса невозможно, то воспользуйтесь сервисом динамичных DNS, коих насчитывается множество. Как платных, так и бесплатных. Например DinDNS. В этом случае в настройках фаервола и конфигурационного файла Dante вместо IP-адреса следует указать доменное имя, выданное вам сервисом. Это важный момент, и если вы на этом шаге допустите ошибку, то тем самым заблокируете себе доступ к собственному серверу.

Включаем ufw и презагружаем.
ufw enable
service ufw restart


Состояние фаервола можно проверить с помощью следующей команды:
ufw status


После настройки фаервола перезагружаем Dante.
/etc/init.d/sockd restart


Сервер работает и можно им пользоваться. Для браузеров Chrome и Firefox есть замечательный плагин FoxyProxy для настройки прокси-сервера. С его помощью можно в один клик включать и отключать прокси, а так же использовать правила на основе шаблонов для автоматического включения прокси при обращении к определённым адресам.

Debian 8. Установка SOCKS ProxyПоскольку в пакет услуг DigitalOcean так же входит IPv6, ваш браузер теперь сможет обращаться к сайтам и по IP-адресам шестой версии. Можно проверить своё соединение на предмет корректной работы IPv6 с помощью соответствующего сервиса. При использовании нашего SOCKS-сервера результат должен быть десять из десяти.

Напомню, что вышеописанный способ не подходит для анонимности. Однако позволяет обойти цензуру любого типа и скрыть наличие прокси-сервера в подавляющем большинстве случаев.
___
Tatyana K.



Tags: Debian Linux Proxy SOCKS Цензура


 
  • Creative Commons Licence
  • Norton Safeweb
  • Powered by MariaDB
  • Powered by Ubuntu
  • Website Uptime Monitoring By ServiceUptime.com
  • Yandex.Metrica