Главная страница
Навигация по странице:

  • 9.3.4. Журналы

  • 9.3.5. Разделение кэша

  • 9.3.6. Дополнительные директивы

  • 9.4. Права доступа к squid

  • 9.4.1. Список контроля доступа

  • Листинг 9.1. Список acl- правил , описанных по умолчанию в конфигурационном файле

  • 9.4.2. Определение прав

  • 9.4.3. Аутентификация

  • 9.5.1. Безопасность сервиса

  • 9.5.2. Ускорение сайта

  • 9.5.3. Маленький секрет User Agent

  • 9.5.4. Защита сети

  • 9.5.5. Борьба с баннерами и всплывающими окнами

  • 9.5.6. Подмена баннера

  • Листинг 9.2. Сценарий на языке Perl для подмены баннеров и закрытия всплывающих

  • Листинг 9.3. Пример JavaScript- файла , закрывающего всплывающее окно

  • Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69


    Скачать 3.69 Mb.
    НазваниеМихаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
    Дата13.03.2022
    Размер3.69 Mb.
    Формат файлаpdf
    Имя файлаlinux_glazami_xakera_3-e_izd.pdf
    ТипДокументы
    #394477
    страница24 из 35
    1   ...   20   21   22   23   24   25   26   27   ...   35

    9.3.3.
    Настройка
    кэша
    От того, как вы настроите кэш, зависит удобство работы через прокси-сервер, поэтому я постараюсь показать все соответствующие директивы и подробно рассмотреть каждую из них:
    ˆ
    cache_dir тип директория размер L1 L2 опции
    — определяет парамет- ры директории, в которой будет храниться кэш. Основными для нас явля- ются тип
    , директория и размер
    . В большинстве случаев для типа приме- няется значение ufs
    , но если вы используете асинхронный ввод/вывод
    (я не советую, потому что это может вызвать проблемы в работе), то нужно установить aufs

    Глава
    9
    302
    Директорию нужно выбрать в самом большом разделе, чтобы информация не разобщалась по нескольким дискам. Если у вас используется один диск с
    одним разделом, то расположение не имеет особого значения.
    Размер директории по умолчанию равен 100 Мбайт. Этого достаточно для ускорения работы трех пользователей. Если в вашей сети много пользова- телей
    , и у каждого свои вкусы (любимые сайты), то значение желательно увеличить
    . Я использую не менее 1 Гбайт кэша. Выделенное пространство быстро исчезает, особенно если серверу разрешено кэшировать большие файлы
    ;
    ˆ
    cache_mem n MB
    — задает максимальный размер оперативной памяти, необходимый для программы. По умолчанию используется 8 Мбайт. Если настраиваемый компьютер решает только задачи прокси-сервера, то можно указать значение, равное разнице объемов оперативной памяти и
    памяти, необходимой для ОС. Для ОС в текстовом режиме 64 Мбайт бу- дет более чем достаточно, и, например, если у вас ОЗУ 512 Мбайт, то
    448 Мбайт можно отдать прокси-серверу: чем больше у него оперативной памяти
    , тем быстрее он сможет отвечать на часто повторяемые запросы;
    ˆ
    cache_swap_low n
    — процент заполнения кэша. Когда размер кэша пре- вышает значение n
    , сервер начинает чистить его, убирая устаревшие объ- екты
    , пока размер не станет удовлетворять параметру;
    ˆ
    cache_swap_high n
    — процент заполнения кэша. Команда аналогична предыдущей
    , но сервер начинает освобождать кэш более интенсивно. Это необходимо
    , чтобы не возникла ситуация, когда кэш будет переполнен;
    ˆ
    minimum_object_size n KB
    — минимальный размер объекта, который по- падает в кэш. По умолчанию установлено значение 0, при котором порог отсутствует
    ;
    ˆ
    maximum_object_size n KB
    — максимальный размер объекта, который должен кэшироваться. По умолчанию стоит значение 4096 Кбайт, что со- ответствует
    4 Мбайт. Для повышения производительности сервера необ- ходимо понизить это значение, но при этом может увеличиться расход трафика
    . Если экономия трафика важнее производительности, то значение n
    лучше увеличить;
    ˆ
    maximum_object_size_in_memory n KB
    — максимальный размер объекта в
    памяти. По умолчанию установлено значение 8 Кбайт;
    ˆ
    ipcache_size n
    — размер кэша для хранения IP-адресов. По умолчанию используется значение 1024 Кбайт;
    ˆ
    ipcache_low n и ipcache_high n
    — соответственно минимальный и мак- симальный проценты заполнения кэша для IP-адресов;

    Шлюз
    в
    Интернет
    303
    ˆ
    reference_age параметр
    — время жизни объекта в кэше. Если объект пролежал дольше, то его можно удалять по старости. Рассмотрим не- сколько примеров использования директивы: reference_age 1 week reference_age 3.5 days reference_age 4 months reference_age 2.2 hours
    По умолчанию используется значение в один год: reference_age 1 year
    ˆ
    quick_abort_min n KB
    — минимальный размер объекта, устанавливаю- щий при обрыве соединения необходимость закончить его скачивание и
    полностью сохранить. Это позволяет сократить трафик и увеличить ско- рость работы в сети. Например, пользователь запустил на скачивание файл для проверки соединения и оборвал связь. Если сервер успел сохра- нить файл, то при повторной попытке не надо снова скачивать те же дан- ные
    . Достаточно их взять из кэша. По умолчанию установлено значение
    16
    . Чтобы отключить эту возможность, можно задать значение
    -1
    ;
    ˆ
    quick_abort_max n KB
    — максимальный остаток объекта, при котором закачка будет прервана в случае обрыва соединения. По умолчанию уста- новлено значение
    16
    ;
    ˆ
    quick_abort_pct n
    — параметр аналогичен quick_abort_min
    , но в данном случае указывается процент уже полученной информации;
    ˆ
    negative_ttl n minutes
    — количество минут, которые нужно кэширо- вать негативный ответ сервера. Например, пользователь зашел на сервер и
    получил ошибку, которая может быть временной, поэтому нельзя кэши- ровать ответ на длительный срок. Значение по умолчанию 5 минут. Если пользователь обратится по этому же адресу по истечении этого времени, то копия из кэша не будет использоваться, а произойдет новая попытка зайти на сайт;
    ˆ
    positive_dns_ttl n hours
    — время в часах, в течение которого нужно кэшировать положительный результат DNS-запроса. В этот промежуток времени при повторных обращениях к DNS IP-адрес будет взят из кэша.
    По умолчанию используется значение 6 часов, в настоящее время его можно увеличить до 24 часов. Несколько лет назад IP-адреса имели тен- денцию очень часто меняться, поэтому приходилось ограничивать время жизни запросов. Сейчас большинство сайтов имеют статический адрес, который изменяется только при смене хостинга, а крупные порталы заре- зервировали себе собственные постоянные IP-адреса. Если вы не хотите

    Глава
    9
    304
    использовать кэширование IP-адресов, встроенное в squid, то можно уста- новить этот параметр в
    0
    ;
    ˆ
    negative_dns_ttl n minutes
    — промежуток времени в минутах, в преде- лах которого нужно кэшировать негативный ответ DNS-сервера. Если по имени не найден IP-адрес, то, возможно, проблема с сервером имен, а не с
    именем. Такие вопросы чаще всего решаются в течение 2—3 минут, по- этому отрицательный ответ не стоит держать в кэше дольше, иначе все это время клиенты не смогут обратиться к сайту. Я делаю этот параметр рав- ным
    1 или 0, чтобы пользователи увидели нужный сайт сразу после устра- нения проблемы;
    ˆ
    range_offset_limit n KB
    — порядок передачи клиенту неполных данных.
    Пользователь может запросить не весь файл, а лишь его часть. В этом слу- чае squid не может кэшировать такой файл, не скачав его целиком. Однако если запрошенная часть сильно смещена от начала файла, то это приведет к
    большой задержке перед тем, как squid начнет возвращать что-либо кли- енту
    . Для контроля над такими ситуациями и предусмотрен этот параметр: если смещение запрошенной части более параметра n
    , то прокси-сервер запросит у сервера в Интернете лишь необходимую пользователю часть файла и не будет его кэшировать. Если указать значение
    -1
    , то squid будет всегда загружать весь файл и кэшировать его содержимое. Если же указать значение
    0
    (по умолчанию), то, напротив, squid будет скачивать лишь запрошенные части файлов и кэшировать их, лишь если запрошен весь файл.
    9.3.4.
    Журналы
    В
    конфигурационном файле есть несколько параметров, влияющих на работу прокси
    -сервера с журналом (журналы легко читаются в любом текстовом редакторе
    ):
    ˆ
    cache_access_log файл
    — журнал, в котором сохраняется вся активность пользователей
    , а именно, HTTP- и ICP-запросы. По умолчанию этот пара- метр равен /var/log/squid/access.log;
    ˆ
    cache_log файл
    — файл для хранения основной информации о кэше. По умолчанию используется /var/log/squid/cache.log;
    ˆ
    cache_store_log файл
    — журнал операций над объектами в кэше (убраны или помещены, на какое время). По умолчанию используется файл
    /var/log/squid/store.log, но вы без проблем можете отключить этот журнал, указав в качестве значения none
    , потому что утилит для анализа сохраняе-

    Шлюз
    в
    Интернет
    305
    мых данных нет, да и вообще пользы в таких данных мало, а расходы на их сохранение присутствуют;
    ˆ
    log_mime_hdrs параметр
    — если в качестве параметра указано on
    , то в
    журнале access будут сохраняться заголовки MIME;
    ˆ
    useragent_log
    — журнал, в котором сохраняется поле
    User-agent заго- ловков
    HTTP. Смысла в этом поле нет, потому что его легко подделать, и
    ничего полезного журнал не даст, поэтому по умолчанию он не исполь- зуется
    В
    разд. 12.5 мы будем говорить о журналах различных сервисов Linux, а
    в разд. 12.5.4 мы подробно рассмотрим содержимое основного журнала squid — /var/log/squid/access.log.
    9.3.5.
    Разделение
    кэша
    Чтобы ваш сервер мог обмениваться запросами с другими squid-серверами, разделяя таким образом содержимое кэша, вы должны настроить соответст- вующий протокол. Для этого есть следующие директивы:
    ˆ
    icp_port n
    — номер порта, который будет использоваться для ICP- протокола
    . По умолчанию используется значение 3130. Если указать 0, то протокол будет заблокирован;
    ˆ
    htcp_port n
    — номер порта, который будет использоваться для ICP- протокола
    , работающего поверх TCP/IP. По умолчанию используется зна- чение
    4827. Если указать 0, то протокол будет заблокирован;
    ˆ
    cache_peer адрес тип http_порт icp_порт опции
    — сервер, с которым можно обмениваться информацией. В качестве адреса указывается имя
    (или адрес) сервера, с которым предполагается взаимодействие. Параметр http_порт определяет порт, на котором настроен HTTP-прокси, и соответ- ствует параметру http_port в файле конфигурации squid. Атрибут icp_порт определяет порт, на котором настроен протокол ICP, и соответ- ствует параметру icp_port в файле конфигурации squid удаленной систе- мы
    . В качестве типа может указываться одно из следующих значений:

    parent
    — старший в иерархии;

    sibling
    — равнозначный;

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

    Глава
    9
    306
    ˆ
    icp_query_timeout n
    — время ожидания в миллисекундах. Чаще всего прокси
    -серверы расположены в локальной сети с высокой скоростью дос- тупа
    , и ожидание более 2000 мс будет лишним. Иначе, если ответ не будет получен и придется обращаться в Интернет, пользователь ощутит боль- шую задержку;
    ˆ
    cache_peer_domain хост домен
    — разрешить для соседнего прокси- сервера
    , расположенного по адресу хост
    , работу только с указанными до- менами
    . Например, следующая строка позволит обращаться к соседнему прокси
    -серверу с адресом 192.168.2.20 (который должен быть описан ди- рективой cache_peer
    ) только за тем, что относится к домену .com: cache_peer_domain 192.168.2.20 .com
    Все остальные запросы не будут направляться на указанный соседний сервер
    , чтобы не перегружать его лишней работой. С помощью этого па- раметра можно настроить в сети несколько прокси-серверов, где каждый будет отвечать за свой домен.
    9.3.6.
    Дополнительные
    директивы
    Рассмотрим оставшиеся представляющие для нас ценность параметры, кото- рые я не смог отнести к определенным категориям:
    ˆ
    redirect_rewrites_host_header параметр
    — разрешение (
    on
    ) или запрет
    (
    off
    ) на изменение поля
    Host в заголовках запросов. Если изменение раз- решено
    , то сервер работает в анонимном режиме, иначе — в прозрачном.
    Анонимный режим требует дополнительных затрат, но позволяет исполь- зовать всего один IP-адрес для внешних соединений в сети любого разме- ра
    . Прозрачный режим работает быстрее, но каждый компьютер должен иметь собственный IP-адрес, подходящий для работы с Интернетом;
    ˆ
    redirector_access список
    — перечень запросов, проходящих через пе- ренаправитель
    (redirector). Перенаправитель — это небольшая программа, которая просматривает запрашиваемые URL и, возможно, заменяет их.
    Этот механизм позволяет реализовать довольно эффективный фильтр, за- прещающий
    , например, просмотр порнографии. Более подробную инфор- мацию можно найти в разд. 9.5.6 и в документации по squid. По умолча- нию перенаправителю отправляются все запросы;
    ˆ
    cache_mgr email
    — адрес E-mail, на который будет послано письмо в слу- чае возникновения проблем с работой прокси-сервера;
    ˆ
    append_domain домен
    — домен по умолчанию. Например, чаще всего пользо- ватели работают с адресами домена .com. Вполне логичным будет указать в
    директиве именно его (
    append_domain .com
    ). Если пользователь введет ад- рес redhat, то squid сам добавит имя домена, и направит на сайт redhat.com;

    Шлюз
    в
    Интернет
    307
    ˆ
    smtp_port n
    — номер порта, на котором нужно ожидать SMTP-запросы для отправки сообщений. Конечно же, SMTP — это такой протокол, кото- рый не требует кэширования, и работа через прокси-сервер не сэкономит трафик
    , но возможность может оказаться полезной, если нельзя устанав- ливать шлюз, а разрешен только прокси-сервер;
    ˆ
    offline_mode параметр
    — режим работы. Если параметр равен on
    , то squid будет взаимодействовать только с кэшем, и обращений к Интернету не будет
    . Если запрашиваемой страницы в кэше нет, то пользователь увидит ошибку
    . Чтобы squid мог обращаться к Интернету, необходимо устано- вить параметр off
    (установлено по умолчанию).
    9.4.
    Права
    доступа
    к
    squid
    Это самая больная тема для любого администратора. Да, и в squid тоже есть права доступа, и они также описываются в конфигурационном файле
    /etc/squid/squid.conf. Но мы рассматриваем права отдельно, потому что ос- новной упор делаем на безопасность. Именно поэтому этой теме отведен от- дельный раздел.
    9.4.1.
    Список
    контроля
    доступа
    Первое
    , с чем нам предстоит познакомиться, — это ACL (Access Control List, список контроля доступа), который предоставляет большие возможности для дальнейшей настройки прав доступа к сайтам. С помощью списка имен вы как бы группируете действия или пользователей. Используйте для этого сле- дующую директиву: acl имя тип параметр
    У
    данной директивы три параметра:
    ˆ
    имя
    — может быть любым, но лучше всего, если оно будет описывать вы- полняемые действия;
    ˆ
    параметр
    — задает шаблон или строку, смысл которой зависит от типа записи
    (второй аргумент);
    ˆ
    тип
    — может принимать следующие значения: src
    , dst
    , srcdomain
    , dstdomain
    , url_pattern
    , urlpath_pattern
    , time
    , port
    , proto
    , proxy_auth
    , method
    , browser
    , user
    . Рассмотрим основные типы, которые вам приго- дятся при формировании последнего параметра (шаблона):

    src
    — задаются IP-адреса пользователей;

    dst
    — указываются адреса серверов;

    Глава
    9
    308

    port
    — определяется номер порта;

    proto
    — описывается список протоколов (через пробел);

    method
    — указывается используемый метод, например
    POST
    ,
    GET
    и т. д.;

    proxy_auth
    — определяется список имен пользователей, значения разделяются пробелами. В качестве имени можно использовать
    REQUIRED
    , чтобы принимались любые действительные для сервера име- на
    (
    acl password proxy_auth REQUIRED
    );

    url_regex
    — устанавливается URL или регулярное выражение для
    URL;

    time
    — задается время в формате дни h1:m1-h2:m2
    . С помощью такой записи можно ограничить доступ только определенными днями недели и
    обусловленным временем. В качестве дней недели можно указывать:
    S
    — Sunday (воскресенье),
    M
    — Monday (понедельник),
    T
    — Tuesday
    (вторник),
    W
    — Wednesday (среда),
    H
    — Thursday (четверг),
    F
    — Friday
    (пятница),
    A
    — Saturday (суббота).
    В
    файле конфигурации уже описано несколько правил, которые готовы к ис- пользованию и в большинстве случаев не требуют вмешательства. Их вы мо- жете увидеть в листинге 9.1.
    Листинг
    9.1.
    Список
    acl-
    правил
    ,
    описанных
    по
    умолчанию
    в
    конфигурационном
    файле
    /etc/squid/squid.conf
    acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT

    Шлюз
    в
    Интернет
    309
    Это список прав доступа, необходимых для работы прокси-сервера.
    Рассмотрим первую строку. Здесь задается ACL с именем all
    . Так как ис- пользуется тип шаблона src
    , то этому списку принадлежат пользователи, у
    которых IP-адрес соответствует 0.0.0.0/0.0.0.0, то есть все пользователи.
    Следующая строка создает ACL с именем manager
    . Она определяет доступ к
    протоколу, потому что тип записи proto
    , а последний параметр задает про- токол
    — cache_object
    . И так далее.
    Давайте попробуем задать свою запись ACL. Допустим, в вашей сети есть
    10 компьютеров с адресами от 192.168.8.1 до 192.168.8.10 (маска подсети
    255.255.255.0), которым разрешен доступ к Интернету. Значит, всем осталь- ным нужно запретить.
    Уже при создании списка вы должны отталкиваться от идеи, что изначально доступ запрещен всем, и позволять только тем, кому это действительно нуж- но
    . Итак, строка для всех у нас уже есть, и ее имя all
    . Для списка из 10 ком- пьютеров создадим запись с именем
    AllowUsers
    , и ее описание будет сле- дующим
    : acl AllowUsers src 192.168.8.1-192.168.8.10/255.255.255.0
    Эта запись относится к типу src
    , значит, сюда включаются все компьютеры с адресами
    , указанными в качестве последнего параметра.
    9.4.2.
    Определение
    прав
    После описания списков можно указать права доступа для каждого из них с помощью следующих команд:
    ˆ
    http_access разрешение имя
    — определяет права доступа по протоколу
    HTTP. В качестве параметра разрешение можно указывать allow
    (доступ разрешен
    ) или deny
    (доступ запрещен). Последний аргумент имя
    — это имя
    ACL-записи. В следующем примере запрещается доступ по протоколу
    HTTP всем пользователям, кроме указанных в ACL-записи
    AllowUsers
    : http_access deny all http_access allow AllowUsers
    Указав права доступа для списка
    AllowUsers
    , мы одной строкой даем раз- решение для всех компьютеров, входящих в данный ACL. Таким образом, нет необходимости прописывать права каждому компьютеру в отдельно- сти
    . Это значительно облегчает жизнь администраторов в больших сетях.
    В
    предыдущем примере (см. разд. 9.4.1) мы описали список
    AllowUsers как список компьютеров с IP-адресами из диапазона 192.168.8.1—
    192.168.8.10. Если к прокси-серверу обратится компьютер с другим адре- сом
    , то в доступе будет отказано;

    Глава
    9
    310
    ˆ
    icp_access разрешение имя
    — описывает разрешение доступа к прокси- серверу по протоколу ICP. По умолчанию доступ запрещен для всех: icp_access deny all
    ˆ
    miss_access разрешение имя
    — описывает разрешение на получение от- вета
    MISSES. В следующем примере только локальным пользователям дано право получать ответ MISSES, а все остальные могут принимать только
    HITS: acl localclients src 172.16.0.0/16 miss_access allow localclients miss_access deny !localclients
    9.4.3.
    Аутентификация
    Защита по IP-адресу не гарантирует от его подделки злоумышленником.
    К
    тому же, остается вероятность, что кто-то получит физический доступ к
    компьютеру, имеющему доступ во всемирную сеть, и сделает нечто нераз- решенное
    Мне довелось работать в фирме, где каждому сотруднику было разрешено скачивать из сети определенное количество мегабайт. Проверка проходила через
    IP-адрес, и при превышении лимита руководство требовало от работ- ника покрыть расходы за сверхнормативный трафик. Это нормальная ситуа- ция
    , потому что работодатель не должен оплачивать бессмысленные прогулки сотрудника в Интернете. На работу приходят, чтобы выполнять свои обязан- ности
    , а не подыскивать обои для собственного компьютера.
    Однажды у некоторых работников оказалось большое превышение трафика.
    Вроде бы ничего удивительного, но настораживало то, что эти товарищи бы- ли в отпуске. Кто-то подделывал чужой адрес и использовал служебный Ин- тернет в своих целях.
    Чтобы вы не столкнулись с подобной ситуацией, необходимо привязываться не только к IP-адресу, но и строить дополнительную защиту через проверку имени пользователя и пароля. Для аутентификации необходимо определить следующие директивы:
    ˆ
    authenticate_program программа файл
    — задает программу аутентифи- кации
    (по умолчанию не используется) и файл паролей. Если вы хотите использовать традиционную программу аутентификации, то можно ука- зать следующую строку: authenticate_program /usr/lib/squid/ncsa_auth /usr/etc/passwd
    Путь к программе ncsa_auth в вашей системе может отличаться.
    Чтобы использовать возможности аутентификации прокси-сервера, у вас должна присутствовать хотя бы одна ACL-запись типа proxy_auth
    ;

    Шлюз
    в
    Интернет
    311
    ˆ
    authenticate_children n
    — определяет количество параллельно рабо- тающих процессов аутентификации. Один процесс не может производить проверку нескольких клиентов, поэтому если один пользователь проходит аутентификацию
    , то другие не смогут получить доступ к Интернету через сервер squid;
    ˆ
    authenticate_ttl n hour
    — срок (в часах) хранения в кэше результата аутентификации
    . В течение этого времени пользователь может работать без повторной проверки. По умолчанию установлен 1 час, но если введен неправильный пароль, то запись удаляется из кэша;
    ˆ
    authenticate_ip_ttl 0 second
    — связывает IP-адрес с аутентификаци- ей
    . Необходимо установить
    0
    , чтобы пользователи не могли воспользо- ваться одним и тем же паролем с разных IP-адресов. Некоторые пользо- ватели считают, что можно делиться паролем с друзьями, но не стоит им это разрешать, потому что за раздачу паролей должен отвечать только администратор
    Если в вашей сети есть dialup-пользователи, подключающиеся с помощью модема
    , то это значение можно увеличить до 60 секунд, чтобы при разры- ве связи была возможность перезвонить. Но обычно при dialup- подключении используются динамические IP-адреса, которые выдаются при каждом соединении, и нет гарантии, что после повторного звонка ад- рес сохранится;
    ˆ
    authenticate_ip_ttl_is_strict параметр
    — если параметр равен on
    , то доступ с других IP-адресов запрещен, пока время, указанное в
    authenticate_ip_ttl
    , не выйдет.
    В
    Н И МА Н И Е
    !
    Аутентификация не работает
    , если squid настроен на работу в
    прозрачном режиме
    9.5.
    Замечания
    по
    работе
    squid
    Сейчас нам предстоит немного поговорить о некоторых вопросах безопасно- сти сервиса squid и дополнительных возможностях, которые могут ускорить работу в Интернете.
    9.5.1.
    Безопасность
    сервиса
    Когда я впервые знакомился с документацией на squid, то мне очень понравились следующие два параметра: cache_effective_user и cache_effective_group
    Если squid запущен от имени администратора root, то идентификаторы поль-

    Глава
    9
    312
    зователя и группы будут заменены на указанные в этих параметрах. По умол- чанию установлено значение идентификатора squid и для пользователя, и для группы
    : cache_effective_user squid cache_effective_group squid
    Таким образом, squid не будет работать с правами root, и при попытке сде- лать это сервис сам понизит свои права до squid. Не стоит вмешиваться. Сер- вису squid не имеет смысла давать большего, потому что ему достаточно прав только на работу с директорией кэша.
    9.5.2.
    Ускорение
    сайта
    Сервис squid может ускорить работу определенного сайта, функционируя как httpd-акселератор. Для этого необходимо указать как минимум три парамет- ра
    : адрес ускоряемого сервера, который надо кэшировать, его порт и атрибу- ты сервера, который надо ускорять. Это делается с помощью следующих директив
    :
    ˆ
    httpd_accel_host адрес
    — адрес реального сервера;
    ˆ
    httpd_accel_port порт
    — порт WEB-сервера. Чаще всего это порт по умолчанию
    (он равен 80), если не указан другой;
    ˆ
    httpd_accel_uses_host_header параметр
    — заголовок HTTP включает в
    себя поле Host. Сервер squid не проверяет Host, и это может оказаться большой дырой в безопасности. Разработчики рекомендуют отключать эту директиву
    , указав в качестве параметра значение off
    . Включать ее необ- ходимо
    , если squid работает в прозрачном режиме;
    ˆ
    httpd_accel_with_proxy параметр
    — флаг использования кэширования страницы для дополнительного повышения скорости (
    on
    /
    off
    ).
    9.5.3.
    Маленький
    секрет
    User Agent
    Многие статистические системы не учитывают или не пускают к себе поль- зователей
    , запросы которых содержат пустое значение в поле User Agent.
    Именно так определяется, что вы работаете через прокси-сервер.
    Опять случай из собственной практики. Я снова вспоминаю фирму, где мне пришлось работать 4 года, и защита была организована по IP-адресу. Мой отдел занимался автоматизацией производства, и в нем работали электрон- щики
    , а я был единственный программист и администратор в одном лице.
    Доступ в Интернет был разрешен только мне, начальнику отдела и его замес- тителю
    . Через несколько часов доступ имели все сотрудники отдела. Как это

    Шлюз
    в
    Интернет
    313
    произошло
    ? Решение очень простое — я поставил на свой компьютер про- кси
    -сервер, к которому могли подключаться без аутентификации мои сослу- живцы
    , а он уже переправлял эти запросы корпоративному прокси-серверу.
    Так как все запросы шли от меня, то главный прокси-сервер не возражал.
    На первый взгляд решение идеальное, но тут есть один изъян. Да, это поле
    User Agent, которое становится пустым при прохождении пакетов через мой squid-сервис. Но поле можно задать вручную в конфигурационном файле.
    Для этого существует директива fake_user_agent
    . Например, следующая строка может эмулировать запросы, как будто они идут от браузера Netscape: fake_user_agent Netscape/1.0 (CP/M; 8-bit)
    9.5.4.
    Защита
    сети
    Сервис squid может быть как средством защиты сети, так и орудием проник- новения хакера в сеть. Чтобы внешние пользователи не могли задействовать прокси
    -сервер для подключения к компьютерам локальной сети, необходимо добавить в конфигурационный файл следующие строки: tcp_incoming_address внутренний_адрес tcp_outgiong_address внешний_адрес udp_incoming_address внутренний_адрес udp_outgiong_address внешний_адрес
    В
    данном случае внутренний_адрес
    — это адрес компьютера с установлен- ным squid, сетевое соединение которого направлено на вашу локальную сеть, а
    внешний_адрес
    — это адрес сетевого соединения, направленного в Интер- нет
    . Если неправильно указать адреса, то хакер сможет подключаться к ком- пьютерам локальной сети, находясь за ее пределами. Вот пример ошибочного конфигурирования squid-сервиса: tcp_incoming_address внешний_адрес tcp_outgiong_address внутренний_адрес udp_incoming_address внешний_адрес udp_outgiong_address внутренний_адрес
    9.5.5.
    Борьба
    с
    баннерами
    и
    всплывающими
    окнами
    В
    фирме, где я работал, появился новый сотрудник, и в первую неделю мы ощутили увеличение трафика. Это бывает со всеми, потому что любой новый пользователь
    Интернета начинает смотреть все страницы подряд. Со време- нем интерес стихает, и трафик понижается.

    Глава
    9
    314
    Мы уже говорили о том, что на любом сайте бóльшую часть трафика отнима- ет графика. В большинстве браузеров отображение картинок можно отклю- чить
    , но после этого путешествие будет не очень удобным. Некоторые сайты без графики теряют информативность, и с ними сложнее работать, поэтому отказаться совсем от этого режима невозможно.
    Но есть графика, которая надоедает, раздражает и не несет полезной инфор- мации
    , а главное, от нее можно избавиться. Я говорю про баннеры. Давайте рассмотрим
    , как их можно отключить еще на уровне прокси-сервера. Для этого сначала добавим в файл squid.conf следующие правила: acl banners_regex url_regex "/usr/etc/banners_regex" acl banners_path_regex urlpath_regex "/usr/etc/banners_path_regex" acl banners_exclusion url_regex "/usr/etc/banners_exclusion"
    Первая строка создает ACL-список с именем banners_regex типа url_regex
    , который позволяет сравнивать полный URL-адрес. В последнем параметре определен файл /usr/etc/banners_regex, в котором будут указываться нужные адреса
    . Нас интересуют URL баннерных систем, и вы можете поместить их в
    этот файл.
    Вторая строка создает ACL-список с именем banners_path_regex типа urlpath_regex
    . В последнем параметре снова указан файл /usr/etc/banners_ path_regex, в котором вы должны описывать пути URL, которые впоследст- вии мы запретим.
    Третья строка схожа с первой, но имеет имя banners_exclusion и связана с
    файлом /usr/etc/banners_exclusion. В первых двух файлах вы должны описывать пути или шаблоны, по которым потом будут обрезаться баннеры.
    Но бывают случаи, когда можно промахнуться и отсечь вполне полезную информацию
    . Если найден ошибочный путь, то его можно записать в этот файл
    , и баннер будет загружен.
    Теперь добавляем еще две строки после описания ACL-записей: http_access deny banners_path_regex !banners_exclusion http_access deny banners_regex !banners_exclusion
    Обе директивы имеют один и тот же смысл — запрещается загрузка по адресам
    , прописанным в списке banners_path_regex или banners_regex
    , если адрес не входит в исключение, описанное в файле ACL-списка banners_exclusion
    Рассмотрим фрагмент содержимого файла /usr/etc/banners_regex:
    ^http://members\.tripod\.com/adm/popup/.+html
    ^http://www\.geocities\.com/ad_container/pop\.html

    Шлюз
    в
    Интернет
    315
    Напоминаю
    , что в этом файле находятся URL-пути для сравнения, и все ад- реса
    , которые им соответствуют, будут отфильтрованы.
    Шаблону из первой строки соответствует
    , например
    , адрес
    http://members.tripod.com/adm/popup/popup.html, так что он не будет за- гружен
    . Так просто. И пользователи больше не увидят всплывающие окна с
    сайта tripod.com. Если вы знакомы с регулярными выражениями, то сможе- те создать подобные записи для любой баннерной системы и обрезать самые замысловатые пути надоедливых картинок. Я не буду затрагивать регуляр- ные выражения, потому что это тема такая большая, что требует отдельной книги
    При борьбе с баннерами будьте готовы, что "обрезание" не всегда помогает, всплывающие окна могут снова появиться через определенное время. Это связано с тем, что баннеры — просто реклама, и позволяют зарабатывать деньги на существование сайта. Особо одаренные администраторы ищут лю- бые возможные пути для того, чтобы ваша система не смогла избавиться от рекламы
    . Для этого постоянно изменяются адреса, чтобы регулярное выра- жение не сработало.
    9.5.6.
    Подмена
    баннера
    Пока что мы запретили загрузку баннеров или всплывающих окон. Но после этого
    WEB-страницы перестанут быть привлекательными. Чтобы этого не произошло
    , можно заменять баннеры на свои картинки, которые хранятся на сервере
    , и отпадет необходимость грузить их из Интернета.
    Для решения этой задачи очень хорошо подходит перенаправитель (redirector).
    Для сервиса squid это внешняя программа, которая подменяет адреса.
    Например
    , если сайту необходимо загрузить баннер, и ваша программа смог- ла определить такую попытку, то redirector подменит адрес и вместо баннера загрузит то, что укажете вы.
    Есть только одна проблема — в ОС нет, и не может быть готовой программы.
    Ее необходимо написать. Для этого подойдет любой язык программирования, а
    я покажу вам пример, реализованный на языке Perl. Если вы умеете про- граммировать на этом языке, то способ с redirector понравится вам больше, чем простой запрет через ACL.
    Пример классической программы redirector можно увидеть в листинге 9.2.
    Я
    постарался максимально упростить его, чтобы вам легче было адаптиро- вать сценарий под свои задачи.

    Глава
    9
    316
    Листинг__9.2._Сценарий_на_языке__Perl_для_подмены_баннеров_и_закрытия_всплывающих'>Листинг
    9.2.
    Сценарий
    на
    языке
    Perl
    для
    подмены
    баннеров
    и
    закрытия
    всплывающих
    окон
    #!/usr/bin/perl
    $| = 1;
    # Укажите URL на вашем WEB-сервере, где лежат картинки
    $YOURSITE = 'http://yourserver.com/squid';
    $LOG = '/usr/etc/redirectlog';
    $LAZY_WRITE = 1; if ($LOG) { open LOG, ">> $LOG"; unless ($LAZY_WRITE)
    { select LOG ;
    $| = 1 ; select STDOUT;
    }
    }
    @b468_60 = qw ( www\.sitename\.com/cgi/
    # Добавьте сюда описания URL-адресов с баннерами
    # размером 468х60
    );
    @b100_100= qw ( www\.sitename\.com/cgi/
    # Добавьте сюда описания URL-адресов с баннерами
    # размером 100х100
    );
    @various = qw ( www\.sitename\.com/cgi/
    # Добавьте сюда описания URL-адресов с нестандартными
    # размерами баннера
    );

    Шлюз
    в
    Интернет
    317
    @popup_window = qw (
    ^http://members\.tripod\.com/adm/popup/.+html
    ^http://www\.geocities\.com/ad_container/pop\.html
    ^http://www\.geocities\.com/toto\?
    # Добавьте сюда описания URL-адресов, с которых
    # выскакивают всплывающие окна
    );
    # Описание расположения картинок
    $b468_60 = "$YOURSITE/468_60.gif";
    $b100_100 = "$YOURSITE/100_100.gif";
    $various = "$YOURSITE/empty.gif";
    $closewindow = "$YOURSITE/close.htm"; while (<>)
    {
    ($url, $who, $ident, $method) = /^(\S+) (\S+) (\S+) (\S+)$/;
    $prev = $url;
    # Проверка баннера 468x60
    $url = $b468_60 if grep $url =

    m%$_%, @b468_60;
    # Проверка баннера 100x100
    $url = $b100_100 if grep $url = m%$_%, @b100_100;
    # Проверка баннера произвольного размера
    $url = $various if grep $url = m%$_%, @various;
    # Всплывающее окно
    $url = $closewindow if grep $url = m%$_%, @popup_window;
    # Отдельный сайт, не внесенный в список в начале файла
    $url = "$YOURSITE/empty.gif" if $url = m%hitbox\.com/Hitbox\?%; if ($LOG and $url ne $prev)
    { my ($sec, $min, $hour, $mday, $mon, $year) = localtime; printf LOG "%2d.%02d.%2d %2d:%02d:%04d: %s\r\n",

    Глава
    9
    318
    $mday, $mon + 1, $year + 1900, $hour, $min, $sec,
    "$who $prev > $url";
    } print "$url $who $ident $method\n";
    } close LOG if $LOG;
    Сохраните эту программу в файле /usr/etc/redirector и установите для squid права на его исполнение. После этого добавьте в файл squid.conf следующую строку
    : redirect_program /usr/local/etc/squid/redirector
    Чтобы эта программа заработала, создайте на своем WEB-сервере файлы со следующими именами:
    ˆ
    468_60.gif — картинка размером 468×60;
    ˆ
    100_100.gif — картинка размером 100×100;
    ˆ
    empty.gif — картинка, которая будет заменять нестандартные баннеры.
    Лучше всего ее сделать размером 1×1 пиксел, чтобы она не испортила ди- зайн сайта;
    ˆ
    close.htm — файл HTML, который будет закрывать всплывающие окна.
    В
    нем нужно поместить всего лишь функцию, которая будет закрывать окно
    . Для этого используется функция JavaScript window.close()
    . Пример содержимого файла показан в листинге 9.3.
    Все эти файлы должны лежать на WEB-сервере в одной директории. Не за- будьте в сценарии (в переменной
    $YOURSITE
    ) указать правильный путь к это- му каталогу.
    Я
    постарался снабдить код в листинге 9.2 комментариями. Если у вас есть опыт программирования на Perl, то дальнейшие действия вы выполните без проблем
    Листинг
    9.3.
    Пример
    JavaScript-
    файла
    ,
    закрывающего
    всплывающее
    окно
    1   ...   20   21   22   23   24   25   26   27   ...   35


    написать администратору сайта