Всем привет!
На днях прилетела интересная задача: «Найти бесплатные прокси-сервера». Взявшись за нее, решил обойти все сайты свободных проксей и понял — дохлые… ну или с высоким пингом.
После нескольких часов безуспешных поисков, было принято решение использовать свои ресурсы!
Итак, что в итоге должно получиться:
1. VM Ubuntu/Debian 2 CPU, 2 RAM, 8GB HDD (ну тоесть совсем не требовательная)
2. PRIVOXY для проксирования запросов (Можно взять nginx, varnish — я взял Privoxy)
3. TOR сервер
На своем опыте скажу, 70 проксей расходуют где то 30 мегабит канала. Нас вполне устроило. Возможно ваши ресурсы будут более требовательны к трафику.
Первым делом поднимаем необходимые библиотеки
apt-get install tor privoxy
В дальнейшем мы будем клонировать скрипты privoxy и tor и запускать отдельные службы поэтому первоначальная настройка не нужна.
Установка позади и приступим к формированию скрипта для автоматического развертывания сервиса
Определим начальные входные параметры
PID_END=99 #Ограничить количество ресурсов PRIVOXY_PORT=8100 #Стартовый порт для privoxy, соответственно всего будут заняты порты с 8100 по 8199 TOR_PORT=9100 #Стартовый порт для Tor, соответственно всего будут заняты порты с 9101 по 9199 TOR_CONTROL=20000 #Стартовый порт контроля за Tor. Данный параметр опустить нельзя, но в принципе для данной задачи он нам не нужен. BASE_IP=10.0.0.1 #Укажем, по какому IP будет происходить коннект к нашему прокси. Это удобно если эта же тачка будет открыта в интернет. BASE_DIR=./data_tor #Каталог с PIDами TOR BASE_DIR_PRIVOXY=/etc #Каталог с конфигами Privoxy, замена на другой каталог должна быть согласована с 52 и 53 строчкой кода INSTANCE=$1 #В скрипте передаем количество нужных инстансов. Это удобно если тебе не нужно сейчас 99 проксей
То, что будет подниматься первым, решайте сами. Я сначала поднимаю 99 экземпляров Tor, и позже 99 экземпяров Privoxy
Что бы TOR работал на каком нибудь определенном порту, нужно выполнить такую команду
tor --RunAsDaemon 1 --CookieAuthentication 0 --HashedControlPassword "" --ControlPort $c_port --PidFile tor$i.pid --SocksPort $s_port --DataDirectory ${BASE_DIR}/tor$i
А вот с privoxy придется сделать страшные вещи: сделать дубликаты конфигов и исполняемых файлов
Приведу сразу скрипты исполнения. В них все подробно расписал, что бы не ошибиться.
Запустить Tor и Privoxy можно так
./tor_privoxy_start.sh 50
Обновить потоки, так
./tor_privoxy_start.sh 50 update
#!bin/bash set -e #Остановим скрипт при первой ошибке PID_END=99 #Ограничить количество ресурсов PRIVOXY_PORT=8100 #Стартовый порт для privoxy, соответственно всего будут заняты порты с 8100 по 8199 TOR_PORT=9100 #Стартовый порт для Tor, соответственно всего будут заняты порты с 9101 по 9199 TOR_CONTROL=20000 #Стартовый порт контроля за Tor. Данный параметр опустить нельзя, но в принципе для данной задачи он нам не нужен. BASE_IP=10.0.0.1 #Укажем, по какому IP будет происходить коннект к нашему прокси. Это удобно если эта же тачка будет открыта в интернет. BASE_DIR=./data_tor #Каталог с PIDами TOR BASE_DIR_PRIVOXY=/etc #Каталог с конфигами Privoxy, замена на другой каталог должна быть согласована с 64 и 65 строчкой кода INSTANCE=$1 #В скрипте передаем количество нужных инстансов. Это удобно если тебе не нужно сейчас 99 проксей if [ ! -d $BASE_DIR ]; then mkdir -p $BASE_DIR fi #Обновляем сервисы если это нужно if [ $2 -eq "update" ]; then echo "Обновляем потоки TOR\n" for i in $(seq $INSTANCE) do c_port=$((TOR_CONTROL+i)) ./tor_renew.exp $c_port done exit 1 fi #Запускаем сервисы for i in $(seq 1 $INSTANCE) do p_port=$((PRIVOXY_PORT+i)) s_port=$((TOR_PORT+i)) c_port=$((TOR_CONTROL+i)) if [ $i -gt $PID_END ]; then echo "Количество Treads превысило максимально, допустимое значение\n" exit 1 fi if [ ! -d "$BASE_DIR/tor$i" ]; then echo "Создаем директорию ${BASE_DIR}/tor$i" mkdir -p "${BASE_DIR}/tor$i" fi if [ ! -d "${BASE_DIR_PRIVOXY}/privoxy$i" ]; then echo "Создаем директорию ${BASE_DIR_PRIVOXY}/privoxy$i" mkdir -p "${BASE_DIR_PRIVOXY}/privoxy$i" fi cp -a ${BASE_DIR_PRIVOXY}/privoxy ${BASE_DIR_PRIVOXY}/privoxy$i #копируем конфигурацию из оригинала #Заполняем конфигурацию echo -e "forward-socks4a / 127.0.0.1:$s_port .\nconfdir ${BASE_DIR_PRIVOXY}/privoxy$i\nlogdir /var/log/privoxy$l\nlogfile privoxy${I}.log\nactionsfile default.action\nactionsfile user.action\nfilterfile default.filter\ndebug 4096\ndebug 8192\nlisten-address $BASE_IP:$p_port\ntoggle 1\nenable-remote-toggle 0\nenable-edit-actions 0\nenable-remote-http-toggle 0\nbuffer-limit 4096" > ${BASE_DIR_PRIVOXY}/privoxy$i/config cp -r /etc/init.d/privoxy /etc/init.d/privoxy${I} cp -r /usr/sbin/privoxy /usr/sbin/privoxy$i sed -i "s/NAME=privoxy/NAME=privoxy${i}/g" /etc/init.d/privoxy$i FROM="CONFIGFILE=\/etc\/privoxy\/config" TO="CONFIGFILE=\/etc\/privoxy${i}\/config" sed -i "s/$FROM/$TO/g" /etc/init.d/privoxy$i echo "Запуск: tor --RunAsDaemon 1 --CookieAuthentication 0 --HashedControlPassword \"\" --ControlPort $c_port --PidFile tor$i.pid --SocksPort $s_port --DataDirectory ${BASE_DIR}/tor$i" tor --RunAsDaemon 1 --CookieAuthentication 0 --HashedControlPassword "" --ControlPort $c_port --PidFile tor$i.pid --SocksPort $s_port --DataDirectory ${BASE_DIR}/tor$i #Применяем изменения /etc/init.d/privoxy${i} restart done echo "Update RC" update-rc.d defaults systemctl daemon-reload #для удобства выводим запущенные прокси в файл netstat -4ln | grep 10.1.9.98:80** | grep -Eo '10.{12}' > ./proxy_list.txt
и скрипт обновления потока Tor через контрольный порт
#!/usr/bin/expect -f set port [lindex $argv 0] spawn telnet 127.0.0.1 $port expect "Escape character is '^]'." send "AUTHENTICATE\r" expect "250 OK" send "signal NEWNYM\r" expect "250 OK" send "quit\r"
И не забудьте прикрутить мониторинг!
P.S. Использовать в можно!
ссылка на оригинал статьи https://habrahabr.ru/post/315002/
Добавить комментарий