Прозрачный 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.*


Желаю успешного серфинга.
Tags:
tor, squid, proxy, privoxy, администрирование

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.