Сайт о телевидении

Сайт о телевидении

» » Squid для самых маленьких часть 1. Оптимизация сетевых ресурсов посредством кэширования. Оптимизация ресурсов посредством ограничения скорости

Squid для самых маленьких часть 1. Оптимизация сетевых ресурсов посредством кэширования. Оптимизация ресурсов посредством ограничения скорости

Многие администраторы сталкиваются с проблемой разумного использования времени и канала для выхода в сеть Интернет, задумываются о возможности экономии времени и денег, об ограничении скорости для отдельных видов файлов или личностей, в конце концов об экономии всего, что связано с теми или иными аспектами выхода в глобальную сеть.

Я, с помощью этой статьи, попытаюсь наглядно и доходчиво объяснить о настройках самого распространенного прокси сервера - прокси сервера Squid.

Начальные настройки SQUID для доступа пользователей

Мы не будем вдаваться в процесс установки прокси сервера Squid, а перейдем сразу к его настройке.

Самое элементарное, что нам после установки следует сделать, так это разрешить доступ пользователям нашей локальной сети. Для этого служат параметры http_port, http_access. Кроме этого, мы заведем acl (список контроля доступа) для нашей локальной сети.

Итак, http_port нам нужен постольку, поскольку наш прокси сервер Squid должен обслуживать только компьютеры нашей локальной сети и быть невидимым для внешнего мира, дабы исключить возможность "плохим людям" внешней сети воспользоваться нашим каналом или трафиком, а в случае, если будут обнаружены "дыры" в коде прокси сервера Squid, воспользоваться ими.

Параметр http_access используется для разрешения или запрещения доступа к определенным ресурсам, определенным адресам либо с определенных адресов, к определенным сайтам, по определенным протоколам, портам и всему тому, что непосредственно указано с помощью Acl (списков контроля доступа).

Таблица N 1. Некоторые подсети.

Диапазон адресов |Полная форма |Краткая форма 192.168.0.1-192.168.0.254 192.168.0.0/255.255.255.0 192.168.0.0/24 192.168.20.1-192.168.20.254 192.168.20.0/255.255.255.0 192.168.20.0/24 192.168.0.1-192.168.254.254 192.168.20.0/255.255.0.0 192.168.20.0/16 10.0.0.1-10.254.254.254 10.0.0.0/255.0.0.0 10.0.0.0/8

Предположим, что у Вас сеть с адресами от 192.168.0.1 до 192.168.0.254, тогда добавим новый Acl (см. таблицу N1):

Acl LocalNet src 192.168.0.0/24

Предположим, что у Вас прокси сервер Squid расположен по адресу 192.168.0.200 на порту 3128, тогда пишем в файле конфигурации:

Http_port 192.168.0.200:3128

Следующим нашим действием будет запрет использования нашего прокси сервера, кроме как пользователями нашей локальной сети:

Http_access allow LocalNet http_access deny all

В данном случае слово allow является разрешением, а слово deny запрещением, то есть мы разрешаем доступ к прокси серверу Squid с адресов нашей локальной сети и запрещаем доступ всем остальным.

Будьте внимательны, указывая http_access, так как Squid использует их в порядке указания Вами.

Изучаем ACL (списки контроля доступа)

Система управления доступом в прокси сервере Squid является очень гибкой и обширной. Она состоит из элементов со значениями и списков доступа c указанием allow (разрешение) или deny (запрещение).

Формат Acl следующий:

Acl имя элемент список

Формат списка доступа:

Http_access указание имя_acl

Мы рассмотрим некоторые элементы, которые позволяет использовать прокси сервер Squid, конечно же с примерами:

* acl имя src список

С помощью этого элемента (src) мы указываем IP-адрес источника, то есть клиента от которого пришел запрос к нашему прокси серверу.

В следующем примере мы разрешим Васе Пупкину (Pupkin) и отделу программирования (Progs) доступ к нашему прокси серверу, а всем остальным запретим:

Acl Progs src 192.168.0.1-192.168.0.9 acl Pupkin src 192.168.0.10 http_access allow Progs http_access allow Pupkin http_access deny all

* acl имя dst список

Данный элемент (dst) указывает IP-адрес назначения, то есть IP-адрес того сервера, доступ к которому желает получить клиент прокси сервера.

В следующем примере мы запретим Васе доступ к подсети 194.67.0.0/16 (к примеру, в ней находится тот же aport.ru):

Acl Net194 dst 194.67.0.0/16 http_access deny Pupkin Net194

* acl имя dstdomain список

С помощью этого элемента (dstdomain) мы указываем домен, доступ к которому желает получить клиент прокси сервера.

В следующем примере мы запретим Васе доступ к варезным сайтам nnm.ru и kpnemo.ru:

Acl SitesWarez dstdomain .nnm.ru .kpnemo.ru http_access deny Pupkin SitesWarez

В случае, если будет необходимо указать домен источника, то используйте srcdomain.

* acl имя [-i] srcdom_regex список * acl имя [-i] dstdom_regex список

Данные элементы отличаются от srcdomain и dstdomain лишь тем, что в них используются регулярные выражения, которые в данной статье мы не рассматриваем, но пример всё-таки приведём:

Acl SitesRegexSex dstdom_regex sex Acl SitesRegexComNet dstdom_regex \.com$ \.net$ http_access deny Pupkin SitesRegexSex http_access deny Pupkin SitesRegexComNet

В данном примере мы запретили доступ Пупкину Василию на все домены, содержащие слово sex и на все домены в зонах.com и.net.

Ключ -i призван игнорировать регистр символов в регулярных выражениях.

* acl имя [-i] url_regex список

С помощью этого элемента (url_regex) мы указываем шаблон регулярного выражения для URL.

Пример указания файлов с расширением avi, начинающихся на слово sex:

Acl NoAviFromSex url_regex -i sex.*\.avi$

В случае, если Вы желаете указать шаблон только для пути URL, то есть исключая протокол и имя хоста (домена), то используйте urlpath_regex.

Пример для указания музыкальных файлов:

Acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$

* acl имя_acl port список

Указание номера порта назначения, то есть порта, к которому желает подключится клиент нашего прокси сервера.

Как пример, запретим всем использование программы Mirc через наш прокси сервер:

Acl Mirc port 6667-6669 7770-7776 http_access deny all Mirc

* acl имя_acl proto список

Указание протокола передачи

Как пример, запретим вышеупомянутому Васе использование протокола FTP через наш прокси сервер:

Acl ftpproto proto ftp http_access deny Pupkin ftpproto

* acl имя_acl method список

Указание метода http запроса клиентом (GET, POST)

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

Acl SiteMailRu dstdomain .mail.ru acl methodpost method POST http_access deny Pupkin methodpost SiteMailRu

Ограничения пользователей

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

Средства прокси-сервера Squid позволяют этого добится несколькими путями:

  • первый путь это оптимизация кеширования объектов;
  • второй - это ограничение по времени определенных пользователей, что не совсем корректно;
  • третий путь заключается в ограничении скорости для определенных типов файлов, пользователей и всего того, что определено нами через Acl.

Ограничения по времени

Ограничить пользователей по времени можно следующим образом:

Acl имя time дни чч:мм-ЧЧ:ММ

Где день: M - Понедельник, T - Вторник, W - Среда, H - Четверг, F - Пятница, A - Суббота, S - Воскресенье.

При этом чч:мм должно быть меньше чем ЧЧ:ММ, то есть можно указать с 00:00-23:59, но нельзя указать 20:00-09:00.

Давайте запретим всё тому же Васе иметь доступ в сеть Интернет с 10 до 15 часов каждый день:

Acl TimePupkin time 10:00-15:00 http_access deny Pupkin TimePupkin

Если хочется разрешить Васе пользоваться программой Mirc с 13 до 14 часов, то пишем:

Acl TimePupkin time 13:00-14:00 http_access allow Pupkin TimePupkin Mirc http_access deny Pupkin Mirc

А что делать, если необходимо запретить или разрешить в определенные дни недели? Squid также позволяет это сделать, к примеру с 13 до 14 в понедельник и в воскресенье:

Acl TimePupkin time MS 13:00-14:00

Как видите, ничего сложного в этом нет.

Ограничения по скорости

Регулировка скорости в прокси сервере Squid осуществляется с помощью пулов. Пул - это своего рода бочонок с пивом, в который пиво постоянно заливают до краёв, а клиенты наливают в свои стаканы или иные ёмкости для дальнейшего внутреннего потребления по мере надобности через свои персональные краны.

Пулы регулируются с помощью трех параметров: delay_class, delay_parameters, delay_access. Количество пулов указывается с помощью параметра delay_pools.

Пулы могут быть трёх классов:

  1. Весь поток пива ограничен одним краном (на всю сеть).
  2. Весь поток пива ограничен одним краном, но при этом кран делится на подкранчики (на каждый IP).
  3. Весь поток пива ограничен одним краном, но кран делится на подкранчики (на подсети), которые также делятся на мини кранчики (на каждый IP).

Delay_pools количество_объявленных_пулов delay_access номер_пула действие имя_acl

Действие может быть allow (разрешить) и deny (запретить). При этом, данный пул действует на тех, кому он разрешен и не действует на тех, кому он запрещен. В случае, если указано allow all, а затем deny Pupkin, то на Пупкина данный класс всё-равно подействует, т.к. IP-адрес Пупкина объявленный в acl Pupkin, входит в список адресов acl all. Имейте это ввиду.

Delay_class номер_пула класс_пула delay_parameters номер_пула параметры

параметры отличаются в зависимости от класса пула:

для первого класса:

Delay_parameters 1 байт_на_всю_сеть

для второго класса:

Delay_parameters 1 на_всю_сеть на_клиента

для третьего класса:

Delay_parameters 1 на_всю_сеть на_подсеть на_клиента

Для примера, у нас канал на 128 Кбит (в среднем 15 Кбайт в секунду) и мы желаем Васе (Pupkin) дать всего 4 Кбайта/сек (на все про всё один маленький бокальчик), отделу программирования (Prog) дать всего 10 Кбайт/сек и на каждого всего по 5 Кб/сек (всего два бокальчика), всех остальных ограничить в 2 Кбайта/сек на каждого и 10 Кб/сек на всех, а файлы mp3 (media) ограничить в 3 Кбайта в секунду на всех (на всю бочку пива такой маленький кран). Тогда пишем:

Acl Prog src 192.168.0.1-192.168.0.9 acl Pupkin src 192.168.0.10 acl LocalNet src 192.168.0.0/255.255.255.0 acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ delay_pools 4 # сначала ограничим mp3 delay_class 1 1 delay_parameters 1 3000/3000 delay_access 1 allow media delay_access 1 deny all # ограничим бедного Васю delay_class 2 1 delay_parameters 2 4000/4000 delay_access 2 allow Pupkin delay_access 2 deny all # ограничим отдел программирования delay_class 3 2 delay_parameters 3 10000/10000 5000/5000 delay_access 3 allow Prog delay_access 3 deny all # а теперь ограничим остальных (второй класс пула) delay_class 4 2 delay_parameters 4 10000/10000 2000/2000 delay_access 4 deny media delay_access 4 deny Pupkin delay_access 4 deny Prog delay_access 4 allow LocalNet delay_access 4 deny all

Часто возникает вопрос, а как лучше всего использовать столь малый канал, чтобы он автоматически делился между всеми теми, кто в данный момент что-либо загружает? На этот вопрос имеется однозначный ответ - средствами прокси сервера Squid этого сделать не возможно, но всё-таки кое-что предпринять можно:

Delay_class 1 2 delay_parameters 1 -1/-1 5000/15000 delay_access 1 allow LocalNet delay_access 1 deny all

Таким образом мы выделяем на всю нашу сеть и на подсети максимальный канал (-1 означает неограниченность), а каждому пользователю даем скорость максимум в 5 Кб/сек после того, как он скачает на максимальной скорости первые 15 Кбайт документа.

Таким образом клиент не съест весь канал, но достаточно быстро получит первые 15 Кбайт.

Оптимизируем кеширование объектов в SQUID

Существует множество типов файлов, которые обновляются не достаточно часто, чтобы позволить прокси серверу реагировать на заголовки от вебсерверов о том, что данный объект не подлежит кешированию либо он был на удивление только что изменён. Это довольно частая ситуация.

Для разрешения таких ситуаций призван параметр refresh_pattern в файле настроек прокси-сервера Squid, но полностью с формулами и т.п. мы его рассматривать не будем.

Refresh_pattern [-i] строка МИНВ процент МАКСВ параметры

Данный параметр используется для того, чтобы определить возраст объекта (считайте файла) в кеше, следует ли его обновлять или нет.

МИНВ (минимальное время) - время в минутах, когда объект, имеющийся в кеше считается свежим.

МАКСВ (максимальное время) - максимальное время в минутах, когда объект считается свежим.

Параметры - это один или несколько следующих параметров:

  • override-expire - игнорировать информацию об истечении свежести объекта и использовать МИНВ.
  • override-lastmod - игнорировать информацию о дате изменения файла и использовать МИНВ.
  • reload-into-ims - вместо запроса клиентского запроса "не кешировать документы" (no-cache) посылать запрос "Если изменен с" (If-Modified-Since)
  • ignore-reload - игнорировать запросы клиентов "не кэшировать документы" (no-cache) или "перезагрузить документ" (reload).

Итак, мы подошли к самом главному. Ну, так какие же типы файлов реже всех обновляются? Как правило, это разнообразные музыкальные файлы и картинки.

Установим свежесть объектов, для этого для картинок и музыкальных файлов укажем, скажем так для примера, целых 30 дней (43200 минут):

Refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.png$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.jpg$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.jpeg$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.pdf$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.zip$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.tar$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.gz$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.tgz$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.exe$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.prz$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.ppt$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.inf$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.swf$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.mid$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.wav$ 43200 100% 43200 override-lastmod override-expire refresh_pattern -i \.mp3$ 43200 100% 43200 override-lastmod override-expire

Показанные Выше настройки лишь пример, для того, чтобы была понятна суть. Теперь можете проверить эффективность своего прокси сервера, она уж точно возрастет.

Заключение

Прокси сервер Squid не является одним лишь распространенным прокси сервером, существуют и другие. Но как показывает статистика, большинство используют именно этот прокси сервер, но при этом всё равно у многих начинающих возникают проблемы с настройкой.

С помощью этой статьи я попытался хоть немного раскрыть для обширных масс некоторые функции прокси сервера Squid.

Linux: Полное руководство Колисниченко Денис Николаевич

18.3. Настройка SQUID

18.3. Настройка SQUID

Сервер SQUID использует файл конфигурации squid.conf , который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID. Отредактируйте в этом файле следующие строки.

Укажите прокси-провайдера (тот сервер, который станет вашим «соседом» (neighbour, peer)):

cache_peer proxy.isp.ru

Установите объем памяти, разрешенный для кэша squid , в байтах, и каталог для дискового кэша:

cache_dir ufs /usr/local/squid/cache 1024 16 256

где 1024 - количество мегабайтов, отводимое под кэш в указанном каталоге. В этом каталоге будут храниться кэшированные файлы. Стоит ли говорить, что если у вас несколько жестких дисков, то кэш нужно разместить на самом быстром из них.

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

acl allowed_hosts src 192.168.1.0/255.255.255.0

acl localhost src 127.0.0.1/255.255.255.255

Укажите разрешенные SSL-порты:

acl SSL_ports port 443 563

Запретите метод CONNECT для всех портов, кроме указанных в acl SSL_ports:

http_access deny CONNECT !SSL_ports

Запретите доступ всем, кроме тех, кому можно:

http_access allow localhost

http_access allow allowed_hosts

http_access allow SSL_ports http_access deny all

Пропишите пользователей, которым разрешено пользоваться SQUID (в рассматриваемом примере это den, admin и developer):

acl allowed_users user den admin developer

http_access allow allowed_users

http_access deny all

Тэги maximum_object_size и maximum_object устанавливают ограничения на размер передаваемых объектов.

Ниже приведен пример запрета доступа к любому URL, который соответствует шаблону games, и разрешения доступа ко всем остальным:

acl GaMS url_regex games

http_access deny GaMS

http_access allow all

Из книги Linux-сервер своими руками автора

15 Прокси-сервер SQUID 15.1. Что такое SQUID? SQUID - это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading - маскарадинг),

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

15.1. Что такое SQUID? SQUID - это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading - маскарадинг), увеличивает скорость

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

15.2. Установка SQUID SQUID может быть установлен из исходных текстов или в виде RPM-пакета. Установка RPM-пакета SQUID очень проста - для этого нужно ввести команду rpm –ih squid-2.3.STABLE2-3mdk.i586.rpmЯ использую версию squid 2.3. Более новая версия доступна в виде исходных кодов. Исходники можно

Из книги автора

15.4. Запуск SQUID Теперь, когда вы выполнили базовую настройку SQUID, его нужно запустить: /usr/local/squid/bin/squid –zПараметр –z необходим для создания (обнуления) каталога, содержащего кэш. Обычно этот параметр нужен только при первом запуске. Некоторые другие полезные параметры SQUID

Из книги автора

15.5. Формат файла squid.conf В файле squid.conf задаются всевозможные параметры конфигурации прокси-сервера. Давайте рассмотрим их все по

Из книги автора

17.1.5. Настройка Squid Установите пакет squid. Осталось настроить и запустить его. Для этого нужно отредактировать файл конфигурации /etc/squid/squid.conf. Сначала укажите адрес прокси провайдера: cach_peer proxy.your_isp.comЗадайте объем ОЗУ, который будет использовать прокси-сервером: cache_memВ том

Из книги автора

Глава 18. Прокси-серверы SQUID и SOCKS 18.1. Что такое прокси-сервер? Прокси-сервер (сервер-посредник) - это программа, которая выполняет HTTP/FTP-запросы от имени клиентов. Применение прокси-сервера дает возможность использовать фиктивные IP-адреса во внутренней сети (IP-маскарадинг),

Из книги автора

18.2. Установка SQUID Я использую версию squid 2.5. Пакет squid входит в состав современных дистрибутивов, а если его у вас почему-то нет, то скачать можно с www.squid-cache.org.При сборке SQUID из исходных кодов первым шагом должна быть команда# ./configure --prefix=/usr/local/squidSQUID будет установлен в каталог,

Из книги автора

18.3. Настройка SQUID Сервер SQUID использует файл конфигурации squid.conf, который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID.

Из книги автора

18.4. Запуск SQUID Первый раз squid нужно запускать с ключом -z, чтобы создать и очистить каталог кэша:# /usr/local/squid/bin/squid -zЕще несколько полезных ключей, с которыми можно запускать squid, перечислены в таблице 18.2.Ключи запуска squid Таблица 18.2 Ключ Назначение -а порт Задает

Из книги автора

18.5. Расширенные настройки SQUID. Конфигурационный файл squid.conf 18.5.1. Параметры сети В файле squid.conf могут быть заданы следующие параметры сети:? http_port - порт для запросов клиентов. С этого порта прокси-сервер будет ожидать и обрабатывать запросы клиентов. Значение по умолчанию

Из книги автора

18.8. Разделение канала с помощью SQUID Допустим, вам нужно настроить прокси-сервер таким образом, чтобы одна группа компьютеров работала в Интернете с одной скоростью, а другая - с другой. Это может потребоваться, например, для разграничения пользователей, которые

Из книги автора

9.3. squid Как я уже сказал, самым распространенным прокси-сервером является squid. Этот сервер имеет достаточно длинную историю, и за время его существования в нем реализовано много возможностей. Еще не было ничего такого, что я не смог бы получить с помощью squid.Основной

Из книги автора

9.4. Права доступа к squid Это самая больная тема для любого администратора. Да, и в squid тоже есть права доступа, и они также описываются в конфигурационном файле /etc/squid/squid.conf. Но мы рассматриваем права отдельно, потому что основной упор делаем на безопасность. Именно поэтому

Из книги автора

9.5. Замечания по работе squid Сейчас нам предстоит немного поговорить о некоторых вопросах безопасности сервиса squid и дополнительных возможностях, которые могут ускорить работу в

Из книги автора

12.5.4. Журнал прокси-сервера squid Основным журналом прокси-сервера squid является /var/log/squid/access.log. Это текстовый файл, в котором каждая строка состоит из следующих полей:? время начала соединения или события;? продолжительность сессии;? IP-адрес клиента;? результат обработки

Squid - это полнофункциональное приложение кэширующего прокси сервера, которое предоставляет сервисы кэширования и прокси для HTTP , FTP и других популярных сетевых протоколов. Squid может осуществлять кэширование и проксирование SSL запросов и кэширование результатов DNS поиска, а также выполнять прозрачное кэширование. Squid также поддерживает широкий набор кэширующих протоколов, таких как ICP (кэширующий интернет протокол), HTCP (гипертекстовый кэширующий протокол), CARP (протокол кэширования маршрутизации) и WCCP (кэширующий протокол перенаправления контента).

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

Установка

В терминале введите следующую команду для установки сервера Squid:

Sudo apt-get install squid

Настройка

Squid настраивается редактированием директив, содержащихся в конфигурационном файле /etc/squid/squid.conf. Следующие примеры иллюстрируют некоторые директивы, которые могут быть изменены для воздействие на поведение сервера Squid. Для более глубокой настройки Squid смотрите раздел .

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

Скопируйте файл /etc/squid/squid.conf и защитите его от записи следующими командами в терминале:

Sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original sudo chmod a-w /etc/squid/squid.conf.original

1. Для настройки вашего сервера Squid на прослушивание порта 8888 вместо стандартного 3128, измените директиву http_port как показано здесь:

Http_port 8888

2. Измените директиву visible_hostname для того, чтобы присвоить серверу Squid определенное имя хоста (hostname). Это имя необязательно должно быть именем хоста компьютера. В примере оно определено как weezie:

Visible_hostname weezie

3. Используя контроль доступа Squid, вы можете настроить, чтобы использование интернет сервиса прокси было доступно только пользователям с определенных IP адресов. Например, мы проиллюстрируем доступ пользователей только из подсети 192.168.42.0/24:

ACL

Acl fortytwo_network src 192.168.42.0/24

http_access вашего файла /etc/squid/squid.conf:

Http_access allow fortytwo_network

4. Используя великолепные возможности контроля доступа Squid, вы можете настроить возможность использования интернет сервиса прокси только в обычные рабочие часы. Например, мы покажем как настроить доступ сотрудников, которые работают с 9:00 до 17:00 с понедельника по пятницу из подсети 10.1.42.0/24:

Добавьте следующее в конец секции ACL вашего файла /etc/squid/squid.conf:

Acl biz_network src 10.1.42.0/24 acl biz_hours time M T W T F 9:00-17:00

Затем добавьте следующее в начало секции http_access вашего файла /etc/squid/squid.conf:

Http_access allow biz_network biz_hours

После внесения изменений в файл /etc/squid/squid.conf сохраните его и перегрузите приложение сервера squid, чтобы изменения вступили в силу, следующей командой в терминале: sudo /etc/init.d/squid restart

Сегодня мы поговорим о прокси-серверах.

Прокси-сервер - это такая штука, обеспечивающая доступ нескольких компьютеров из одной сети в другую сеть (но не путать с маршрутизаторами - это совсем разные вещи, прокси-сервер работает на прикладном уровне). Наиболее расспространенная задача прокси-сервера - обеспечить доступ в интернет для ПК, на которых его нет через один ПК, который имеет доступ в глобальную сеть. Рассмотрим эту задачу в случае использования Windows-компьютера в качестве шлюза в интернет.

Для решения этой задачи можно пользоваться проприетарными решениями с визуальным интерфейсом - например, UserGate.Но у меня не получилось заставить его корректно работать на ПК с Windows 7 да и он платный:) Поэтому лучшим решением я считаю доставшийся нам с *nix-ов Squid. Скачать сие творение можно по адресу: Squid 2.7 (последняя версия на момент написания статьи)

Скачиваем и распаковываем желательно в корень диска. Не пытайтесь что-нибудь запустить оттуда - в этой программе нет графического интерфейса - и пусть вас это не пугает:)
Далее открываем консоль - Win+R / сmd / переходим в папку с установленным сквидом (далее я буду писать для пути установки c:\squid)

c:\
cd c:\squid\sbin

Теперь необходимо установить сквид как службу Windows командой:

squid -i -f c:/squid/etc/squid.conf -n Squid27

Где Squid27 - имя службы, которое в принципе может быть любое допустимое.

Теперь надо подредактировать файл настроек squid.conf, который находится в папке c:/squid/etc/ советую забекапить оригинальный файл. Далее удаляем из этого файла весь текст и прописываем следующее:

http_port 3128
acl localnet src 192.168.3.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny all

cache_log none
cache_store_log none

где

  • http_port 3128 - номер порта на сервере, через который работает скви д. Т. е. в настройках клиентов будем указывать адрес сервера и этот порт;
  • acl localnet src 192.168.0.0/255.255.0.0 - эта строчка указывает диапазон ip-адресов, для которых возможно подключение к нашему прокси. Маску можно указывать как /8, /16, /24 (для 255.0.0.0, 255.255.0.0, 255.255.255.0 соответсвенно), а localnet - это имя. По сути, этой строчкой мы объявляем переменную, с которой дальше будем работать. следующая строчка аналогично объявляет переменную all, где указаны все существующие ip;
  • http_access allow localnet - этой строкой мы разрешаем доступ с ip, указанных в переменной localnet к нашему прокси;
  • http_access deny all - запрещаем всем остальным доступ к прокси. Эти разрешения работают сверху-вниз, потому эту строчку нужно указывать последней! Иначе никто до проксика не достучится:)
  • cache_log none - нужна, как и следующая строка, чтобы логи не разрослись в гигабайты)
Еще можно внести следующие параметры:
  • cache_mem 32 MB - определяет размер дополнительного кеша сквида в оперативной памяти;
  • cache_dir ufs c:/squid/var/cache 100 16 256 - определяет путь к папке кеша, размер его в Мб (100) и количество подпапок (зачем последнее - я так и не понял:))
Теперь надо в той же папке убрать ".default" в названии файла mime.conf или просто создать пустой текстовый файл с таким именем. Это нужно для формирования кеша. В консоли набираем команду (находясь в папке sbin):

squid -z -f c:\squid\etc\squid.conf

Вот, в принципе, мы и готовы к запуску нашего прокси. Пишем в командной строке (или можно зайти в Службы и запустить мышкой:)

net start Squid27

Остановка:

net stop squid27

Переконфигурация:

squid -n Squid27 -f с:/squid/etc/squid.conf -k reconfigure

Еще можно много чего наворотить в этом прокси, например, задать ограничения разным пользователям по времени, по скорости, запретить доступ на определенные сайты и т. д. и т. п. Но в задачи этой статьи не входит описывание этого всего - такой материал легко найти на просторах Интернета.

Материалы о построении роутера на базе Squid - одни из самых популярных на нашем сайте. Такое решение позволяет с минимальными затратами (прежде всего на программную часть) организовать и упорядочить доступ к сети интернет на предприятии. Но рассматриваемые нами варианты предназначались преимущественно для работы в составе рабочей группы. Отсутствие интеграции с Active Directory резко снижало удобство применения такого роутера в доменных сетях, поэтому мы решили исправить это упущение.

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

Особенности интеграции с Active Directory

В чем смысл интеграции прокси-сервера Squid в Active Directory? Скажем сразу, что если ваша основная цель - просто раздать интернет всем и без ограничений, ну разве что закрыв социальные сети, то дальше можно не читать, уже описанная нами конфигурация полностью удовлетворит ваши потребности. Основное преимущество интеграции роутера в Active Directory - это использование единой точки аутентификации и управление доступом к сети интернет на базе уже существующих в домене учетных записей и групп безопасности.

Отсюда следуют некоторые особенности. Так прозрачный режим не поддерживает аутентификацию и от него придется отказаться, указывая настройки прокси непосредственно в настройках браузера. Этот процесс несложно автоматизировать при помощи DHCP-сервера и протокола WPAD.

В качестве DNS-серверов, в том числе и на роутере , должны обязательно указываться только доменные DNS, по умолчанию DNS-сервером является каждый контроллер домена. По этой причине роутер не должен иметь роли DNS-сервера. Также, для обеспечения интеграции с AD, роль DHCP-сервера также следует передать Windows Server, обычно на один или несколько контроллеров домена.

Теперь подходим к тому, ради чего все это затевалось. Аутентификация по доменным учетным записям позволяет использовать единую точку входа (SSO, Single Sign-On ), когда пользователь вводит логин и пароль один раз - при входе в систему. Это достигается применением протокола Kerberos , который является способом аутентификации в AD по умолчанию. В отличии от авторов иных руководств, мы не видим смысла настраивать или Basic-аутентификацию, в первую очередь по соображениям безопасности. Тем более Kerberos поддерживают все современные операционные системы.

Следующим шагом является авторизация на основе существующих групп безопасности, это особенно актуально при переходе с Forefront TMG или ISA Server . Это позволяет один раз настроив Linux-сервер дальнейшее управление доступом осуществлять привычным способом - через группы Active Directory, что позволяет снизить порог вхождения для администраторов.

Так как Active Directory имеет более сложную структуру и большее количество "действующих лиц", то чтобы вы не запутались в используемых нами адресах и именах хостов мы подготовили небольшую схему:


В наших примерах будет использоваться домен Active Directory с FQDN именем interface31.lab , за который отвечают два контроллера домена SRV-DC01 и SRV-DC02 с адресами 192.168.31.101 и 102 соответственно. Оба контроллера реализованы на базе Windows Server 2012 R2.

Роутер выполнен на базе Ubuntu Server 14.04 (Debian 7/8) и имеет имя SRV-GW01 с адресом 192.168.31.100. Также в сети имеется группа серверов со статическими адресами 192.168.31.103-105 и клиентские ПК, адреса которым выдаются DHCP сервером из диапазона 192.168.31.111-199.

Настройка сети

Сеть настраивается традиционным образом, посредством правки конфигурационного файла /etc/network/interfaces . Примем что внешней сети соответствует интерфейс eth0 , а внутренней eth1 . В результате настройки у нас должно получиться примерно следующее:

Auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.18.0.106
netmask 255.255.240.0
gateway 172.18.0.1
dns-search interface31.lab
dns-nameservers 192.168.33.101 192.168.31.102

auto eth1
iface eth1 inet static
address 192.168.31.100
netmask 255.255.255.0

post-up /etc/nat

Обратите внимание, что несмотря на то, что в настройках внешнего интерфейса использован внешний адрес и шлюз, адреса DNS-серверов указаны внутренние. Также указана опция dns-search , которая определяет домен для разрешения не FQDN-имен. Это означает, что к каждому короткому имени будет автоматически добавлен указанный домен, например, srv-dc01 будет дополнено до srv-dc01.interface31.lab .

Если вас смущает указание внутренних DNS в настройках внешней сетевой карты, то можете перенести эти строки в секцию eth1, на работу сервера это не повлияет.

DNS-сервера провайдера или публичные DNS следует указать в разделе Серверы пересылки внутреннего DNS-сервера на любом из контроллеров домена.

Если вы получаете сетевые настройки от провайдера по DHCP, то для использования внутренних серверов имен, вместо DNS провайдера секция eth0 должна иметь вид:

Auto eth0
iface eth0 inet dhcp
dns-search interface31.lab
dns-nameservers 192.168.33.101 192.168.31.102

Таким образом явно указанные настройки перекроют полученные автоматом от провайдера.

Сохраняем содержимое файла, перезагружаемся. Проверяем наличие интернета на сервере и разрешение имен. Например, выполните команду:

Nslookup srv-dc02

Ответить вам должен первый указанный доменный сервер имен, в нашем случае 192.168.33.101 и выдать полное FQDN-имя хоста и его IP-адрес.

После чего проверьте разрешение внешних имен:

Nslookup ya.ru

Вы также должны получить ответ от внутреннего сервера. На этом настройку сети можно считать законченной.

Настройка NAT и брандмауэра

Базовая настройка брандмауэра принципиально ничем не отличается от варианта роутера для рабочей группы, за одним исключением. Так как наш прокси является непрозрачным, то существует возможность выхода напрямую через NAT, если по какой-то причине браузер не будет настроен на работу с прокси-сервером. Поэтому ограничим доступ по HTTP (порт 80) для всех клиентов локальной сети, за исключением серверов и отдельных хостов, которым может потребоваться прямой доступ.

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

Создадим и откроем файл /etc/nat

touch /etc/nat

внесем в него следующее содержимое:

#Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

#Разрешаем трафик на lo
iptables -A INPUT -i lo -j ACCEPT

#Разрешаем HTTP серверам
iptables -A FORWARD -i eth1 -s 192.168.31.101 -p tcp --dport 80 -j ACCEPT
...
iptables -A FORWARD -i eth1 -s 192.168.31.105 -p tcp --dport 80 -j ACCEPT

#Запрещаем HTTP
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j REJECT

#Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

#Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.31.0/24 -j MASQUERADE

#Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT

Секция #Разрешаем HTTP серверам подразумевает набор идентичных правил для каждого хоста, которому мы разрешаем выход в интернет в обход прокси. В нашем случае это адреса от 192.168.31.101 до 192.168.31.105, чтобы не загромождать пример мы написали первый и последний, разделив их многоточием (которого в реальном конфиге быть не должно).

Сохраним файл и дадим ему права на исполнение:

Chmod +x /etc/nat

Перезагрузимся:

После чего можно проверить интернет на клиентах, на тех, которые входят в список исключений - он будет, на остальных нет. Другие протоколы: почта (SMTP, POP3, IMAP), FTP, HTTPS и т.п. должны работать на всех клиентах.

Настройка синхронизации времени

Для успешной работы с доменом Active Directory и прохождения Kerberos-аутентификации важно чтобы часы роутера были синхронизированы с часами контроллера домена.

Установим NTP-клиент:

Apt-get install ntp

Затем откроем файл конфигурации /etc/ntp.conf и закомментируем все строки, начинающиеся на server . После чего добавим две свои записи:

Server srv-dc01.interface31.lab
server srv-dc02.interface31.lab

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

Затем добавим в конец файла две строки, ограничивающие работу NTP-клиента внутренним интерфейсом:

Interface ignore wildcard
interface listen eth1

Сохраняем файл и перезапускаем службу:

Service ntp restart

Чтобы убедиться, что NTP работает только на внутреннем интерфейсе, выполните:

Ss -l | grep 123

В выводе команды должны быть только внутренние адреса и адреса локальной петли (localhost):

Проверить синхронизацию можно командой:

В выводе обращаем внимание на колонки: when -время с последнего ответа сервера, pool - время опроса сервера, offset - разница времени в секундах.

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

Настройка кэширующего прокси-сервера Squid3

Внимание! Если вы перенастраиваете сервер для рабочей группы, то обязательно удалите пакет dnsmasq или иные DNS и DHCP сервера!

Установим прокси-сервер squid3 командой:

Apt-get install squid3

Откроем конфигурационный файл /etc/squid3/squid.conf и зададим минимальную конфигурацию, добавив или раскомментировав в соответствующих секциях указанные строки.

Укажем acl элемент для локальной сети:

Acl localnet src 192.168.31.0/24

Минимальный набор списков доступа:

Http_access allow localnet
http_access allow localhost
http_access deny all

Интерфейсы, порты и режимы работы прокси:

Http_port 192.168.31.100:3128
http_port 127.0.0.1:3128

Настройки кэша:

Cache_mem 1024 MB
maximum_object_size_in_memory 512 KB

cache_dir ufs / var /spool/squid3 2048 16 256

maximum_object_size 4 MB

Настройки лога:

Access_log daemon:/var/log/squid3/access.log squid
logfile_rotate 31

Для squid 3.1 и ниже первая строка должна выглядеть так:

Access_log /var/log/squid3/access.log squid

Сохраните и проверьте конфигурацию:

Squid3 -k check

Если нет ошибок, то перезапускаем squid:

Service squid3 restart

Перестраиваем кэш:

Service squid3 stop
squid3 -z
service squid3 start

На DNS-сервере домена добавьте A-запись для нашего роутера:

Теперь в настройках браузера укажите полное FQDN имя сервера и порт 3128:

Так как никаких ограничений пока не установлено, то вы должны получить доступ в интернет.