10 декабря 2011 в 18:44

Разное → Прозрачный squid в одной упряжке с tor

В свете недоступности некоторых сайтов во время выборов и митингов декабря одиннадцатого года, а также доступности их-же через анонимайзеры плюнул я в угол и полез наконец расчехлять tor.

К слову сказать, squid был у меня уже даненько поднят в прозрачном режиме и его работа меня устраивала целиком и полностью. Перенастраивать браузеры между tor и squid тоже не было никакого желания. Тем более что дома то компьютер не один, есть еще и медиастанция, и планшет и нетбуки итд. Так что надо было придумывать универсальное решение. Также надо было придумать, как просить сквида загружать через тор лишь некоторые сайты, а с остальными работать как всегда.

Также, во время раскопок решения было выяснено, что tor+squid работать не будут, ибо tor — socks-прокси, а не http-прокси и быть в качестве родительского прокси для сквида не хочет.

В итоге было сделано следующее: squid, следуя url-rexep'ам, обращается при необходимости к privoxy, как к родительскому прокси. Privoxy, в свою очередь обращается к tor. Дальше уже магия.

Итак, устанавливаем тор и privoxy. Как в вашем дистрибутиве это делается — я не знаю, у меня так: emerge tor privoxy.

И начинаем конфигурировать.

Конфиг tor'а:
User tor
PIDFile /var/run/tor/tor.pid
Log notice syslog
DataDirectory /var/lib/tor/data
SocksPort 3127
SocksListenAddress 127.0.0.1


Большего, в принципе, тору и не надо. Указали куда и сколько логов кидать, где данные хранить, кем представиться и какой порт слушать.

Конфиг privoxy:

user-manual /usr/share/doc/privoxy-3.0.17/user-manual/
confdir /etc/privoxy
logdir /var/log/privoxy
filterfile default.filter
logfile privoxy.log
listen-address 127.0.0.1:3126
toggle 1
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forward-socks4a / localhost:3127 .
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
socket-timeout 300
handle-as-empty-doc-returns-ok 1


Это также весь конфиг. В принципе небольшой. В этом конфиге я лишь поправил порт, на котором privoxy будет ожидать подключений, а также указал forward-socks4a на адрес: порт tor.

Со сквидом несколько сложнее, там конфиг побольше, так что приведу лишь то, что изменил/добавил:

acl tor_url url_regex "/etc/squid/url.tor"
cache_peer 127.0.0.1 parent 3126 0 no-query default
never_direct allow tor_url
always_direct deny tor_url
always_direct allow all


Ну, и наконец ради чего все это заворачивалось: сайты, которые следует пускать через тор:

gate squid # cat /etc/squid/url.tor
^https?.*facebook.*
^https?.*addthis.*
^https?.*ustream\.tv.*
^https?.*livejournal\.com.*


В принципе, можно на этом не останавливаться. Можно разделить url на сам url и на url path (все, что после первой /), и настроить пропуск через tor некоторых страниц.

Для этого надо немного изменить конфиг squid:

acl tor_url url_regex "/etc/squid/url.tor"
acl tor_urlpath url_regex "/etc/squid/urlpath.tor"
cache_peer 127.0.0.1 parent 3126 0 no-query default
never_direct allow tor_url
never_direct allow tor_urlpath
always_direct deny tor_url
always_direct deny tor_urlpath
always_direct allow all


И еще добавить один файл с путями:
gate squid # cat /etc/squid/urlpath.tor
\/.*login.*
\/.*sheridan.*


Желаю успешного серфинга.