Linux
Шрифт:
src ip-address/netmask…
• диапазон адресов:
src addrl-addr2/netmask…
• получение IP-адреса no URL:
srcdomain foo.com…
• если в URL использовался IP, то делается попытка определить имя домена, если не удалась, то подставляется слово попе:
dstdomaien foo.com…
• получение IP-адреса клиента по URL с использованием регулярных выражений:
srcdom_regex [-i] строка…
• если в URL использовался IP, то делается попытка определить имя домена используя регулярные выражения:
dstdom_regex [-i] строка…
• регулярное выражение для всего URL:
url_regex [-i] строка
• регулярное выражение для path-части URL:
urlpath_regex [-i] строка
• определяются безопасные порты:
port порт…
• сопоставляется заголовок User-Agent:
browser [-i] regexp
• ограничивает число соединеной с одного и того же IP:
maxconn число Права доступа
Права доступа определяются следующими строками:
• http_access allow| deny [!] aclname… – кому разрешать доступ к proxy по HTTP;
• icp_access allow| deny [!] aclname… – кому разрешать доступ к proxy по ICP;
• miss_access allow| deny [!] aclname. – кому разрешить получать ответ MISS;
• cache_peer_access cache-host allow|deny [!]aclname… – ограничить запросы к данному соседу;
• proxy_auth_realm Squid proxy-caching web server – строка текста, которая будет выдана на экран клиента при запросе имени/пароля доступа к кэшу.
Параметры администрированияПараметры администрирования определяются следующими строками:
• cache_mgr email – почтовый адрес, на который будет послано письмо, если у Squid возникнут проблемы;
• cache_effective_user nobody – если запускается Squid от имени root, то заменить UID на указанный;
• cache_effective_group nogroup – если запускается Squid от группы root, то заменить GID на указанный;
• visible_hostname имя-хоста – это имя будет упоминаться в сообщениях об ошибках;
• unique_hostname уникальное-имя – если нескольким кэшам дали одно и то же visibie_hostname, необходимо определить каждому из них
• hostname aliases имя… – список синонимов для имени хоста.
Параметры для работы в режиме ускорителя HTTP-сервераПараметры для работы в режиме ускорителя HTTP-сервера определяются следующими строками:
• httpd_accel_host hostname – если нужна поддержка виртуальных хостов, в частности для transparent proxy (прозрачное кэширование), то вместо имени указать virtual;
• httpd_accei_port port – порт для HTTP-сервера;
• httpd_accei_with_proxy on | off – кэширование для ускоряемого сервера;
• httpd_accel_uses_host_header on | off – для работы в прозрачном режиме требуется включить, иначе виртуальные серверы не будут правильно кэшироваться.
РазноеЗдесь содержатся параметры Squid, не вошедшие в предыдущие разделы:
• dns_testnames netscape.com internic.net microsoft.com – список имен хостов, на примере которых проверяется работоспособность DNS;
• iogfile_rotate 10 – данный параметр задает количество старых копий при ротации;
• append_domain.vasya.ru – добавляется к имени хоста, если в нем нет ни одной точки;
• tcp_recv_bufsize о bytes -о означает, что надо использовть размер буфера по умолчанию;
• err_htmi_text строка – подставляется в шаблоны текстов сообщений об ошибках;
• deny_info err_page_name acl – запросы, не прошедшие проверку в http_access, проверяются на соответствие ACL, выдается соответствующее сообщение об ошибке из файла page_name;
• memory_poois on | off – эта переменная определяет политику использования захваченной памяти:
– on – однажды захваченная, но не используемая память не отдается обратно в систему;
– off – позволяет освобождать захваченную память;
• memory_рооls_limit байт – максимальное количество неиспользуемой памяти, которое Squid будет удерживать, если 0 – то удерживать все, что было захвачено;
• fоrwarded_fоr on | off – если включено, то Squid будет вставлять IP-адрес или имя в заголовки перенаправляемых HTTP-запросов: X-Forwarded-For: 192.1.2.3; если выключено, то X-Forwarded-For: unknown;
• log_icp_queries on | off – записываются ли в журнал ICP-запросы;
• icp_hit_staie on | off – возвращать ли ответ icp_hit для устаревших объектов;
• cachemgr_passwd password action action… – задание пароля для действий по администрированию Squid; чтобы запретить действие – поставьте пароль disable; чтоб разрешить действие без проверки пароля – поставьте пароль попе, кроме действий config и shutdown; полную информацию смотрите в документации на Squid;
• store_avg_object_size 13 KB – предполагаемый средний размер объекта, используемый для расчетов;
• store_objects_per_bucket 20 – число объектов на хэш-корзину;
• client_db on | off – сбор статистики о клиентах;
• netdb_iow 900 – нижняя граница для базы данных измерения ICMP;
• netdbjiigh 1000 – верхняя граница для базы данных измерения ICMP;
• netdb_ping_period 5 minutes – минимальное время между посылок ping-пакетов в одну и ту же сеть;
• query_icmp on | off – должны ли соседи в IСР-ответы включать ICMP-данные;
• test_reachabiiity on | off – если включить, то ответ icpjmiss будет заменяться на icp_miss_nofetch, если сервер отсутствует в базе данных ICMP или RTT равен нулю;
• buffered_iogs on | off – при включении запись в журнал буферизуется;
• always_direct allow| deny [!] aclname. – запросы, удовлеворяющие данным ACL, не кэшировать, а всегда направлять к первоисточнику;
• never_direct allow| deny [!] aclname. – запросы, удовлеворяющие данным ACL, всегда кэшировать;
• anonymize_headers allow| deny header_name.. – перечень заголовков, которые нуждаются в анонимизации;
• fake_user_agent none – если заголовок User-Agent фильтруется с помощью анонимизатора, то подставляется эта строка;
• minimum_retry_timeout 5 seconds – если сервер имеет несколько IP-адресов, то тайм-аут соединения делится на их количество;
• maximum_singie_addr_tries 3 – сколько раз пытаться соединиться с сервером, имеющим один IP-адрес; если сервер имеет несколько IP-адресов, то каждый из них будет опробован один раз;
• snmp_port 3401 – порт, который слушает Squid для SNMP-запросов;
• snmp_access allow| deny [!] aclname… – определяет, кто будет допущен к SNMP-порту;
• offiine_mode on | off – если включить, то Squid будет брать объекты только из кэша и не будет пытаться обращаться к первоисточникам;
• uri_whitespace strip – что делать с запросами, имеющими пробелы в URI; возможные варианты:
– strip – удалять пробелы;
– deny – сообщать Invalid Request (ошибочный запрос);
– allow – передавать как есть;
– encode – кодировать в соответствии с RFC 1738, передавать дальше;
– chop – остаток после первого же пробела отбрасывать;
• mcast_miss_addr адрес – по этому multicast-адресу посылается сообщение при каждом «непопадании» в кэш;
• mcast_miss_port порт – этот порт не пользуется для посылки сообщения;
• strip_query_terms on – удалять параметры запроса перед записью в журнал;
• ignore_unknown_nameservers on – игнорировать сообщения от DNS-серверов, с которыми Squid не работает.
Пример конфигурации Squid
Как вы уже заметили, опций для конфигурации Squid очень много. Для быстрой настройки proxy-сервера можно воспользоваться приведенными ниже параметрами. Конечно они не являються идеальными, наверняка тонкая настройка поможет вам оптимизировать сервер как с точки зрения увеличения производительности, так и с точки зрения безопасности.
Возьмем стандартный файл Squid.conf и отредактируем только нижеприведенные строки:
• http_port 3128 – номер порта, на котором Squid будет слушать команды от клиентов;
• hierarchy_stoplist cgi-bin, chat – слова в URL, при обнаружении которых proxy-сервер будет не кэшировать объекты, а напрямую перенаправлять запрос серверу;
• cache_mem 16 MB – сколько оперативной памяти Squid может забрать под свои нужды. Чем больше выделить памяти – тем быстрее будут обрабатываться запросы. Весьма зависит от количества клиентов;
• maximum_object_size 16384 KB – максимальный размер объектов, которые будут сохранены в кэше. Размер специфичен для ваших задач и объема жесткого диска;
• cache_dir /usr/local/Squid/cache 2048 16 256 – указывает proxy-серверу, где сохранять кэшируемые файлы. Под кэш выделяется два гигабайта и создается 16 и 256 каталогов 1-го и 2-го уровня;
• ftp_user [email protected] – задает proxy-серверу, под каким паролем регистрироваться на анонимных FTP-серверах;
• negative_ttl 1 minutes – время жизни страничек с ошибкой;
• positive_dns_tti 6 hours – время жизни удачного преобразования DNS-имен в IP-адреса;
• negat ive_dns_tt 1 5 minutes – время жизни соответственно удачного и неудачного преобразования DNS-имен в IP-адреса.
Дальнейшие наши действия касаются разграничения прав пользователей.
Сначала необходимо определить ACL (Access Control List, список управления доступом). Сначала закомментируем все строчки в файле Squid.conf, начинающиеся на aci. Затем пишем свои правила. К примеру:
• acl users proxy_auth vasya tolik petya nina – этой строчкой мы указываем proxy-серверу правило, по которому разрешаем пускать вышеперечисленных пользователей с использованием авторизующей программы через Squid;
• acl BANNER url_regex banner reklama linkexch banpics us\.yimg\.com [\./]ad[s]? [\./] – это правило определяет адреса, содержащие рекламу. Интересна для тех, кто хочет отказаться от получения разнообразных баннеров. Позволяет экономить сетевой трафик;
• http_access deny [users – эта строка запрещает доступ всем пользователям, кроме тех, которые перечислены в группе users;
• http_access deny banner – запрещаем доступ к URL, удовлетворяющим правилу banner (убираем рекламу);
• proxy_auth_realm Vasy Pupkina proxy-caching web server – строка, которая выводится в окно с логином/паролем;
• cache_mgr [email protected] – если у клиента возникает проблема – выводится HTML-страница с сообщением и адресом электронной почты администратора, в нашем случае [email protected];
• cache_effective_user nobody – с правами какого пользователя выполняется proxy-сервер;
• cache_effective_group nogroup – с правами какой группы выполняется proxy-сервер;
• client_db on – параметр разрешает собирать статистику по клиентам.
Поскольку стандартной настройки в такой сфере, как использование канала, места на винчестере, оперативной памяти просто не может быть, более тонкие настройки и ограничения вы должны обдумать и настроить сами.
Создание иерархии proxy-серверовЧтобы разместить кэш в иерархии, нужно воспользоваться директивой cache_host.
Приведенной ниже частью конфигурационного файла Squid.conf сервер pupkin.ru сконфигурирован так, что его кэш получает данные с одного родительского и с двух братских кэшей:cache_host petya.com parent 3128 3130
cache_host monya.ru sibling 3128 3130
cache_host gesha.ru sibling 3128 3130Директива cache_host_domain позволяет задавать для каждого определенного домена или группы доменов как братский, так и родительский кэш. Приведенный ниже пример показывает что kesha.ru получает данные из доменов. ru, au, aq, fj, nz, agesha.ru – из доменов. uk, de, fr, no, se, it.
cache_host kesha.ru parent 3128 3130
cache_host gesha.ru parent 3128 3130
cache_host uc.cache.nlanr.net sibling 3128 3130
cache_host bo.cache.nlanr.net sibling 3128 3130
cache_host_domain kesha.ru.ru.au.aq.fj.nz
cache_host_domain gesha.ru.uk.de.fr.no.se.it
Transparent proxyTransparent proxy – это таким образом настроенный proxy-сервер, что его использование прозрачно для пользователей. То есть пользователям не придется что либо настраивать в своих браузерах. Для этого необходимо решить следующие задачи:
1. Добиться чтобы все HTTP-запросы пользователей попали на компьютер, где работает ваш HTTP proxy-сервер.
2. Добиться чтобы эти запросы попадали собственно к proxy-серверу.
3. Добиться того чтобы ваш proxy-сервер их правильно обработал.
Выполнить
httpd_accel www.your.domain 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Ключи запуска Squid
Помимо конфигурационного файла, поведением программы Squid можно управлять с помощью ключей командной сторки. Далее приведены некоторые из них с поянениями:
• -а – указывает порт для входных HTTP-запросов;
• -d – выводит отладочную информацию на устройство stderr (обычно – текущая консоль);
• -f имя_файла_конфигурации – позволяет использовать альтернативный конфигурационный файл (удобно для отладки сервера);
• -h – выводит краткую справку по программе Squid;
• -k – этот ключ позволяет посылать Squid следующие управляющие сигналы:
– reconfigure – посылка сигнала hup. Используется для прочтения измененного конфигурационного файла;
– rotate – позволяет произвести ротацию журналов (сигнал usri);
– shutdown – прервать выполнение программы с корректным завершением (сигнал term);
– interrupt – немедленно завершить работу программы (сигнал шт);
– kin – «убить» приложение (kill);
– debug – начать/закончить полную трассировку (сигнал USR2);
– check – проверка (сигнал zero);
• -u – задает порт для входных 1СР-запросов;
• -v – выводит версию программы;
• -z – создает дисковый кэш при первом запуске (Важно!);
• -D – предписывает не производить DNS-тест при запуске;
• -F – восстанавливает после сбоя не в фоновом режиме (ускорение восстановления);
• -N – предписывает не становиться фоновым процессом;
• -V – включает поддержку виртуальных хостов для режима акселерации;
• -X – включает отладку при разборе конфигурационного файла;
• -Y – включает быстрое восстановление после сбоев.
Первый раз Squid нужно запускать с ключом -z:Squid -z
При этом программа создаст дерево кэшей. Этой же командой следует воспользоваться с том случае, если вам необходимо очистить кэш proxy-сервера. Для закрыатия текущих файлов журналов и создания новых (чистых) файлов используется команда:
Squid -k rotate
Файлы журналов Squid
Файл access.logФайл access.log используется для хранения информации о всех подключениях к proxy-серверу. Запись добовляется, когда клиент закрывает соединение. Для сервера с большим трафиком файл может за день увеличиться на десятки мегабайт. К примеру, при трафике в 10 тыс. запросов в сутки объем журнала увеличивается примерно на 2 Мбайт.
Еденицей информации о соединении является строка. Строка состоит из десяти полей. Ниже приведено описание полей с пояснениями:
• timestamp – время в UNIX-формате (время с 1 января 1970 года в миллисекундах);
• elapsed – затраченное время в миллисекундах;
• client IP address – IP-адрес клиента, пославшего запрос;
• type/HTTP – результат запроса, где type:
– TCP_HIT – верная копия объекта нашлась в кэше;
– TCP_MISS – запрашиваемый объект не был в кэше;
– TCP_EXPIRED – объект есть в кэше, но он устарел;
– ТСP_CLIENT_REFRESH – клиент запросил принудительное обновление объекта;
– TCP_REFRESH_HIT – объект в кэше был старым, был сделан запрос к источнику и источник ответил "объект не изменился";
– TCP_REFRESH_MISS – объект в кэше был старым, был сделан запрос к источнику и тот вернул обновленное содержание;
– TCP_IMS_HIT – клиент выдал запрос, объект оказался в кэше и свежим;
– TCP_IMS_MISS – клиент выдал запрос для просроченного объекта;
– ТСP_REF_FAIL_HIT – объект в кэше устарел но запросить новую копию не удалось;
– TCP_SWAPFAIL – объект должен находиться в кэше, но его не смогли извлечь;
– TCP_DENIED – отказ;
• size – количество байтов, переданных клиенту;
• method – метод передачи информации; GET, HEAD, POST для ТСР-запросов или ICP_QUERY для UDP-запросов;
• URL – адрес запрашиваемого объекта;
• ident "-", если недоступен;
• hierarhy data/Hostname – результат запросов к братским/родительским кэшам:
– PARENT_HIT – UDP-запрос к родительскому кэшу (parent) вернулся с подтверждением;
– PARENT_UDP_HIT_OBJECT – объект оказался в родительском кэше parent и поместился в UDP-ответе;
– DIRECT – объект был запрошен с оригинального сервера;
• тип содержимого (MIME-тип/подтип).
Файл store.logФайл store.log используется для хранения информации о всех кэшируемых объектах proxy-сервера. Единицей информации о соединении является строка. Строка состоит из одиннадцати полей. Ниже приведены поля с пояснениями:
• Time – время в UNIX-формате (время с 1 января 1970 года в миллисекундах);
• action – действие:
– RELEASE – удален из кэша;
– SWAPOUT – сохранен на диск;
– SWAPIN – был на диске, загружен в память;
• HTTP reply code – код ответа HTTP-сервера;
• HTTP Date – дата создания объекта;
• HTTP Last-Modified – время последней модификации объекта;
• HTTP Expires – срок жизни объекта;
• HTTP content-Type – тип объекта;
• HTTP Content-Length – размер объекта;
• реально полученное число байтов. В том случае, если не совпадает с предыдущим полем, объект не сохраняется;
• HTTP metod – метод передачи информации (GET, HEAD, POST).
• Access key – ключ доступа (обычно URL).
Файл useragent.logПредназначен для хранения информации о том, с какими пользовательскими агентами (Web-браузерами) работают клиенты. Малоинтересен в практическом плане. Разве что для получения статистики по частоте использования тех или иных Web-браузеров.
Нестандартные применения
Функциональность программы Squid не ограничивается только функцией proxy-сервера. У нее есть достаточно много других интересных применений. В этом разделе мы рассмотрим только некоторые из них.
Борьба с баннерамиНаверняка вам встречались Web-страницы, на которых нужной информации было от силы на килобайт, а рекламных баннеров (зачастую анимированных) – пять-шесть. Хорошо когда канал большой и бесплатный. Когда же пользуешься обычным коммутируемым соединением да еще платишь за соединение из своего кармана, каждый килобайт начинаешь считать. В этом случае можно настроить локальный сервер Squid таким образом, чтобы не происходила закачка ненужных баннеров. Этого можно добиться несколькими способами.
Вариант 1
Простой. На месте баннеров показываются разорванные картинки или перекрещенные прямоугольники (неполученные файлы).
1. Определяем сайты банерных сетей и создаем для них регулярные выражения.
2. Создаем в каталоге /usr/local/Squid/etc следующие файлы:
– banners_path_regex – содержит по одному регулярному выражению на строку;
– banners_regex – содержит по одному регулярному выражению на строку;
– banners_exclusion – это строки, трактуемые в предыдущих файлах как баннеры, но изменять которые не рекомендуется.
3. В Squid.conf добавляем следуюшие правила:acl banners_path_regex urlpath_regex «/usr/local/Squid/etc/banners_path_regex»
acl banners_regex url_regex "/usr/local/Squid/etc/banners_regex"
acl banners_exclusion url_regex "/usr/local/Squid/etc/banners_exclusion"
http_access deny banners_path_regex !banners_exclusion
http_access deny banners_regex !banners_exclus ionВариант 2
Замена рекламных баннеров на свою картинку, которая находится на локальном для proxy-сервера компьютере.
1. Определяем сайты банерных сетей и создаем для них регулярные выражения.
2. На своем сервере создаем «заменитель» рекламных картинок – файл mybanner.gif.
3. Настраиваем перенаправление (редиректор) в файле Squid.conf – redirect_program /usr/local/Squid/bin/banner.pl.
4. Создаем прстой скрипт на Perl – banner.pl:#!/usr/bin/perl
$|=1;
while (<>)
{
s@регулярное-выражение@httр://www.myhost.оrg/mybanner.gif@;
print;
}
Конечно, можно сделать более элегагантно, однако данный метод работает, а настроить proxy-сервер можно за пару минут.
Разделение внешнего каналаЧасто бывает так, что у вас есть внешний канал – скажем, 128 Кбит, и есть несколько групп пользователей с определенным приоритетом. И требуется, чтобы группа 1 имела одну фиксированную ширину наружного канала (скажем, 64 Кбит), а группа 2 и 3 – ширину наружного канала по 32 Кбит. Для решения этой непростой задачи мы также можем воспользоваться Squid.
Немного терминологии:
• пул – набор групп «емкостей» определенного класса;
• группа «емкостей» – часть пула, привязанная к хосту, сети или общая для всех;
• «емкость» ограниченного объема – та, в которую с определенной скоростью вливается внешний трафик, и из которой он раздается клиенту.
Определены три класса пулов:
• одна «емкость» на всех из этого класса;
• одна общая «емкость» и 255 отдельных для каждого хоста из сети класса С;
• 255 «емкостей» для каждой сетки класса В и отдельная «емкость» для каждого хоста.
Пример конфигурации Squid для трех классов пулов:delay_pools 3 #3 poolы
delay_class 1 1 # 1 pool 1 класса
delay_class 2 1 # 2 pool 1 класса
delay_class 3 3 # 3 pool 3 класса
delay_access 1 allow staff
delay_access 1 deny all
delay_access 2 allow students
delay_access 2 deny all
delay_access 3 allow college
delay_access 3 deny all
delay_parameters 1 640000/640000
delay_parameters 2 64000/64000
delay_parameters 3 64000/64000 32000/64000 6400/32000Строка, определяющая максимальную ширину виртуального канала, имеет следующий вид:
delay_parameters pool total_rest/total_max net_rest/net_max ind_rest/ind_max
где:
• pool – номер пула, для которого определяются каналы;
• total – ширина канала на всех;
• net – ширина канала на подсеть;
• ind – ширина канала на отдельный адрес;
• rest – скорость заполнения (байт/с);
• max – объем «емкости» (байт).Обработка статистики
В стандартную поставку пакета Squid входят скрипты, написанные на Perl, позволяющие создавать отчеты о работе программы Squid:
• access-extract.pl – скрипт получает на стандартный ввод журнал access.log и выдает на стандартный вывод промежуточный результат;
• access-summaiy.pl – скрипт получает на вход результат работы access-extract.pl и делает из него красивый отчет.
Программа Squid Cache and Web Utilities (SARG)
Программа, обрабатывающая журналы Squid и составляющая на их базе отчеты.
С помощью этой програмы можно получить следующую информацию:
• количество работавших пользователей;