Linux в Красноярске

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. На этом минимальная настройка прозрачного проксирования закончена.

Комментариев нет:

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