Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
squid.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.45 Mб
Скачать

17.1 Прозрачное кеширование для Solaris, SunOs, и bsd систем

ЗАМЕЧАНИЕ: Вам необязательно использовать IP Filter на FreeBSD. Используйте встроенный ipfw взамен этого. См. ниже подраздел, посвященный FreeBSD.

Установка IP Filter

Прежде всего скачайте и установите IP Filter package.

Конфигурирование ipnat

В /etc/ipnat.rules занесите такие строки:

# Redirect direct web traffic to local web server.

rdr de0 1.2.3.4/32 port 80 -> 1.2.3.4 port 80 tcp

# Redirect everything else to squid on port 8080

rdr de0 0.0.0.0/0 port 80 -> 1.2.3.4 port 8080 tcp

Отредактируйте ваши стартовые скрипты, чтобы включить ipnat. К примеру на FreeBSD это выглядит так:

/sbin/modload /lkm/if_ipl.o

/sbin/ipnat -f /etc/ipnat.rules

chgrp nobody /dev/ipnat

chmod 644 /dev/ipnat

Настройка Squid

Squid-2

Squid-2 (после версии beta25) имеет встроенную поддержку IP filter. Просто включите ее при запуске configure:

./configure --enable-ipf-transparent

Добавьте в ваш squid.conf строки:

http_port 8080

httpd_accel_host virtual

httpd_accel_port 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

Вам необязательно использовать порт 8080, но его номер должен совпадать с указанным в файле /etc/ipnat.rules.

Squid-1.1

Патчи для Squid-1.X доступны на Quinton Dolan's Squid page. Добавьте эти строк в squid.conf:

http_port 8080

httpd_accel virtual 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

Благодарность Quinton Dolan.

17.2 Прозрачное кеширование на Linux 2.0 и ipfwadm

от Rodney van den Oever

Замечание: Прозрачное проксирование НЕ работает на Linux 2.0.30! На Linux 2.0.29 работает хорошо. Если вы используете более свежую версию ядра типа 2.2.X, то вы должны использовать ipchains при настройках, как описано ниже.

Предупреждение: this technique has some shortcomings.

  1. Этот метод поддерживает только протокол http, gopher и ftp не поддерживаются

  2. Т.к. у броузера не установлены настройки прокси-сервера, то он использует FTP-протокол (с портом назначения 21) и протокол HTTP не требуется. Вы не можете установить правило перенаправления на прокси-серве, если используется неверный протокол. Подобная проблема наблюдается и с gopher. Обычно все запросы к прокси транслируются клиентом в HTTP-протокол, но т.к. клиент ничего не знает о перенаправлении, то этого никогда не происходит.

Если вас не смущают побочные эффекты - вперед, компилировать ядро с поддержкой файервола и перенаправления. Вот важные параметры из /usr/src/linux/.config:

#

# Code maturity level options

#

CONFIG_EXPERIMENTAL=y

#

# Networking options

#

CONFIG_FIREWALL=y

# CONFIG_NET_ALIAS is not set

CONFIG_INET=y

CONFIG_IP_FORWARD=y

# CONFIG_IP_MULTICAST is not set

CONFIG_IP_FIREWALL=y

# CONFIG_IP_FIREWALL_VERBOSE is not set

CONFIG_IP_MASQUERADE=y

CONFIG_IP_TRANSPARENT_PROXY=y

CONFIG_IP_ALWAYS_DEFRAG=y

# CONFIG_IP_ACCT is not set

CONFIG_IP_ROUTER=y

Вам также необходимо включить IP Forwarding. Один из способов сделать это - добавить такую строку в стартовый скрипт:

echo 1 > /proc/sys/net/ipv4/ip_forward

Сходите на страницу Linux IP Firewall and Accounting, скачайте дистрибутив ipfwadm и установите его. Старые версии ipfwadm могут не работать. Вам возможно понадобится последняя версия2.3.0. Вы будете использовать ipfwadm для установки правил перенаправления. Я добавил такое правило в скрипт, который запускается из /etc/rc.d/rc.inet1 (Slackware) which sets up the interfaces at boot-time. Перенаправление должно идти прежде других правил Input-accept. Чтобы убедиться, что все действительно работает, я выключил форвардинг (маскарадинг), который обычно работает.

/etc/rc.d/rc.firewall:

#!/bin/sh

# rc.firewall Linux kernel firewalling rules

FW=/sbin/ipfwadm

# Flush rules, for testing purposes

for i in I O F # A # If we enabled accounting too

do

${FW} -$i -f

done

# Default policies:

${FW} -I -p rej # Incoming policy: reject (quick error)

${FW} -O -p acc # Output policy: accept

${FW} -F -p den # Forwarding policy: deny

# Input Rules:

# Loopback-interface (local access, eg, to local nameserver):

${FW} -I -a acc -S localhost/32 -D localhost/32

# Local Ethernet-interface:

# Redirect to Squid proxy server:

${FW} -I -a acc -P tcp -D default/0 80 -r 8080

# Accept packets from local network:

${FW} -I -a acc -P all -S localnet/8 -D default/0 -W eth0

# Only required for other types of traffic (FTP, Telnet):

# Forward localnet with masquerading (udp and tcp, no icmp!):

${FW} -F -a m -P tcp -S localnet/8 -D default/0

${FW} -F -a m -P udp -S localnet/8 -D default/0

Здесь весь трафик из локальной сети идущий куда-либо по 80-му порту перенаправляется на локальный порт 8080. Правила должны выглядеть так:

IP firewall input rules, default policy: reject

type prot source destination ports

acc all 127.0.0.1 127.0.0.1 n/a

acc/r tcp 10.0.0.0/8 0.0.0.0/0 * -> 80 => 8080

acc all 10.0.0.0/8 0.0.0.0/0 n/a

acc tcp 0.0.0.0/0 0.0.0.0/0 * -> *

Я протестировал это на Windows 95 и с Microsoft Internet Explorer 3.01 и с Netscape Communicator и работали оба броузера с выключенными настройками прокси.

Однажды squid зациклился, когда я указал броузеру на локальный порт 80. Это было исправлено добавлением правила reject для клиента этого адреса:

${FW} -I -a rej -P tcp -S localnet/8 -D hostname/32 80

IP firewall input rules, default policy: reject

type prot source destination ports

acc all 127.0.0.1 127.0.0.1 n/a

rej tcp 10.0.0.0/8 10.0.0.1 * -> 80

acc/r tcp 10.0.0.0/8 0.0.0.0/0 * -> 80 => 8080

acc all 10.0.0.0/8 0.0.0.0/0 n/a

acc tcp 0.0.0.0/0 0.0.0.0/0 * -> *

Замечание по преобразованию имен: Взамен передачи URL-лов прокси-серверу, броузер самостоятельно резолвит эти URL-лы. Убедитесь, что на рабочих станциях установлен локальный сервер имен, для минимизации исходящего трафика.

Если у вас уже запущена служба доменных имен на вашем сервере с файлерволом или прокси (что в любом случае является хорошей идеей, IMHO) разрешите вашим рабочим станциям ее использовать.

Дополнительные замечания от Richard Ayres

I'm using such a setup. The only issues so far have been that:

  1. Бесполезно использовать родительский кеш моего провайдера (cache-?.www.demon.net), потому-что проксирующий squid видит только IP-адреса, а не имена хостов и демон вообще не asked for IP addresses by other users;

  2. Linux kernel 2.0.30 не работает с прозрачным проксированием (я использую 2.0.29);

  3. Клиентские броузеры должны самостоятельно преобразовывать имена хостов, т.к. они не знают, что используют прокси;

  4. Microsoft Network не желает авторизовывать своих пользователей через прокси, поэтому мне пришлось специально *не* перенаправлять подобные пакеты (моя компания пользуется услугами MSN).

Несмотря на это, я имею 30-40% попаданий в кеш размером 50MB для 30-40 пользователей и вполне доволен результатом.

См. также страницу Daniel Kiracofe.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]