SQUID Часто задаваемые вопросы --------------------------------------------------------------- Оригинал этого текста расположен на странице http://www.atals.net.ru/Squid-faq.html ║ http://www.atals.net.ru/Squid-faq.html ---------------------------------------------------------------
Squid - это кеширующий прокси сервер, являющийся, на наш взгляд, наиболее продвинутым из свободно распространяемых прокси серверов. Это перевод FAQ по этому серверу. Недавно появилась новая версия этого документа. Тем не менее этот перевод содержит ответы на большинство важных вопросов по Squid.
Присылайте ваши замечания и предложения на ilgam@atlas.net.ru

Перевод на русский язык - Васильев Ильгам, Атлас Нетворкс, Copyright © 1997

Часто задаваемые вопросы

1 О Squid, этот FAQ, и другая информация по Squid

1.1 Что такое Squid?

Squid это высокопроизводительный кеширующий прокси для web клиентов, поддерживающий ftp, gopher, и http. В отличии от традиционных кеширующих программ, Squid все запросы выполняет как один, неблокируемый процесс ввода/вывода. Squid сохраняет часто запрашиваемые данные в ОЗУ, кеширует DNS запросы, не блокируется при выполнении DNS запросов, и не кеширует неудавшиеся запросы. Также поддерживает SSL, расширенный контроль доступа и полную регистрацию запросов. Используя Internet Cache Protocol (ICP), кеши Squid можно расположить иерархически для дополнительного выигрыша в пропускной способности канала.

Squid состоит из - основной программы squid, программы обработки DNS запросов dnsserver, программы скачивания ftp данных ftpget, а также некоторых инструментов управления. Когда squid запускается, он запускает заданное число dnsserver-ов, каждый из которых работает самостоятельно, блокируя только DNS запросы. Таким образом уменьшается общее время ожидания ответа DNS.

Squid берет свое начало с основанного ARPA проекта Harvest. http://harvest.cs.colorado.edu/

1.2 Что такое кеширование объектов интернет?

Это способ хранения запрошенных из Интернет объектов (например, данных доступных по http, ftp и gopher протоколам) на сервере, находящемся ближе к запрашивающему компьютеру нежели исходный. Браузеры могут потом использовать Squid кеш как http прокси-сервер, уменьшая как время доступа, так и загрузку канала.

1.3 Почему Squid?

Harris' Lament отвечает, "All the good ones are taken." - "Все лучшие названия уже расхватали"

Нам нужно было как-то отличаться от кеша Harvest. Squid было кодовое название на начальной стадии разработки, а потом оно прилипло.

1.4 Какая последняя версия Squid?

Squid обновляется часто; о последних изменениях смотрите здесь http://squid.nlanr.net/Squid/

1.5 Кто автор Squid?

Squid это результат усилий нескольких людей из сообщества Internet. Возглавляет проект Duane Wessels из National Laboratory for Applied Network Research (основанной National Science Foundation).

1.6 Где можно взять Squid?

Вы можете взять по ftp здесь:
ftp://squid.nlanr.net/pub/.
Также много зеркал по всему миру:
http://squid.nlanr.net/Squid/mirrors.html

1.7 Где подписаться на список рассылки Squid?

Архивы различных списков рассылки доступны на http://squid.nlanr.net/Mail-Archive/squid-users/

1.8 Web страницы посвященные Squid.

Здесь информация по программе Squid http://squid.nlanr.net/Squid/, а здесь http://www.nlanr.net/Cache/ дополнительная информация по кешированию вообще.

1.9 Какой официальный статус Squid?

Из дистрибутива Squid, файл README:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

1.10 Распространители Squid FAQ

Jonathan Larmour <JLarmour@origin-at.co.uk>
Cord Beermann <cord@cc.fh-lippe.de>
Tony Sterrett <tony@nlanr.net>
Gerard Hynes <ghynes@compusult.nf.ca>
<tkatayam@pi.titech.ac.jp>
Duane Wessels <wessels@nlanr.net>
K Claffy <kc@nlanr.net>
Paul Southworth <pauls@etext.org>

Пожалуйста шлите исправления, обновления и комментарии на: squid-faq@nlanr.net.


2 Инсталляция

2.1 Какие файлы следует брать?

Необходимо скачать архив исходников следующего вида squid-x.y.z-src.tar.gz (например, squid-1.1.6-src.tar.gz) с http://squid.nlanr.net/Squid/. Содержание различий между версиями доступно для апгрейда, которые применяются программой patch, которую можно взять здесь ftp://prep.ai.mit.edu/pub/gnu/.

2.2 Как мне установить Squid?

Прежде всего необходимо распаковать исходный архив, следующим образом:

% gzip -dc squid-x.y.z-src.tar.gz | tar xvf -

Затем нужно отконфигурировать, откомпилировать и установить

% cd squid-x.y.z
% ./configure
% make all
% make install

Лучше всего использовать GNU C (gcc) компилятор. Последние версии имеют формат ANSI C, так что старые компиляторы могут не работать. GNU C компилятор доступен на ftp://prep.ai.mit.edu/pub/gnu/. Можно задать несколько параметров конфигурационного скрипта. Наиболее полезный --prefix для установки в другую директорию. По умолчанию это /usr/local/squid.Чтобы поменять следует сделать следующее:

% cd squid-x.y.z
% ./configure --prefix=/some/other/directory/squid

2.3 На каких операционных системах работает Squid?

Это ПО разрабатывалось для работы на любых современных Unix системах, и известно что работает на AIX, FreeBSD, HP-UX, IRIX, Linux, OSF/1, Solaris, и SunOS. Если Вы обнаружили специфичные для данной платформы проблемы, пожалуйста дайте нам знать по email: squid-bugs@nlanr.net.

2.4 Для чего нужен файл squid.conf?

Файл squid.conf задает конфигурацию squid. Конфигурация включает в себя (но не ограничивается этим) номер порта HTTP , номер порта для ICP запросов, приходящие и исходящие запросы, информацию о доступе к брандмауэру, и значения различных таймаутов.

2.5 А есть ли пример squid.conf?

Да, после того как Вы успешно проделали make install, пример файла squid.conf будет находиться в поддиректории "etc" инсталяционной директории Squid. Пример squid.conf содержит комментарии объясняющие каждую опцию.

2.6 Как мне запустить squid?

После редактирования конфигурационного файла, можно запустить squid из скрипта RunCache. Если Вы устанавливали в директорию по умолчанию то команда для запуска будет следующей:

/usr/local/squid/bin/RunCache &

2.7 Как мне узнать что Squid запущен?

Для этого есть программа client:

% client http://www.netscape.com/ > test

Существуют и другие HTTP программы-клиенты работающие в командной строке. Эти две Вы можете найти полезными:url_get, по адресу ftp://ftp.pasteur.fr/pub/Network/url_get/, иechoping, по адресу ftp://ftp.pasteur.fr/pub/Network/echoping/. Также проверьте наиболее важные файлы access.log иcache.log.

2.8 Как использовать патчи?

Необходима программа patch. Обычно достаточно:
    cd squid-1.1.x
    patch < /tmp/fixes.patch

Но время от времени могут попадаться патчи созданные из директории 'src', тогда нужно:
    cd squid-1.1.x/src
    patch < /tmp/fixes.patch

Если программа patch будет чем-то недовольна и будет отказываться работать надо будет взять более новую версию, например здесь GNU FTP site. 






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

3.1 Как сделать иерархию прокси?

Чтобы разместить кеш в иерархии, нужно воспользоваться cache_host директивой в squid.conf, чтобы указать родительский и братский (или сестринский :) - т.е. одного уровня) узел.

Например, приведенный нижеsquid.conf на childcache.example.com сконфигурирован так, что его кеш получает данные с одного родительского и с двух братских кешей:

        #  squid.conf - On the host: childcache.example.com
        #
        #  Format is: hostname  type  http_port  udp_port
        #
        cache_host parentcache.example.com   parent  3128 3130
        cache_host childcache2.example.com   sibling 3128 3130
        cache_host childcache3.example.com   sibling 3128 3130
Директива cache_host_domain позволяет указывать для каждого домена как братский, так и родительский кеш:
        #  squid.conf - On the host: sv.cache.nlanr.net
        #
        #  Format is: hostname  type  http_port  udp_port
        #

        cache_host electraglide.geog.unsw.edu.au parent 3128 3130
        cache_host cache1.nzgate.net.nz          parent 3128 3130
        cache_host pb.cache.nlanr.net   parent 3128 3130
        cache_host it.cache.nlanr.net   parent 3128 3130
        cache_host sd.cache.nlanr.net   parent 3128 3130
        cache_host uc.cache.nlanr.net   sibling 3128 3130
        cache_host bo.cache.nlanr.net   sibling 3128 3130
        cache_host_domain electraglide.geog.unsw.edu.au .au
        cache_host_domain cache1.nzgate.net.nz   .au .aq .fj .nz
        cache_host_domain pb.cache.nlanr.net     .uk .de .fr .no .se .it
        cache_host_domain it.cache.nlanr.net     .uk .de .fr .no .se .it
        cache_host_domain sd.cache.nlanr.net     .mx .za .mu .zm
Вышеприведенная конфигурация описывает, что кеш будет использовать pb.cache.nlanr.net и it.cache.nlanr.net для доменов uk, de, fr, no, se и it, sd.cache.nlanr.net для доменов mx, za, mu и zm, и cache1.nzgate.net.nz для доменов au, aq, fj, и nz.

3.2 Как мне подключиться к иерархии NLANR?

Существует простой набор правил подключения к иерархии кешей NLANR.

3.3 Почему я должен подключаться к иерархии NLANR?

Иерархия NLANR может являться начальным источником родительских и братских кешей. Подключение к системе глобальных кешей NLANR чаще всего сопровождается повышением производительности.

3.4 Как мне зарегистрировать свой кеш на NLANR?

Просто включите эти опции в своем squid.conf и все:
cache_announce 24
announce_to sd.cache.nlanr.net:3131

Примечание: анонсирование кеша это не тоже самое что вступление в иерархию NLANR. Вы можете вступить в иерархию NLANR без регистрации, и можно зарегистрироваться без вступления в иерархию кешей NLANR.

3.5 Как мне найти ближайшие ко мне кеши и организовать родительские/дочерние/братские отношения с ними?

Посетите NLANR регистрацонную БД кешей и поищите ближайший. Да, и помните, что если кеш зарегистрирован в базе это еще не значит что он захочет быть Вашим родителем/дочерью/братом. Но спросить всегда можно...

3.6 Что такое режим httpd-ускорителя?

Часто люди испытывают трудности в понимании ускорителей и кеширующих прокси, обычно приводящих к путанице в понимании "приходящих" и "исходящих" данных. Рассмотрим это в терминах запросов (например, исходящий запрос - это с локальной машины в большой плохой Интернет) Данные принимаемые в ответ - это приходящий. Обратный смысл получается если его рассматривать как "запрос для приходящих данных".

Ускоритель кеширует приходящие запросы для исходящих данных (например, тех что Вы опубликовали на своем сервере). Тем самым он забирает загрузку с Вашего HTTP сервера и внутренней сети. Вы убираете сервер с 80 порта (или какой он у Вас там), и подставляете ускоритель, который пробрасывает HTTP данные с "реального" HTTP сервера (только ускоритель должен знать где реальный сервер). Внешний мир не видит ни какой разницы (кроме разве увеличения скорости доступа).

Кроме разгрузки реального web сервера, ускоритель может находиться снаружи брандмауэра или любого другого узкого места в сети и общаться с HTTP серверами внутри, уменьшая траффик через узкое место и упрощая конфигурацию. Два или более ускорителя соединенные через ICP могут увеличить скорость и устойчивость web сервера к любому одиночному сбою.

Редиректор Squid может заставить ускоритель работать как одну связную машину для нескольких серверов. Если Вам нужно перенести части Вашей файловой системы с одного сервера на другой, или если отдельно администрируемые HTTP сервера должны логически появляться под единой URL иерархией, ускоритель сделает это.

Если Вы хотите лишь кешировать "остальной мир" для увеличения эффективности доступа локальных пользователей в Интернет, то режим ускорителя следует отключить. Компании, которые держат свой web-сервер используют ускоритель для повышения эффективности доступа к нему. Те же, кому важен эффективный доступ локальных пользователей в Интернет используют кеширующий прокси. Многие, и мы в том числе пользуются и тем и этим.

Сравнение кеша Squid и его аналога Harvest показывает увеличение на порядок производительности первого по сравнению с CERN и другими широко распространнеными кеширующими программами. Это преимущество позволяет кешу работать как httpd ускорителю, кешу сконфигурированному как главный web-сервер (на 80 порту), перенаправляя неправильные ссылки на реальный httpd (на 81 порт).

В такой конфигурации администратор web узла переносит все не подлежащие кешированию URL на 81 порт httpd. Кеш обслуживает ссылки на кешируемые объекты, такие как HTML страницы и GIF-ы, а реальный httpd (на 81 порту) - все некешируемые, например запросы и cgi-bin программы. Если пользование сервером напрямую зависит от кешируемых объектов, то такая конфигурация может существенно снизить загрузку web-сервера.

При этом помните, что лучше всего не запускать squid как httpd-ускоритель и как кеширующий прокси одновременно, так как они имеют различные рабочие режимы. Более высокую производительность Вы получите запуская их на разных машинах. Все же Squid может одновременно работать и как httpd-ускоритель и как кеширующий прокси, если напротив httpd_accel_with_proxy Вы поставите on в своем squid.conf.

3.7 Как мне задать, чтобы Squid работал за брандмауэром?

Когда Вы находитесь за брандмауэром Вы не можете напрямую соединяться с внешним миром, так что необходимо использовать родительский кеш. Squid не использует ICP запросы если он за брандмауэром, или если только один родитель.

Нужно воспользоваться директивой inside_firewall в squid.conf чтобы задать список внутренних по отношению к брандмауэру доменов. Например:

inside_firewall example.com

Можно задать несколько:

inside_firewall example.com example.org example.net

Использование inside_firewall приводит к двум путям выбора сервера. Объекты не подпадающие ни под один из перечисленных доменов будут рассматриваться вне брандмауэра. Для этого же случая:

В особом случае можно указать в качестве домена none чтобы все запросы обслуживались братскими или родительскими кешами.

3.8 У меня несколько dnsserver процессов, которые не используются, могу я уменьшить их число в squid.conf?

Процессы dnsserver используются squid из-за того, что процесс преобразования имен хостов в IP-адреса (gethostbyname(3)) блокируется (то есть этот процесс должен дождаться ответа). Так как процесс squid один, то каждый, кто к обращается к кешу должен ждать каждый раз время необходимое на преобразование. Вот почему dnsserver это отдельный процесс, так что он может блокироваться без блокировки самого squid.

Поэтому очень важно чтобы было достаточно dnsserver процессов чтобы обработать каждое обращение, в противном случаеsquid может неожиданно повисать. На практике надо определить максимальное число dnsserver-ов, которые могут понадобиться squid, и добавить еще два на всякий случай. Другими словами, если Вы видели в работе только три dnsserver процесса, оставьте как минимум пять. И помните, чтоdnsserver маленький и при простое особо не загружает систему.

3.9 Мы бы хотели использовать Squid, но нам нужно использовать socks для подключения к внешнему миру. Поддерживает ли Squid Socks?

From: carson@lehman.com
Date: Sat, 25 Jan 1997 11:50:59 -0500
Subject: Re: SOCKS

Чтобы пользоваться socks5, не требуется никак изменений кода Squid. Все что надо, это добавить строку -Dbind=SOCKSbind etc в строку компиляции и -lsocks в строку линков.

3.10 Как Squid решает когда обновить объект кеша?

Kolics Bertold сделал прекрасную блок-схему изображающую этот процесс. 

4 Squid и браузеры

Большинств доступных web браузеров поддерживают прокси и легко конфигурируются для поддержки Squid в качестве прокси. Некоторые из них поддерживают расширенные возможности такие как список доменов или URL шаблоны которые не следует кешировать, или JavaScript для автоматической настройки.

4.1 Ручная настройка Netscape

Выберите Network Preferences из меню Options. На закладке Proxies, щелкните на Manual Proxy Configuration а затем на кнопке View. Для каждого протокола который поддерживает Ваш Squid (по умолчанию, HTTP, FTP, и gopher) введите имя или IP адрес Squid и номер порта (по умолчанию 3128) в колонке Port. Для тех протоколов, которые Ваш Squid не поддерживает оставьте поля пустыми.

Здесь вид экрана ручной настройки прокси Netscape Navigator.

4.2 Автоматическая настройка Netscape

Настройка прокси Netscape Navigator может быть атоматизирована при помощи JavaScript (для версий Navigator 2.0 или выше). Выберите Network Preferences из меню Options. На закладке Proxies, щелкните на Automatic Proxy Configuration и впишите URL Вашего файла JavaScript конфигурации прокси.

Здесь вид экрана автоматической настройки прокси Netscape Navigator. Вы также можете обратиться к документации Netscape по системе конфигурации прокси Navigator при помощи JavaScript по адресу http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html

Здесь пример автоконфигурации на JavaScript от Oskar Pearson:

//We (www.is.co.za) run a central cache for our customers that they
//access through a firewall - thus if they want to connect to their intranet
//system (or anything in their domain at all) they have to connect
//directly - hence all the "fiddling" to see if they are trying to connect
//to their local domain.

//Replace each occurrence of company.com with your domain name
//and if you have some kind of intranet system, make sure
//that you put it's name in place of "internal" below.

//We also assume that your cache is called "cache.company.com", and
//that it runs on port 8080. Change it down at the bottom.

//(C) Oskar Pearson and the Internet Solution (http://www.is.co.za)
    function FindProxyForURL(url, host)
        {
            //If they have only specified a hostname, go directly.
            if (isPlainHostName(host))
                    return "DIRECT";
            //These connect directly if the machine they are trying to
            //connect to starts with "intranet" - ie http://intranet
            //Connect  directly if it is intranet.*
            //If you have another machine that you want them to
            //access directly, replace "internal*" with that
            //machine's name
            if (shExpMatch( host, "intranet*")||
                            shExpMatch(host, "internal*"))
                return "DIRECT";
            //Connect directly to our domains (NB for Important News)
            if (dnsDomainIs( host,"company.com")||
            //If you have another domain that you wish to connect to
            //directly, put it in here
                            dnsDomainIs(host,"sistercompany.com"))
                return "DIRECT";
            //So the error message "no such host" will appear through the
            //normal Netscape box - less support queries :)
            if (!isResolvable(host))
                    return "DIRECT";
            //We only cache http, ftp and gopher
            if (url.substring(0, 5) == "http:" ||
                            url.substring(0, 4) == "ftp:"||
                            url.substring(0, 7) == "gopher:")
            //Change the ":8080" to the port that your cache
            //runs on, and "cache.company.com" to the machine that
            //you run the cache on
                    return "PROXY cache.company.com:8080; DIRECT";
            //We don't cache WAIS
            if (url.substring(0, 5) == "wais:")
                    return "DIRECT";
            else
                    return "DIRECT";
        }

4.3 Настройка Lynx и Mosaic

Для Mosaic и Lynx, надо задать переменные окружения перед запуском. Например (для csh или tcsh):

% setenv http_proxy http://mycache.example.com:3128/
% setenv gopher_proxy http://mycache.example.com:3128/
% setenv ftp_proxy http://mycache.example.com:3128/

Для Lynx настройки прокси можно сделать в файле lynx.cfg. При такой настройке все пользователи Lynx смогут пользоваться прокси без дополнительного задания окружения для каждого пользователя. Например:

        http_proxy:http://mycache.example.com:3128/
        ftp_proxy:http://mycache.example.com:3128/
        gopher_proxy:http://mycache.example.com:3128/

4.4 Настройка Microsoft Internet Explorer

Выберите Options из меню View. Щелкните на закладке Connection. Выберите Connect through Proxy Server и нажмите кнопку Proxy Settings. Для каждого протокола который поддерживает Ваш Squid (по умолчанию, HTTP, FTP, и gopher) введите имя или IP адрес Squid и номер порта (по умолчанию 3128) в колонке Port. Те протоколы, которые Ваш Squid не поддерживает оставьте зти поля пустыми.

Здесь вид экрана настройки прокси Internet Explorer.

Microsoft также собирается поддерживать как у Netscape автоматическую настройку прокси через JavaScript. Сейчас, только MSIE версии 3.0a для Windows 3.1 и Windows NT 3.51 поддерживает эту возможность (например, в версии 3.01 build 1225 для Windows 95 и NT 4.0, ее нет).

Если Ваша версия MSIE поддерживает такую возможность, выберите Options из меню View. Щелкните на закладке Advanced и в левом нижнем углу щелкните на кнопке Automatic Configuration. Впишите URL Вашего файла JavaScript. Потом перезапустите MSIE. MSIE будет пересчитывать файл JavaScript каждый раз при запуске.

4.5 Настройка Netmanage Internet Chameleon WebSurfer

Netmanage WebSurfer поддерживает ручную настройку прокси и список исключений хостов или доменов не подлежащих кешированию (информация по версии WebSurfer 5.0). Выберите Preferences из меню Settings. Щелкните на закладке Proxies. Выберите опцию Use Proxy для HTTP, FTP, и gopher. Затем для каждого протокола введите имя или IP адрес Squid и номер порта (по умолчанию, 3128) в поле Port. Остальные поля оставьте пустыми.

Вид экрана прилагается.

В этом же окне есть кнопка вызывающая окно исключений, где можно задать хосты или домены, котрые не надо кешировать. Здесь вид экрана.

4.6 Как сделать, чтобы пользователи браузеров пользовались кешем без их настройки?

Можно сделать прозрачное кеширование на Linux, Solaris, и BSD версиях. Смысл в том, что операционная система перенаправляет некоторые IP пакеты приложению. Этот документ на данный момент содержит инструкции по настройке прозрачного кеширования на Linux и Solaris.

4.6.1 Прозрачный прокси для Solaris, SunOS, и BSD систем

Ищите здесь http://cheops.anu.edu.au/~avalon/ip-filter.html

4.6.2 Прозрачный прокси для Linux

[Contributed by Rodney van den Oever <Rodney.van.den.Oever@tip.nl>]

Warning: this technique has several significant shortcomings!

В файле access.log не отображаются имена хостов в URL.
Вместо этого печатаются исходные IP адреса. Это из-за того, что адрес назначения определяется системным вызовом getsockname(2). Это значит, что родительский или братский кеш работают не корректно. Сами эти кеши пишут в URL'е имена, а не IP адреса. Эти URL'ы разные и не происходит попадания в кеш при повторном запросе. Это значит, что Вы теряете преимущество от иерархического прокси, если используете прозрачное кеширование.
Данный метод поддерживает только HTTP протокол, и не поддерживает gopher или FTP
Так как в браузере не установлена поддержка прокси, то он использует 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
Здесь http://www.xos.nl/linux/ipfwadm/ возьмите исходники ipfwadm и установите его. Ipfwadm понадобится для задания правил перенаправления. Я добавил эти правила в скрипт запускаемый из /etc/rc.d/rc.inet1 (Slackware) который устанавливает интерфейс в момент загрузки. Перенаправление должно быть завершено до задания любых входных правил. Чтобы убедиться, что это работает я отключил forwarding (masquerading).

/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 accouting 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 80

# 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 порт. Правила можно посмотреть и они будут выглядеть как-то так:
    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 => 80
    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            * -> *
Здесь важные установки в squid.conf:
    http_port               80
    icp_port                3130
    httpd_accel             virtual 80
    httpd_accel_with_proxy  on
Внимание, virtual это магическое слово здесь!

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

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

    ${FW} -I -a rej -P tcp -S localnet/8 -D dec/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 => 80
    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 прокси, браузер сам преобразовывает их. Удо