Squid: Поднимем прокси-сервер.
10.02.2010
Хотите, чтобы web-серфинг стал быстрее и безопаснее? Нейл Ботвик покажет, как достичь этого, а заодно уменьшить потребление трафика!
Большая часть содержимого web-страницы в вашем браузере не менялась с прошлого просмотра. Да, слова могут быть другими, но картинки, особенно логотипы и кнопки, остаются теми же. Браузер кэширует эти данные, и они не загружаются каждый раз заново, но что если другой пользователь вашей сети заходит на тот же самый сайт или у вас несколько компьютеров? Даже переключение на другой браузер отбирает часть отнюдь не безграничной ширины канала.
В простейшем случае вам поможет прокси-сервер. Браузер запрашивает объект не прямо с сайта, а у посредника, который загружает его и сохраняет копию. В следующий раз, когда вам или другому пользователю понадобится такой же объект, прокси-сервер отправит копию, убедившись с помощью ряда проверок, что она не устарела.
Может, вы уже и пользуетесь прокси-сервером – большинство провайдеров применяют их для экономии трафика, нередко реализуя так называемый «прозрачный» (правильнее сказать – перехватывающий) режим, когда трафик принудительно направляется через прокси-сервер, даже если вы не указали этого в настройках браузера.
Экономия полосы пропускания – лишь одно из назначений прокси-сервера. С помощью различных параметров настройки и дополнений можно фильтровать содержимое определенных типов. Прокси поможет предотвратить посещение нежелательных с вашей точки зрения сайтов вашими детьми или сотрудниками – например, запретит им торчать в социальных сетях, когда они должны делать уроки или работать. Вы также сможете отфильтровать рекламные сайты, подавив загрузку баннеров, отнимающих время и трафик, не говоря уже о назойливой всплывающей рекламе.
Самый популярный прокси-сервер с открытым исходным кодом – это Squid (www.squid-cache.org), поэтому начнем с его настройки, а потом более подробно познакомимся с проксиро-ванием и фильтрацией.
Web через прокси
После установки Squid через менеджер пакетов вы можете захотеть изменить пару опций в его конфигурационном файле /etc/squid/squid.conf. В нем почти пять тысяч строк – это настоящий монстр. Но большинство строк – комментарии, описывающие опции, и многие параметры можно оставить без изменения; зато видно, сколько всего можно подрегулировать. Из-за потенциальной сложности индивидуальной настройки лучше всего держаться поближе к варианту по умолчанию и менять отдельные опции постепенно, сохраняя резервные копии файлов работающих конфигураций, чтобы при необходимости в любой момент откатиться к ним .
Установки по умолчанию – идеальная стартовая точка, и теоретически с ними все должно сразу заработать. После установки Squid запустите его из менеджера служб вашего дистрибутива и расскажите о нем своему браузеру. Установите адрес прокси-
сервера в доменное имя или IP-адрес компьютера, на котором запущен Squid (или в localhost, если это ваша локальная машина), а номер порта – в 3128 (вариант Squid по умолчанию). Squid прячет котированные файлы в каталоге /var/cache/squid/ – следующая команда покажет, сколько дисковой памяти он сейчас использует (пока не очень много, ибо вы еще ничего не поместили в кэш): du -sh /var/cache/squid/
Теперь откройте несколько сайтов и снова выполните команду. Вы должны увидеть, что используется больше места, то есть Squid закэшировал текст и картинки для только что просмотренных страниц.
Итак, прокси-сервер запущен; зададим необходимые настройки в ПО, которое с ним работает. Для начала сделайте это во всех браузерах. Впрочем, браузеры – не единственные программы, загружающие данные по HTTP или FTP (Squid обрабатывает и FTP-запросы): менеджеры пакетов тоже качают немало, и если на нескольких компьютерах установлен один и тот же дистрибутив, то одни и те же пакеты будут загружаться снова и снова, что, конечно, нежелательно. В некоторых менеджерах пакетов, например, Synaptic, можно задать прокси-сервер в настройках, но также можно установить переменные окружения, используемые большинством утилит командной строки (а все графические менеджеры пакетов полагаются на эти утилиты). Нужно установить значения двух переменных http_proxy и ftp_ proxy (имена в нижнем регистре) в 11М.//ваш.прокси.сервер.3128. Как это сделать, зависит от дистрибутива. В некоторых системах есть соответствующая опция в параметрах сети, в других нужно добавить пару строк в файл /etc/profile.d:
export http_proxy=http://your.proxy.server:3128 export ftp_proxy=http://your.proxy.server:3128
Тонкая настройка
Ну вот, Squid работает, и можно подкрутить еще кое-что. Основные опции, которые нужно проверить – это http_port (номер порта, который слушает Squid; по умолчанию 3128) и cache_dir (каталог, где Squid будет хранить кэшированные данные). Последний параметр также определяет тип хранилища и максимальный размер. По умолчанию это
cache_dir ufs /var/cache/squid 100 16 256
что означает стандартный метод хранения (ufs) в каталоге /var/cache/squid с максимальным размером в 100 МБ. Максимальный размер должен быть несколько меньше объема доступного места, чтобы избежать фрагментации файловой системы. Однако чрезмерно большой кэш может оказаться медленным, и при этом хранить такие старые файлы, которые уже никогда не будут востребованы повторно.
Остальные два числа – количество каталогов и подкаталогов, используемых для хранения данных – лучше оставить как есть. Существуют и другие типы хранилищ, но они опять же для более продвинутого использования. Например, diskd более эффективен, когда объем трафика большой, но работает медленнее, когда трафик умеренный. Также нужно установить в cache_mgr адрес электронной почты, куда будут отправляться сообщения о серьезных ошибках.
Кэш Squid также можно установить перед сервером или кластером серверов, снизив их загрузку и увеличив производительность, но это выходит за рамки наших четырех страниц.
Кто идет куда?
Прокси-серверы – мишень для неавторизованного использования. Если доступ на некий сайт блокирован брандмауэром (например, в компании, не желающей истратить весь свой месячный трафик на YouTube), пользователи могут попытаться найти открытый прокси-сервер, подключиться к нему и получить доступ к заблокированным сайтам. Предотвратить это можно двумя способами. Простейший – запретить доступ к прокси-серверу с любого компьютера вне локальной сети, закрыв порт 3128 на маршрутизаторе. Альтернативы – различные схемы аутентификации. Самая простая из них использует файл такого же формата, как .htpasswd в Apache, и добавить пользователей в него можно командой htpasswd: htpasswd /etc/squid/passwd username
При первом запуске добавьте ключ -c, чтобы создать файл. После этого не указывайте -c снова, а то удалите существующие записи. Теперь добавьте в файл squid.conf следующие строки:
auth_param basic program /usr/libexec/ncsa_auth /etc/ squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours
Они велят Squid запускать названную программу для аутентификации (/usr/libexec/ncsa_auth включена в Squid, хотя путь в вашем дистрибутиве может слегка отличаться) и разрешают поддерживать до пяти процессов (все остальные попытки аутентификации будут ждать своей очереди). Параметр realm – просто сообщение, выдаваемое Squid при запросе пароля, а последняя опция устанавливает период, в течение которого действительна сессия (время жизни). Если пользователям неохота каждый раз вводить имя и пароль, можно занести их в настройки прокси в браузере или в переменную окружения http_proxy в стандартном формате URL:
http://username:password@my.proxy.com:3128 Здесь мы лишь устанавливаем метод аутентификации. Мы еще не требуем ни от кого войти в систему, за это отвечает секция ACL (Access Control List – список контроля доступа) файла squid. conf. Списки задаются с помощью ключевого слова acl, например
acl lan src 192.168.0.0/24
acl users proxy_auth user1 user2
acl allusers proxy_auth REQUIRED
Каждая строка определяет правило ACL (второе слово задает имя правила, а последующие описывают его суть). Первое правило отвечает любому запросу, приходящему из сети 192.168.0.0/24, так что любой компьютер локальной сети будет ему соответствовать. Вторая строка соответствует заданным пользователям, при условии, что они ввели пароль и прошли аутентификацию в соответствии с auth_param. Третья строка похожа на вторую, за исключением опции REQUIRED, которая означает соответствие любому действительному пользователю. Теперь используем директиву http_access, чтобы применить эти правила.
http_access allow lan
http_access allow users
http_access deny all
Это разрешает доступ пользователям из списков lan или users и запрещает всем остальным. Таким образом, вы можете подключаться по локальной сети без пароля или извне с указанием пароля – все остальные не могут. Если запрос не соответствует ни одному из правил доступа, он считается соответствующим самому последнему из них, поэтому в общем случае лучше делать его правилом deny. Если это deny all, то никаких сомнений не остается, потому что он соответствует любому запросу, который забирается так далеко. Правила рассматриваются по порядку, и применяется первое совпадение, поэтому правило lan должно предшествовать users, иначе у пользователей локальной сети все равно будет запрашиваться пароль.
Кто идет когда?
Мы рассмотрели далеко не все возможности списков ACL. В частности, они позволяют фильтровать запросы по различным критериям. Одна из интересных возможностей – правила со временем
действия. Если вы не хотите ликвидировать доступ к сайтам социальных сетей полностью, а просто желаете, чтобы они не мешали работе, можно задать правила, блокирующие доступ к ним в рабочие часы, но не во время обеда или когда ребенок уже выполнил домашнее задание.
acl manager proxy_auth me
acl lunchtime time MTWHF 12:30-1:30
acl weekend time SA
acl social_networks dstdomain .facebook.com .twitter.com http_access allow me
http_access deny social_networks !lunchtime !weekend http_access allow lan http_access deny all
Первая строка acl задает пользователя, который может обойти эти ограничения – вовсе не смешно самому оказаться за бортом, заблокировав заодно и себя. Следующие два правила определяют периоды времени, а последний acl содержит список доменов, доступ к которым будет блокироваться вне данных периодов. Первая строка access разрешает вам делать то, что вы хотите, тогда как в следующей строке несколько списков acl определяются в одном правиле доступа. В таком случае для срабатывания правила необходимо совпадение со всеми списками сразу.! изменяет смысл запрета на противоположный, так что эта строка блокирует доступ к социальным сетям, если время не обеденное и день не выходной. Наконец, как и прежде, мы разрешаем доступ всем пользователям локальной сети и запрещаем всем остальным. Конечно, это простейшая настройка, но ее можно улучшить, добавив другие строки acl и http_access.
С приумножением правил конфигурационный файл станет неповоротливым. Есть несколько способов разбить его на части. В качестве аргумента правила acl могут принимать имя файла, содержащего параметры по одному в каждой строке. Поэтому строку social_networks можно заменить на
acl social_networks dstdomain /etc/squid/social_networks.
acl
где указанный файл содержит строки .facebook.com .twitter.com .thenextfad.com
Внутри squid.conf можно пользоваться директивой include, поэтому все правила acl можно поместить в отдельный файл и добавить строку
include /etc/squid/acl.conf
в squid.conf. Чтобы вы ни делали, тщательно комментируйте свои действия, иначе, заглянув в правила через полгода, вы едва ли поймете, что имели в виду.
Фильтрация содержимого
Squid умеетвызывать из своего конфигурационного файла другие программы – мы уже видели такой пример с аутентификацией, вызывающей программу /usr/libexec/ncsa_auth. Это означает, что к Squid можно прицепить различные средства фильтрации и блокировать доступ к нежелательному содержимому. Альтернативный подход – заставить программу фильтрации обращаться к Squid. Так работает DansGuardian (http://dansguardian.org). DansGuardian блокирует доступ различными способами, включающими черный список URL-ад-ресов и доменов и фильтр содержимого. Последний анализирует содержимое web-страницы, прежде чем решить, передавать ее или нет. В этом отношении он похож на спам-фильтр. У обоих методовесть преимущества и недостатки, а их сочетание обеспечивает надежную защиту.
Установите DansGuardian обычным способом (из менеджера пакетов дистрибутива); значения по умолчанию в его конфигурационном файле /etc/dansguardian/dansguardian.conf весьма разумны. Возможно, они покажутся вам чересчур ограничивающими, но файл хорошо закомментирован, и нетрудно сообразить, как расширить доступ. Самые важные строки в нем -
filterip =
filterport = 8080
proxyip = 127.0.0.1
proxyport = 3128
language = ‘russian’
contentscanner = ‘/etc/dansguardian/contentscanners/clamdscan. conf’
Первая задает IP-адрес, на котором работать DansGuardian; оставьте его пустым, чтобы слушать на всех сетевых интерфейсах. Чтобы определить более одного адреса, указывайте каждый новый на отдельной строке со своим filterip. Параметр filterport – порт, который прослушивает DansGuardian. Следующие две строки – это IP-адрес и порт сервера Squid, откуда ясно, что DansGuardian и Squid могут работать на отдельных компьютерах, хотя это увеличивает сетевой трафик. Параметр language задает язык, используемый на web-странице, возвращаемой DansGuardian как оповещение о блокировке запрошенного документа.
Последняя строка – установка по умолчанию, но не исключено, что вам захочется ее закомментировать. Она велит DansGuardian прогонять каждый объект через ClamAV для проверки на вирусы, но вот беда: перед передачей ClamA/файл нужно загрузить полностью, а это исключает потоковую передачу данных. Удовлетворившись настройкой, запустите программу с помощью менеджера сервисов дистрибутива и настройте ее старт при загрузке системы.
Вам также потребуется изменить настройки прокси в браузерах, так как теперь запросы должны приходить на порт 8080, откуда они будут перенаправлены к Squid на порт 3128. Если вы уже настроили несколько компьютеров на использование Squid на порту 3128, быстрое и простое решение – изменить порт Squid на что-то другое. Укажите это в dansguardian.conf и заставьте DansGuardian слушать порт 3128. Номера портов не являются неприкосновенными, хотя для прокси обычно используются эти два.
Если к DansGuardian или к Squid подключиться не удается, сначала загляните в файл системного журнала на сервере. Например, с некоторыми настройками ядра DansGuardian может выдать ошибку «Failed to get client’s original destination IP» («Не могу получить исходный IP-адрес клиента»); тогда нужно установить параметр originalip=off в dansguardian.conf.
Теперь у вас должен быть рабочий прокси-сервер, который разгрузит канал, ускорит просмотр сайтов и позволит вам указывать, кому, когда и куда ходить. И в Squid, и в DansGuardian есть масса возможностей, которых мы не коснулись, и подробную информацию о том, как еще подправить их густо закомментированные файлы конфигурации, можно найти в разделе документации соответствующих сайтов.
Похожые материалы:
Рубрики: Интернет



Really good work about this website was done. Keep trying more – thanks!
Ну надо же, опять глаза уже совсем закрываются. Завтра обязательно дочитаю
Автор, а скажите а куда написать по поводу обмена ссылок (на какое конкретно мыло)?
Актуально. Некоторые моменты не знал.
Михаил, по обмену ссылками пишите на isco85@mail.ru.
Вопрос к автору сайта, а вот у вас время у каждой статьи и в комментариях пишется… Это какое? Московское? Заранее спасибочки за ответ.
И как автору не влом столько времени на написание статей тратить, мы конечно очень благодарны, но вот я лично на такой альтруизм не способен
Без особого преувеличения можно сказать, что пост тему раскрыл на все 100 процентов.
Немного не в тему, но вопрос такой возник автору. А почему вы именно вордпресс выбрали для своего блога. Я вот ваш блог постоянно читаю
Да, тут до меня побывало прличное количество читателей. ) блог отличный саветую читать))
Тайна: полностью с вами солидарен.
Arboleda: прежде всего из-за множества плагинов, которые хотелось видеть на своем блоге, у меня был сайт очень много времени уходило на написание кода, с другими CMS движками мало знаком
Кртуо!:) Но есть и минус небольшой! У меня скорость интернета 112 килобит/сек. Страница грузилась около 20 секунд.
В офисе так нудно было, хорошо что нашел ваш сайт. Читаю с интересом:)
Об этом правда не первоначальный раз уже слыхал, но все-таки.Говнокомментов бы было поменьше, было бы вообще очень хорошо.
Сам всегда с удовольствием просматриваю такие посты. А недавно сразу две мои статьи попали в «интересно почитать» Терехова — было очень приятно. Так что хотите писать — пишите. И имейте свое мнение!
Сейчас на отдыхе, с удовольствием читаю ваши статьи!
Хорошо пишите, хотел бы разместить на Вашем блоге статью о Ландшафтном дизайне.
Садовый центр: По поводу размещения статей и обмена ссылками присылайте свои пожелания на e-mail: isco85@mail.ru