Анонимность в интернете своими руками. Установка и настройка анонимного и прозрачного прокси 3proxi

Все настройки выполнены в VPS от hostsailor.com

Другие статьи из цикла здесь.

Если вы вдохновились моими статьями и сделали всё, как написано, то у вас уже есть:

  1. Сервер, расположенный где-то в дебрях Европы.
  2. На сервере настроен вход SSH по сертификату и файрвол.
  3. На сервер установлен VPN-сервер, сгенерирован ворох сертификатов для сервера и клиентов.
  4. Ваши устройства (компьютеры, смартфоны, планшеты и т.п.) настроены на соединение с VPN-сервером.

Теперь ваш трафик по территории собственной страны идет только в зашифрованном виде, а доступ к ключам шифрования только у вас.

Казалось бы, живи и радуйся. Но не всё так просто. Ваше клиентское устройство, напрямую или косвенно, продолжает многое сообщать о вас: тип устройства, операционная система, внутренний IP адрес, и пр. Так происходит, потому что VPN-ервер не модифицирует полученные от вас пакеты, он просто их расшифровывает и отправляет в сеть.

Хватит это терпеть! Мы запилим свой прокси-сервер с анонимностью и прозрачностью.

Из статьи в  википедии:

Proxy server (Прокси сервер) – промежуточный компьютер, который является посредником между вашим компьютером и Интернетом. Прокси обычно используют либо для ускорения работы в сети Интернет, либо для анонимного прохождения в сети Интернет. Так же использование анонимного прокси, может быть использовано, как дополнительное средство защиты: анонимный прокси (anonymous proxy) подменяет Ваш IP-адрес, и злоумышленник будет пытаться совершить атаку не на Ваш компьютер, а на прокси сервер, у которого, зачастую, максимально мощная система защиты.

Там ещё есть интересное в статье, почитайте.

Нас интересует умение прокси подменять отправителя пакетов и обрезать из них всё лишнее. Т.е. повысить свою анонимность. Я уже писал в первой части, что 100% анонимности мы не добьёмся, но двигаться в этом направлении мы будем.

Есть over9000 реализаций прокси. Изначально я хотел использовать squid, но с кальмаром возникли проблемы. В разных версиях дистрибутивов он вёл себя по-разному с протоколом https. Поскольку данная статья рассчитана на не квалифицированного читателя, то перегружать её всеми возможными костылями для squid я посчитал не целесообразным. Поэтому, после недолгих исканий, был выбран 3proxy(https://www.3proxy.ru).

И да, как вы наверняка помните, наш файрволл настроен таким образом, что прокси будет принимать подключения только от клиентов VPN-сети.

Пока мы еще не сделали анонимный прокси, попробуйте позаходить на сайты, показывающие степень вашей анонимности. Например:

https://do-know.com/privacy-test.html

https://whoer.net/ru        

https://2ip.ru/privacy/

http://witch.valdikss.org.ru/

и прочие. Тысячи их. Потом сравните с тем, что будет после настройки прокси.

Хватит читать, открываем консоль. Будем отращивать бороду собирать наш прокси из исходников.

Установим компилятор

yum -y install gcc

Перейдём в домашнюю папку

cd ~

Посмотрим, какая версия 3proxy сейчась актуальна на странице загрузок https://www.3proxy.ru/download/

На момент написания статьи это была версия 0.8.9

Качаем её

wget https://github.com/z3APA3A/3proxy/archive/0.8.9.tar.gz

Распаковываем

tar -xvzf 0.8.9.tar.gz

И переходим в папку с исходниками

cd 3proxy-0.8.9

В опциях исходников делает наш сервер полностью анонимным командой:

sed -i '1s/^/#define ANONYMOUS 1\n/' ./src/proxy.h

Компилируем (О да! Теперь вы можете хвастаться, что в линуксе компилировали из сырцов.)

make -f Makefile.Linux

Подготовим рабочее место для нашего прокси

mkdir -p /etc/3proxy/bin
touch /etc/3proxy/3proxy.pid

Теперь перенесем скомпилированные исполняемые файлы в рабочую папку

cp ./src/3proxy /etc/3proxy/bin
cp ./src/TransparentPlugin.ld.so /etc/3proxy/bin
cp ./cfg/3proxy.cfg.sample /etc/3proxy/3proxy.cfg

В папке /etc/rc.d/init.d

создаем файл 3proxy следующего содержания

#!/bin/sh
#
# chkconfig: 2345 20 80
# description: 3proxy tiny proxy server
#              
#
# 
#

case "$1" in
   start)    
       echo Starting 3Proxy
   
       /etc/3proxy/bin/3proxy /etc/3proxy/3proxy.cfg
   
       RETVAL=$?
       echo
       [ $RETVAL ]    
       ;;

   stop)
       echo Stopping 3Proxy
       if [ /etc/3proxy/3proxy.pid ]; then
	       /bin/kill `cat /etc/3proxy/3proxy.pid`
       else
               /usr/bin/killall 3proxy
       fi
   
       RETVAL=$?
       echo
       [ $RETVAL ]
       ;;

   restart|reload)
       echo Reloading 3Proxy
       if [ /etc/3proxy/3proxy.pid ]; then
	       /bin/kill -s USR1 `cat /etc/3proxy/3proxy.pid`
       else
               /usr/bin/killall -s USR1 3proxy
       fi
       ;;


   *)
       echo Usage: $0 "{start|stop|restart}"
       exit 1
esac
exit 0

Сохраняем и устанавливаем права 0755

Теперь откроем файл /etc/3proxy/3proxy.cfg

Удалите всё его содержимое и вставьте следующее:

daemon

pidfile /etc/3proxy/3proxy.pid
plugin /etc/3proxy/bin/TransparentPlugin.ld.so transparent_plugin

nserver 8.8.8.8
nserver 8.8.4.4

nscache 65536

timeouts 1 5 30 60 180 1800 15 60

#log /dev/null
log /etc/3proxy/3proxy.log D
logformat "- +_L%t.%.  %N.%p %E %U %C:%c %R:%r %O %I %h %T"

external 123.123.123.123
internal 10.8.0.1

auth none
maxconn 64

allow *
parent 1000 http 0.0.0.0 0
allow *
parent 1000 socks5 0.0.0.0 0
tcppm -i10.8.0.1 8080 127.0.0.1 11111 

Здесь, в строчке

external 123.123.123.123

вместо 123.123.123.123 вписываем IP адрес вашего сервера.

Сохраним и закроем.

Прокси-сервер готов к запуску. Запустим его:

service 3proxy start

Отлично, прокси запустился.

Если пишет ошибки, смотрим, что написано в консоли, что написано в /etc/3proxy/3proxy.log.[дата и время лога]

Если вы всё сделали в точности, как написано выше, ошибок быть не должно.

Теперь нам нужно поправить правила для iptables. Чтобы не настраивать прокси-сервер на всех клиентских устройствах (на смартфонах это зачастую попросту невозможно без рут-прав), мы сделаем наш прокси-сервер прозрачным. Т.е. для клиентов он будет не виден. Однако весь трафик, приходящий по VPN будет заворачиваться на прокси-сервер, а уже потом отправляться в открытую сеть.

Открываем Файл /root/ipt-set и аккуратно вносим следующие исправления:

Находим строчку:

SQUID_PORT=»8080″

и исправляем на

PROXI_PORT=»8080″

Находим строчки

# squid

$IPT -A INPUT -i $IF_OVPN -p tcp —dport $SQUID_PORT -j ACCEPT

$IPT -A INPUT -i $IF_OVPN -p udp —dport $SQUID_PORT -j ACCEPT

 

и исправляем на

# proxi

$IPT -A INPUT -i $IF_OVPN -p tcp —dport $PROXI_PORT -j ACCEPT

$IPT -A INPUT -i $IF_OVPN -p udp —dport $PROXI_PORT -j ACCEPT

 

И сразу, после этих строчек добавляем ещё две:

$IPT -t nat -A PREROUTING -i $IF_OVPN -p tcp -m tcp —dport 80 -j DNAT —to-destination 10.8.0.1:$PROXI_PORT

$IPT -t nat -A PREROUTING -i $IF_OVPN -p tcp -m tcp —dport 443 -j DNAT —to-destination 10.8.0.1:$PROXI_PORT

Сохраняем и закрываем файл.

Приведу, на всякий случай, файл /root/ipt-set полностью:

#!/bin/sh
IF_EXT="venet0"
IF_OVPN="tun0"

OVPN_PORT="443"
PROXI_PORT="8080"

IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"

# flush
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
$IPT6 --flush

# loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# default
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT6 -P INPUT DROP
$IPT6 -P OUTPUT DROP
$IPT6 -P FORWARD DROP


# allow forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# NAT
# #########################################
# SNAT - local users to out internet
$IPT -t nat -A POSTROUTING -o $IF_EXT -j MASQUERADE

# INPUT chain
# #########################################
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# ssh
$IPT -A INPUT -i $IF_EXT -p tcp --dport 22 -j ACCEPT
# VPN
$IPT -A INPUT -i $IF_OVPN -p icmp -s 10.8.0.0/24 -j ACCEPT
# DNS
$IPT -A INPUT -i $IF_OVPN -p udp --dport 53 -s 10.8.0.0/24 -j ACCEPT
# openvpn
$IPT -A INPUT -i $IF_EXT -p udp --dport $OVPN_PORT -j ACCEPT

# proxi
$IPT -A INPUT -i $IF_OVPN -p tcp --dport $PROXI_PORT -j ACCEPT
$IPT -A INPUT -i $IF_OVPN -p udp --dport $PROXI_PORT -j ACCEPT
$IPT -t nat -A PREROUTING -i $IF_OVPN -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.0.1:$PROXI_PORT
$IPT -t nat -A PREROUTING -i $IF_OVPN -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.8.0.1:$PROXI_PORT


# FORWARD chain
# #########################################
$IPT -A FORWARD -i $IF_OVPN -o $IF_EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $IF_EXT -o $IF_OVPN -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -s 10.8.0.0/24 -d 10.8.0.0/24 -j ACCEPT

# OUTPUT chain
# #########################################
$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Теперь весь трафик из VPN для портов 80 и 443 (т.е. http и https) будет перенаправлен на наш прокси.

Применим правила командой:

/root/ipt-set

Если вы прямо сейчас подключены к VPN-серверу, то уже можете заходить на разные сайты и проверять, что всё работает. Зайдите на один-два любых сайта, убедитесь, что они открываются. Теперь посмотрите в файл лога /etc/3proxy/3proxy.log.[дата и время лога]

В нем вы должны увидеть свою активность. Если всё работает, то остановим наш прокси:

service 3proxy stop

Откроем его кофиг /etc/3proxy/3proxy.cfg и строчки:

#log /dev/null

log /etc/3proxy/3proxy.log D

logformat «- +_L%t.%.  %N.%p %E %U %C:%c %R:%r %O %I %h %T»

превратим в:

log /dev/null

#log /etc/3proxy/3proxy.log D

#logformat «- +_L%t.%.  %N.%p %E %U %C:%c %R:%r %O %I %h %T»

 

Теперь прокси-сервер не будет писать логи и сохранять историю посещений сайтов. Сразу удалим уже имеющийся лог /etc/3proxy/3proxy.log.[дата и время лога]

И запустим прокси:

service 3proxy start

И добавим его в автозагрузку:

/sbin/chkconfig 3proxy on

Итак, что мы имеем после выполнения всех инструкций:

  1. Арендован и настроен VPS. Вход по сертификату.
  2. Установлен и настроен личный VPN-сервер и, в нагрузку, свой удостоверяющий уентр.
  3. Настроены клиенты VPN-сети.
  4. Установлен и настроен анонимный, прозрачный прокси-сервер.

В следующих статьях мы добавим еще немного анонимности нашему серверу и вообще поговорим за личную информационную безопасность во всемирной паутине. Не переключайтесь.

Вы можите оставить комментарий, или поставить трэкбек со своего сайта.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>