28 марта 2009

Прозрачное проксирование для localhost

Прозрачное проксирование удобно тем, что нет необходимости изменять настройки браузера, особенно когда используется несколько браузеров. Также прозрачным проксированием удобно ограничивать посещение определенных сайтов. В этой заметке расскажу какие минимальные настройки необходимо сделать, чтобы организовать прозрачное проксирование на том же компьютере, где установлен прокси. В примере использована ОС Debian Etch, в качестве прокси используется Squid3.

Для начала необходимо установить Squid. Сделать это можно выполнив в командной строке:
sudo aptitude install squid3
После установки необходимо отредактировать кофигурационный файл Squid. Файл /etc/squid3/squid.conf для обеспечения прозрачного проксирования (режим transparent) на localhost минимально должен быть следующего содержания:
http_port 127.0.0.1:3128 transparent
icp_port 0
htcp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
cache_dir ufs /var/spool/squid3 300 16 256
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
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 CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl myip src <здесь ваш ip адрес>
http_access allow myip

http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access deny all
htcp_access deny all
email_err_data off
error_directory /usr/share/squid3/errors/Russian-koi8-r
coredump_dir /var/spool/squid3
Жирным шрифтом выделены строки, которые обеспечат доступ с вашего IP адреса. Если IP адрес не указать, то получите сообщение о том, что доступ запрещен. Оригинальный конфиг Squid3 идет с коментариями и описаниями всех параметров, чтобы выделить уставноленные параметры в конфигурационном файле, нужно выполнить следующую команду:
grep -v "^#" /etc/squid3/squid.conf | sed -e '/^$/d'
После внесения изменений в конфигурационный файл Squid необходимо перезапустить Squid или указать Squid, чтобы он перечитал измененный файл. Для это нужно в командной строке выполнить:
sudo /etc/init.d/squid3 restart
или
sudo /etc/init.d/squid3 reload
На этом минимально необходимая настройка Squid в режиме transparent закончена. Теперь надо завернуть все обращения к порту http (tcp порт 80) на настроенный нами Squid (tcp порт 3128). Для этого надо внести изменения в таблицу nat утилиты iptables, выполнив в командной строке с привилегиями root:
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner proxy -j REDIRECT --to-port 3128
При установке Squid3 автоматически создается пользователь proxy. Прокси работает с правами этого пользователя. Мы указываем iptables перенаправлять все обращения на 80 порт от любого пользователя, кроме proxy на порт 3128. Теперь открываем браузер и пробуем выйти в интернет.

Чтобы убедится что вы работаете через Squid, посмотрите последние записи в его лог файле /var/log/squid3/access.log выполнив в командной строке c привилегиями root:
tail /var/log/squid3/access.log
Видим приблизительно следующий вывод:
1238221525.987 1513 172.25.55.195 TCP_MISS/200 3457 GET http://www.google.ru/ - DIRECT/72.14.203.104 text/html
Чтобы при пререзагрузке правило для iptables восстанавливалось автоматически, можно прописать его в файле /etc/rc.local. На этом минимальная настройка прозрачного проксирования закончена.

Также можно почитать:

Отправить комментарий

  © Blogger template Blue Surfing by Ourblogtemplates.com 2008

Наверх