Все настройки выполнены в VPS от hostsailor.com
Другие статьи из цикла здесь.
Если вы вдохновились моими статьями и сделали всё, как написано, то у вас уже есть:
- Сервер, расположенный где-то в дебрях Европы.
- На сервере настроен вход SSH по сертификату и файрвол.
- На сервер установлен VPN-сервер, сгенерирован ворох сертификатов для сервера и клиентов.
- Ваши устройства (компьютеры, смартфоны, планшеты и т.п.) настроены на соединение с 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
и прочие. Тысячи их. Потом сравните с тем, что будет после настройки прокси.
Хватит читать, открываем консоль. Будем отращивать бороду собирать наш прокси из исходников.
Установим компилятор
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
Итак, что мы имеем после выполнения всех инструкций:
- Арендован и настроен VPS. Вход по сертификату.
- Установлен и настроен личный VPN-сервер и, в нагрузку, свой удостоверяющий уентр.
- Настроены клиенты VPN-сети.
- Установлен и настроен анонимный, прозрачный прокси-сервер.
В следующих статьях мы добавим еще немного анонимности нашему серверу и вообще поговорим за личную информационную безопасность во всемирной паутине. Не переключайтесь.