Squid для windows прозрачный
Прокси-сервер Squid — самый популярный и хорошо зарекомендовавший себя прокси-сервер. Реализации Squid существуют практически под все платформы UNIX/Linux и в том числе под Windows 2000/XP/2003/Vista/2008 (разумеется, бесплатные).
Поскольку пакет Squid для Windows не имеет собственного инсталлятора и его настройка сопряжена с редактирование текстовых файлов конфигурации, это вызывает определенные трудности.
Шаг 1. Загрузка и распаковка дистрибутива Squid.
Загружаем файл squid-2.7.STABLE4-bin.zip с нашего сервера или другую версию с другого сервера. И распаковываем содержимое архива в c:\squid:
Конфигурационные файлы Squid расположены в папке etc. Заходим туда и создаем собственные файлы конфигурации путем копирования оригинальных файлов конфигурации. Т.е. файл:
— squid.conf.default необходимо скопировать в файл squid.conf
— cachemgr.conf.default необходимо скопировать в файл cachemgr.conf
— mime.conf.default необходимо скопировать в файл mime.conf
Шаг 2. Настройка конфигурационного файла squid.conf
Если вы распаковали файлы в папку, отличную от c:\squid, вам необходимо найти и изменить следующие параметры:
— cache_dir (папка для хранения кэша)
— access_log (путь к лог-файлу, региструющий WEB-запросы клиентов)
— cache_log (путь к лог-файлу, в котором появляется общая информация о работе прокси-сервера)
— cache_store_log (путь к лог-файлу для storage manager’a, отображающий поведение объектов в кэше
Кроме того, возможно, вам потребуется изменить другие параметры, связанные с абсолютными путями. Эти параметры можно легко найти по фразе ‘c:/squid/’ в файле конфигурации.
Настройка ACL (access control list) — обширный вопрос, требующий отдельной статьи. Заметим, что по-умолчанию, оригинальный конфигурационный файл Squid разрешает обслуживание пользователей для приватных сетей (т.е. пользователи 192.168.0.0/16, 172.16.0.0/12 и 10.0.0.8/8 уже имеют возможность пользоваться прокси-сервером).
И наконец, если вы хотите включить режим «прозрачного» кэширования, вам необходимо добавить опцию «transparent» к параметру http_port. В итоге, строка с параметром http_port может выглядить следующим образом:
Шаг 3. Подготовка и запуск службы Squid
Перед первым запуском Squid необходимо создать папки для хранения кэша. Для этого в командной строке необходимо выполнить команду:
Спустя несколько секунд (а может быть и больше — в зависимости от заданного объема кэша) Squid завершит создание собственного кэша. Далее необходимо установить службу Squid из командной строки:
А затем запустить службу Squid:
net start squid
Теперь служба Squid будет работать как сервис Windows (т.е. автоматически запускаться при старте Windows до входа пользователя в систему).
Прокси-сервер Squid готов к обслуживанию запросов на порту 3128 вашего компьютера.
Прозрачный Squid
Зачем нужен прозрачный Squid
Для начала представим, что у нас есть обычная сеть, выходящая в интернет через один шлюз (прокси-сервер Squid установлен здесь же). Предположим, IP-адрес шлюза 192.168.1.1 . Все остальные компьютеры в сети получают настройки IP по DHCP. Компьютеры в сети разные, Windows XP/7, Ubuntu, да моло ли еще какие. За всеми не углядишь. Но мы должны считать трафик, ускоряя при этом доступ в интерент, должны контролировать (хотя бы от «дурака») доступ в интернет и пр. Squid обладает широкими возможностями по логированию, ограничению доступа и пр. Поэтому нам нужно, чтобы все компьютеры в сети не могли миновать нашего прокси-сервера Squid. Поэтому нам надо в любом случае направить (завернуть, пробросить) запрос клиентских компьютеров только через прокси-сервер Squid.
Настройка переадресации портов
При обращении клиентов локальной сети к внешним сайтам Squid должен прозрачно для клиента перехватить запрос и обработать его согласно своим правилам — решить, какой контент отдать, логировать ли активность пользователя, можно ли вообще этому пользователю выходить в интернет. Наша задача — сделать так, чтобы на самом клиенте не надо было бы делать никаких настроек броузеров. Клиент просто подключился к локальной сети и уже работает через наш прокси-сервер и НИКАК иначе. Т.е. даже если кто-либо захочет обойти наш прокси, без хитростей ему уже не обойтись.
Переадресация портов в FreeBSD
Если на нашем шлюзе установлена FreeBSD и брандмауэр по-умолчанию — IPFW, то для выполнения этой задачи мы должны на шлюзе установить переадресацию (проброс) портов:
# Redirect to local proxy
/sbin/ipfw add 0170 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to any 80
- 0170 — номер правила (в вашем случае может быть любой).
- fwd 127.0.0.1,3128 — куда будем направлять пакеты, — в нашем случае нашему любимому Squid, запущенному на порту 3128 на шлюзе, — .
- from 192.168.1.0/24 — . отправленные компьютерами локальной сети.
- to any 80 — . на какой-либо сайт в интернете
Теперь внимание! Это правило нужно добавить ДО того, как правила NAT (Network Address Translation) получат этот запрос. Объясню немного неакадемично: что делает NAT? В нашем случае NAT изменяет адрес источника (заменяет локальный IP клиента на внешний IP шлюза и запоминает, от какого внутреннего клиента был запрос. Для того, чтобы Squid обработал запрос от клиента, ему не нужно ничего преобразовывать — он и сам с этим справится. Поэтому Squid должен получить пакет в первозданном виде и сам решить, что делать дальше.
К тому же NAT и Squid — все-таки разные вещи, и пакет, адресованный, скажем к 2.3.4.5:80 , не содержит информации, как попасть в Squid (на порт 3128 шлюза). И пакет будет обрабатываться только средствами NAT. Squid пакет так и не увидит. Поэтому наша задача — просто отдать Squid-у тот пакет, который отправил броузер пользователя. Объясню на примере части конфига ipfw:
В конфиге выше запрос открыть сайт сначала обрабатывается правилом 0170 , которое заворачивает запрос в Squid. Squid (как и любая другая программа) также выполняет требования брандмауэра — только для него правило 0170 не действует, а вот правило 0350 разрешает Squid отправить запрос в интернет. Для того, чтобы выходить в интернет без Squid, необходимо закоментировать правило 0170 . В этом случае Squid не получит ничего, а все запросы броузеров из локальной сети будут обрабатываться правилом 0350 .
Переадресация портов в Linux
Если на нашем шлюзе установлена Linux и iptables, то вышеуказанная команда будет выглядеть так:
iptables -t nat -A PREROUTING -i eth0 -p tcp —dport 80 -j REDIRECT —to-port 3128
где eth0 — внутренний интерфейс.
В остальном смысл переадресаций и пр. аналогичен тому, как это объяснялось для ipfw . Разнятся только правила постороения конфигурационных файлов ipfw и iptables . Пример правил iptables можно изучить здесь.
С этим разобрались. Теперь надо дать указание Squid о том, что он должен обрабатывать пакеты, изначально на него не направленные. Переходим к включению режима прозрачности Squid.
Прозрачный Squid в squid.conf
Теперь дело осталось за малым — настроить Squid в режим невидимки, т.е. принимать автоматически перенаправленные пакеты и обрабатывать их. В разных версиях Squid за это отвечали разные команды. Настройка Squid версии 2.6.* выглядит так:
http_port 127.0.0.1:3128 transparent # Squid работает в прозрачном режиме
Внимательно просмотрите конфигурационный файл squid.conf на предмет дубликатов директив — я потратил два часа времени, обратился на форум за помощью с «нестандартной проблемой», в то время как просто не обратил внимание на то, что первой строкой у меня включался обычный режим работы Squid:
http_port 3128 # Squid работает в обычном режиме
Практически все. Перезапустите Squid, примените правила брандмауэра с добавленной командой перенаправления портов — теперь любой компьютер локальной сети, выходя через наш шлюз в интернет, не сможет миновать нашего ставшего прозрачным для всех Squid. А теперь попробуйте настроить прокси на каком-нибудь компьютере — компьютер не должен получить выход в интернет. Вроде все. Если есть вопросы или советы — комментарии приветствуются, особенно учитывая, что настройка прозрачного Squid и проброс портов вообще «больная» тема на форумах.
Плюсы и минусы
Из плюсов можно отметить абсолютную уверенность, что все запросы на 80 порт (стандартный для веб) будут обработаны Squid-ом. Соответственно, будут логи, статистика для шефа и отсутствие необходимости бегать и руками все настраивать.
Из минусов можно отметить:
- невозможность (по-крайней мере, простым способом) авторизовать пользователей для доступа в интернет;
- если вдруг «упадет» Squid, то доступ к сайтам прекратится. Поэтому админу нужно или быть уверенным, что все будет ОК, или иметь возможность удаленно изменить конфиг брандмауэра, или написать скрипт, автоматом проверяющего, висит ли Squid на порту 3128, и если нет, то запускающего его.
Настройка Squid в прозрачном режиме завершена. Вот теперь — все.
Прокси Squid под Windows
Решил написать мини-обзор по установке и настройке прокси-сервера Squid под Windows. Сразу хочу сказать, что статья рассчитана на начинающих, которые хотят познакомиться со Squid как таковым, поэтому прошу все коменты типа «фи, как это можно юзать под виндой» оставить при себе.
Для ценителей истинного Squid прошу пожаловать в наш специальный обзор на эту тему — Прокси Squid на Linux с авторизацией в Active Directory. А пока разберем более простой вариант. Конечно, версия под Windows не так хороша как под родные unix-like системы, но для первого знакомства подойдет.
Прокси бывает очень полезен, когда нужно несколько разграничить доступ в интернет либо просто выпусить в интернет несколько компов, а скорость подключения оставляет желать лучшего. Прокси обычно устанавливают на отдельный комп, чаще всего на тот, который собственно и «раздает» интернет в локальную сеть, браузеры других компов настраивают на работу с этим прокси-сервером. Далее уже на прокси пишутся правила: кому и когда на какие сайты ходить можно, куда ходить нельзя, что можно скачивать, что нельзя и т.д. Вариантов бесконечное множество.
Итак, Squid — это кэширующий прокси с внушительным набором функций. Распространяется по лицензии GNU GPL (читай бесплатно). Немного о Squid можно почитать в Wiki. Готовые к скачиванию дистрибутивы под винду можно найти на официальном ресурсе здесь. Крайняя стабильная версия Squid — 2.7, разрабатываемая версия — 3.0, при этом под unix-like платформы 3.0 уже идет как резиная версия, а под Windows как Beta из-за некоторых проблем с адаптацией под винду. По этой причине для знакомства мы рекомендуем воспользоваться именно версией 2.7.
Надеюсь, что пока никаких вопросов нет, поэтому давайте скачаем дистрибутив и займемся установкой. После загрузки распаковываем архив в котором будет папка squid. Помещаем эту папку прямо на диск С. Должно получиться так, чтобы в папке C:squid находились все подпапки типа etc, bin, sbin и пр. Кто-то спросит нафига там столько подпапок? Отвечаем: в отличие от Windows, в которой программа чаще всего распологается в одном каталоге, в unix-like системах каждый каталог предусмотрен под какие-то определенные нужды. Один каталог — под файлы настроек для всех установленных программ, второй каталог — под исполняемые файлы всех программ, третий каталог — плагины, четвертый — логи и т.д. Т.е. разные файлы одной программы хранятся сразу в нескольких папках. Пока нам надо усвоить то, что исполняемый файл Squid находится в каталоге sbin, файл настроек в каталоге etc, а все логи будут записываться в каталог varlog.
Самое главное что нам нужно сделать — это написать конфигурационный файл. В папке etc есть файл squid.conf.default копируем рядом и переименовываем копию в squid.conf. Должно получиться вот так:
После этого аналогичным образом копируем:
mime.conf.default в mime.conf и cachemgr.conf.default в cachemgr.conf.Открываем squid.conf в любом текстовом редакторе, например, в блокноте и стираем всё, чтобы у нас получился пустой файл, сохраняемся. mime.conf и cachermgr.conf трогать не нужно.
Прокси работает следующим образом: в настройках каждого браузера на компах локальной сети устанавливается опция с IP-адресом и портом прокси, например вот так (адрес моего прокси-сервера 192.168.1.2 и порт 3128):
Т.о. весь web-трафик от браузеров идет на указанный адрес, Squid в свою очередь передает эти запросы от своего имени в интернет. Входящий трафик из интернета попадает сначала на прокси и потом переадресовывается в локальную сеть клиентскому браузеру. Эта схема распространена повсеместно, но у нее есть один очевидный недостаток — все браузеры нужно руками настраивать на работу с прокси-сервером, иначе доступа в интернет не будет вообще. У прокси есть второй режим работы, называемый transparent, т.е. прозрачный. В прозрачном режиме в браузерах вообще ничего настраивать не нужно, как будто и нас нет никакого прокси. В этом случае все запросы идут на шлюз по умолчанию, коим должен являться маршрутизатор, раздающий интернет в локальной сети. На маршрутизаторе нужно добавить правило перенаправления, чтобы все web-запросы шли на комп с прокси. Этот вариант более интересный, однако здесь требуется дополнительная настройка маршрутизатора. К тому же Squid по Windows не поддерживает функцию прозрачного проксирования, поэтому мы пока не будем рассматривать этот вариант.
Вернемся к нашему пустому файлу конфигурации. Первым делом нам надо указать на каком IP-адресе и порту будет работать прокси. IP-адрес берется адрес компа в локальной сети (пусть у нас он будет 192.168.1.2), а порт в принципе можно выбрать любой, но обычно придерживаются стандартных значений, коими являются 3128 или 8080. Пишем в файл строку:
http_port 192.168.1.2:3128
Еще Squid любит, чтобы ПК, на котором он установлен как-то назывался. Для этого в конфиурационный файл нужно добавить строку visible_hostname [имя]. Мы напишем так:
visible_hostname myproxy
Решение о том, какой трафик и куда пропускать или запрещать принимается на основании правил, которые в свою очередь строятся из списков доступа.
Сейчас мы определим несколько списоков доступа и сделаем одно правило. В данном случае значение слова «список» нужно понимать несколько иначе: одна строка, которая начинается со слова acl это и есть один список. Две строки — два списка, много строк acl — списки. Общий синтаксис для списков выглядит вот так:
acl [имя_списка] [тип параметра] [параметр 1] [параметр 2] … [параметр n].
Первым идет служебное слово acl, затем имя списка. Имя может быть произвольным за одним исключением, о нем чуть позже. Тип параметра — чаще всего используются значения src (источник) или dst (получатель). Параметры — это кокретные значения, которые относятся к src или dst.
В конфигурационном файле обязательно должен присутствовать как минимум один список доступа, который описывает всех клиентов прокси. Все клиенты обозначаются стандартным словом all. В итоге наша первая команда дорожна выглядеть вот так:
acl all src 0.0.0.0/0.0.0.0
В данном случае 0.0.0.0/0.0.0.0 обозначает любые адреса и маски. Затем определим нашу локальную сеть, список назовем LAN:
acl LAN src 192.168.1.0/255.255.255.0
Следующий список доступа будет описывать у нас тип проходящего трафика. Для начала мы возьмем обычный HTTP-трафик, который передается по 80-му и 443 портам. В следующей строке пишем:
acl HTTP port 80 443
И теперь напишем правило, которое будет разрешать хождения HTTP-трафика со всех компов нашей локальной сети. Правила обозначаются командой
http_access [allow (разрешить) или deny (запретить)] [перечисление имен списков доступа через пробел].
Мы напишем вот такое правило:
http_access allow LAN HTTP
Надо сказать еще одну важную вещь. Когда мы пишем перечисление нескольких параметров через пробел, то нужно знать, что в списках доступа каждый пробел понимается как «ИЛИ», а в правилах доступа как «И». Например, наше написанное правило звучит так: доступ (http_access) разрешить (allow) если пакет с данными можно отнести к списку доступа LAN И в тоже самое время пакет можно отнести к списку доступа HTTP. А вот список доступа HTTP будет звучать так: пакет данных идет на порт 80 ИЛИ на порт 443. Это нужно понимать, чтобы правильно составлять списки доступа и правила. Когда пишем списки доступа, то можно их писать в любом порядке, а вот очередность написания правил играет ключевую роль. Пакет с данными обрабатывает до первого правила, под котрое он подходит по своим параметрам.
Далее я покажу простой пример ограничения доступа в интернет. Например, на компом с адресом 192.168.1.10 у нас сидит работник, которому нужно ограничить доступ. Нет ничего проще. Сначала пишем список доступа:
acl Vasya src 192.168.1.10
После этого нужно создать правило блокировки и поместить его до того правила, которое разршает доступ и интернет всем компам локальной сети. В итоге оба правила должны выглядеть так:
http_access deny Vasya
http_access allow LAN HTTP
Мы прописали самые необходимые вещи, теперь конфигурационный файл можно сохранить. Целиком он должен выглядеть вот так:
http_port 192.168.1.1:3128
visible_hostname myproxy
acl all src 0.0.0.0/0.0.0.0
acl LAN src 192.168.1.0/255.255.255.0
acl HTTP port 80 443
acl Vasya src 192.168.1.10
http_access deny Vasya
http_access allow LAN HTTP
Далее нам нужно сформировать каталоги для хранения кэша. Делается это просто: в командной строке надо набрать
С:squidsbinsquid.exe -z
После этого установим Squid в качестве службы Windows, набрав
С:squidsbinsquid.exe -i
Теперь идем в Панель управления/Администрирование/Службы, ищем там Squid и запускаем его. Остается настроить какой-нибудь браузер на наш прокси-сервер и проверить работоспособность.
По мере сил и возможностей мы периодически дополняем и редактируем этот обзор.
Если вам хочется иметь функциональность Squid, но нет сил/времени/навыков настраивать всё это — обязательно посмотрите другие альтернативы — BlockAdultProxy или 3proxy