вторник, 23 октября 2012 г.

Анонимный прокси своими руками

Появилась необходимость в стабильно работающем анонимном прокси сервере на территории США и Германии. Рассмотрев готовые решения, я пришёл к выводу, что не хочу платить деньги за сервис, который не могу полностью контролировать.

Итак, делаем прокси на своём сервере. Самые интересные варианты виртуальных серверов вы можете подобрать на сайте http://www.lowendbox.com/

Мне, например, посчастливилось взять VPS у https://www.providerservice.com всего за 1,6 евро с шикарными характеристиками:
Гипервизор xen
CPU 1 Core
RAM 512MB
HDD 10GB
RAID-10
Traffic 500GB
Можно использовать такой прокси (особенно с американским ip), например, для доступа к last.fm, pandora.com, play.google.com/music, либо к любым другим ресурсам. Недостаток данной конфигурации в отличии от VPN подключения в том, что трафик на участке "пользователь - прокси сервер" не шифруется.

При установке был выбран Debian 6, настройку которого в данной заметке я не рассматриваю.

Ниже приведён /etc/squid/squid.conf, обеспечивающий работу squid в режиме анонимайзера с обязательной авторизацией пользователей.
# порт доступа
http_port 3128

# авторизация, подробности ниже
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 1
auth_param basic realm Proxy server welcomes you
auth_param basic credentialsttl 2 hours

acl all src all
acl users proxy_auth REQUIRED
# пускать товарища с этого ip без пароля
acl worknetw src 111.111.111.111/32

acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT

acl purge method PURGE
acl CONNECT method CONNECT

# доступ только с доверенных ip или по паролю
http_access allow worknetw
http_access allow users

# остальных “шлём лесом”
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
icp_access deny all

# превращаем squid в анонимный прокси
forwarded_for off
header_access From deny all
header_access Server deny all
header_access User-Agent deny all
header_access WWW-Authenticate deny all
header_access Link deny all
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all
# отправять URL источника запроса, многие сайты без него ведут себя некорректно. При параноидальном подходе следует использовать
#header_access Referer deny all

# Отключаем дисковый кэш полностью
cache_mem 8 MB
cache_dir null /tmp
cache deny all
shutdown_lifetime 5 seconds

# обрезаем логи, хранить лишнюю информацию о нас не нужно
access_log none all
cache_store_log none
Использовать squid без авторизации на просторах Интернет самоубийство.
Первым делом устанавливаем пакет apache2-utils, содержащий htpasswd.
Создаём первого пользователя:
# htpasswd -c /etc/squid/passwd newuser
Остальных пользователей добавляем такой командой:
# htpasswd /etc/squid/passwd anotheruser

Заметка от  2014-04-11
Шифруемся под обычного добропорядочного гражданина дальше, подменяя User-Agent на популярное (Windows 7 ведь в деле ещё?).
header_access User-Agent deny all
header_replace User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
header_access Referer deny all
header_replace Referer unknown

Опция header_replace устаревшая. Для новых версий squid информация о замене здесь.
Результат можно проверить на http://www.useragentstring.com/index.php, там же доступна база User-Agent различных программ.

Разбирал проблему работы pandora.com через такой прокси, когда сайт так и не загружает плеер или страницу авторизации. Оказалось, что эти приятели сравнивают User-Agent самого браузера и полученную через Flash Player. При несовпадении результата работы не будет. Рабочий вариант настроек squid для пандоры будет таким:
# превращаем squid в анонимный прокси
forwarded_for off
header_access From deny all
header_access Server deny all
#придётся отправлять User-Agent
#header_access User-Agent deny all
header_access WWW-Authenticate deny all
header_access Link deny all
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all
header_access Referer deny all
header_replace Referer unknown