Squid: Прозрачное проксирование Web-трафика


Мини-руководство "шаг за шагом"

Устанавливаем squid из портов:

# cd /usr/ports/www/squid
# env FLAVOR=transparent make install clean

Или с помощью прекомпилированного пакета:

# pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/squid-2.5.STABLE12-transparent.tgz

Выставляем корректные права доступа для псевдоустройства pf(4):

# chgrp _squid /dev/pf
# chmod g+rw /dev/pf

Примечание. Начиная с OpenBSD 3.9, стало возможным использовать более ограниченные права доступа для /dev/pf:

# chgrp _squid /dev/pf
# chmod g+r /dev/pf

Редактируем главный конфигурационный файл прокси-сервера:

# vi /etc/squid/squid.conf
http_port 127.0.0.1:3128
# Для Squid 2.6 формат директивы http_port изменен:
# http_port 127.0.0.1:3128 transparent
icp_port 0
cache_mem 128 MB
cache_dir ufs /var/squid/cache 8192 16 256
cache_store_log none
pid_filename /var/run/squid.pid
acl our_networks src 192.168.1.0/24
http_access allow our_networks
cache_mgr admin@domain.ru
visible_hostname srv.domain.ru
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
# Для Squid 2.6 директивы httpd_accel_* следует удалить.

Проверяем конфиг на наличие ошибок:

# /usr/local/sbin/squid -k parse

Создаем кэш:

# /usr/local/sbin/squid -z

Загружаем squid (в некоторых случаях может оказаться полезным ключ '-D' - не выполнять DNS-тест):

# /usr/local/sbin/squid

Проверяем, готов ли сервер принимать подключения по 3128/tcp:

# netstat -na -f inet | grep 3128
tcp	0	0	127.0.0.1.3128	*.*	LISTEN

Заворачиваем на прокси входящие клиентские www-запросы:

# vi /etc/pf.conf

# С помощью макросов указываем сетевые интерфейсы
#
ext_if = "fxp0"
int_if = "fxp1"

# Таблицы радикса, в которые заносим IP-адреса клиентов, а также www-серверов,
# содержимое которых кэшировать не следует
#
table <clients> persist file "/etc/clients.conf"
table <no_cache> { 192.168.1.0/24, 192.168.2.0/24 }

# Выполняем трансляцию сетевых адресов
#
nat on $ext_if inet from <clients> to any -> $ext_if

# Перенаправляем на прокси-сервер все www-запросы, поступающие на внутренний
# сетевой интерфейс 
#
rdr on $int_if inet proto tcp from <clients> to ! <no_cache> \
	port www -> 127.0.0.1 port 3128

# В том случае, если в сети работают IPsec-клиенты, перенаправляем на
# прокси-сервер все www-запросы, поступающие на псевдоинтерфейс enc0
#
rdr on enc0 inet proto tcp from <clients> to ! <no_cache> \
	port www -> 127.0.0.1 port 3128

Указываем IP-адреса клиентских машин, которым нужно предоставить выход в Сеть:

# vi /etc/clients.conf
192.168.1.2/32
192.168.1.3/32
192.168.1.9/32

Перезагружаем набор рулесетов файервола:

# pfctl -f /etc/pf.conf

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

# crontab -e
0	8	1	*	*	/usr/local/sbin/squid -k rotate

В /etc/rc.local прописываем автозапуск squid:

# vi /etc/rc.local
if [ -x /usr/local/sbin/squid ]; then
	echo -n ' squid';	/usr/local/sbin/squid
fi 


OpenBSD.ru www@openbsd.ru
$RuOBSD: squid.html,v 1.26 2010/11/01 10:57:49 dinar Exp $