3 кнопки, котоpые потpясли DOS.

Unix Dos Linux Windows Os/2 Qnx Beos Gios Hard Etc Link Форум (тестовый режим) Гостевая Юмор Soft Связь
 
 
 

Etc.: Proxy сервер под Linux. Squid

Содержание

redirector, как средство оптимизации

redirector - внешняя программа (небуфферизованный в/в), в цикле читает с stdin URL и пишет на stdout преобразованный URL (или пустую строку, если нет преобразований). Преобразование происходит после проверки ACL, но до проверки на присутствие в кеше. Формат входной строки (поля, разделенные пробелами):

  1. URL

  2. ip-address/fqdn (если fqdn нет, то "-")

  3. ident ("-", если нет)

  4. method (GET, POST, ...)

 

В качестве примера использования редиректора для уменьшения трафика в поставке приводится редиректор, производящий нормализацию URL (приведение к стандартному виду), что увеличивает вероятность попадания в кеш. А также редиректор преобразующий запросы на загрузку всяких там IE, Netscape и пр. с различных зеркал в запросы к локальному www-серверу (автор клянется, что это дает 15%). См. также про борьбу с баннерами.

Примеры redirectors:

 

Борьба с баннерами

Только не будем спорить о морали :) Но и в transparent режиме этого делать не надо. Поставьте себе локальный прокси и радуйтесь. Кстати, теми же методами можно бороться со счетчиками и порно.

Превращение банеров-картинок в рваные прямоугольники:

  1. Насобирать "вредителей" (в виде регулярных выражений)
  2. Заводим файлы в /usr/local/squid/etc:
    • banners_path_regex - по одному регулярному выражению на строку
    • banners_regex - по одному регулярному выражению на строку
    • banners_exclusion (это строки, трактуемые в предыдущих файлах как баннеры, но их лучше не трогать - JavaScript всякие)
  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_exclusion
    

 

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

  1. Насобирать "вредителей" (в виде регулярных выражений)
  2. На своем http-сервере завести "заменитель" рекламных картинок void.gif
  3. Настраиваем redirector в squid.conf (если он уже используется, то добавить к старому; м.б. еще настроить redirector_access):
    redirect_program /usr/local/squid/bin/banners.pl
  4. banners.pl (perl выбран для простоты демонстрации):
       #!/usr/bin/perl (или где perl живет)
       $|=1;
       while (<>) {
       s@регулярное-выражение@http://www.nospam.org/nospam.gif@;
       print;}
    

 

К сожалению, использование "http_access deny" для блокировки JavaScript программ не получается (броузер не показывает страницу совсем). Поэтому приходится заменять реальный скрипт через redirect (см. выше) на что-нибудь безобидное (и каждый случай обрабатывать отдельно :(. Например, если исходный скрипт открывал окно с рекламой (<script src=...>), то вместо него подсовываем

   <html><head>
   <script language="JavaScript"><!-- window.close(); //--></script>
   </head><body></body></html>

 

вместо tx3 (если он встроен страницу с помощью SSI, то не поможет, да и зачем тогда его резать?):

   document.write("&nbsp;");

 

Ссылки:

 

squidGuard

squidGuard позволяет фильтровать и переадресовывать запросы по именам доменов, URL и регулярным выражениям. Позволяет группировать пользователей по IP адресам с заданием различных правил для различных групп с указанием времени суток. Возможно задание списка "хороших" сайтов. Домены и URL могут храниться в текстовых файлах или в формате Berkeley DB. Не фильтрует содержимое запросов и встроенные скрипты. GPL. Можно использовать бесплатно в любых целях, кроме продажи. К сожалению не изменялся с 2001 года (хотя есть заплатки от последователей и последователей).

Устанавливаю из готового пакета (/usr/bin/squidGuard, /etc/squid/squidguard.conf, /etc/logrotate.d/squidguard, /var/log/squidguard/, /usr/share/doc/squidguard-1.2.0/), пакета с чёрным списком (/etc/squid/squidguard-blacklists.conf; /etc/logrotate.d/squidguard-blacklists; /etc/squid/local/bad/; /etc/squid/local/good/; /var/lib/squidguard/: ads/, adult/, aggressive/, audio-video/, drugs/, forums/, gambling/, hacking/, local, mail/, /proxy/, violence/, warez/). Из исходных текстов устанавливается обычным путём (./configure; make; make install), требуется Berkeley DB 2.x. После установки необходимо настроить /etc/squid/squidguard-blacklists.conf и просмотреть входящие в комплект чёрные списки. Настроить squid.conf:

redirector_bypass on
redirect_program /usr/bin/squidGuard -c /etc/squid/squidguard-blacklists.conf
acl squidGuard ...
redirector_access allow squidGuard

 

Опции squidGuard:

  • -d (вывод ошибок на stderr)

  • -c имя-файла-настроек

  • -t yyyy-mm-ddTHH:MM:SS (?)

  • -C имя-файла | all (преобразовать текстовый файл в .bd, не забыть указать "-c имя-файла-настроек")

  • -u (слить изменения из файлов .diff в .bd)

 

Файл настройки описывает поименованные группы интервалов времени (используется при описании группы клиентов), группы пользователей (по IP адресам), группы URL (ссылки на текстовые файлы и БД), группы правил переадресации и группы ACL. Комментарии начинаются с '#'; имеется большой список зарезервированных слов (в частности: anonymous, user, userlist); нельзя ссылаться на описания групп вперёд; описания групп начинаются с

тип-группы имя-группы {

и завершаются '}'. В начале файла указываются имена используемых файлов:

  • logdir имя-каталога (в этом каталоге будут лежать файлы squidGuard.error и squidGuard.log; имя-каталога также используется как базовое имя для имён файлов, описываемых в директиве log)

  • dbhome имя-каталога (имя-каталога используется как база для имён файлов, со списками доменов, выражений и URL

 

Описание интервала времени (имя типа: time) состоит из перечня спецификаций (каждое на отдельной строке, при перекрытии интервалы объединяются), следующих видов (вместо года, месяца или дня можно указать '*'):

  • weekly sunday [...] [HH:MM-HH:MM]

  • date YYYY-MM-DD [...] [HH:MM-HH:MM ...]

  • date YYYY-MM-DD-YYYY-MM-DD [HH:MM-HH:MM ...]

 

Описание группы клиентов (имя типа: source) состоит из перечня адресов клиентов в следующих форматах (файл содержит на каждой строке IP адрес без ключевого слова "ip"; использование доменов требует log_fqdn в squid.conf; имена пользователей определяются по протоколу ident; спецификации одного типа объединяются, разных типов - пересекаются; группы могут пересекаться - приоритет имеет первая по тексту; имя журнала берётся относительно logdir):

  • ip адрес-хоста ...

  • ip адрес-сети/длина-маски ...

  • ip адрес-сети/маска ...

  • ip адрес-адрес ...

  • iplist имя-файла

  • domain имя-хоста ...

  • user имя-пользователя ...

  • userlist имя-файла

  • logfile имя-файла

 

Описание группы клиентов может иметь условие по времени:

source имя-группы-клиентов [within|outside имя-интервала-времени] {
  ...
} else {
  ...
}

 

Описание группы URL (имя типа: destination) состоит из перечня URL в следующих форматах (спецификации любых типов объединяются; группы могут пересекаться - приоритет имеет первая в директиве pass; в списках необходимо использовать только строчные буквы; включение имени домена включает все хосты во всех поддоменах этого домена; при включении URL в список из него необходимо удалить "http://www.", ":8080" и завершающее имя или "/"; в строке списка URL можно в качестве второго поля указать новый URL для перенаправления (это работает быстрее, чем rewrite); использование регулярных выражений сильно замедляет работу; имя журнала берётся относительно logdir):

  • domainlist имя-файла

  • urllist имя-файла

  • expressionlist имя-файла

  • redirect [302:]URL

  • logfile имя-файла

 

Описание группы URL может иметь условие по времени:

destination имя-группы [within|outside имя-интервала-времени] {
  ...
} else {
  ...
}

 

Описание группы правил переадресации (имя типа: rewrite) состоит из перечня правил замены URL в следующих форматах

  • s@исходное-регулярное-выражение@результат@[irR]

    • i - нечувствительность к регистру

    • r - переадресация будет видима клиенту (через код HTTP 302, Moved Temporarily)

    • R - переадресация будет видима клиенту (через код HTTP 301, Moved Permanently)

    logfile имя-файла

 

Описание группы правил переадресации может иметь условие по времени:

rewrite имя-группы [within|outside имя-интервала-времени] {
  ...
} else {
  ...
}

 

Описание группы ACL (ровно одна непоименованная группа) содержит для каждой группы пользователей правила поведения фильтра в формате

имя-группы-клиентов [within|outside имя-интервала-времени] {
  pass [!]имя-группы-URL ...
  [rewrite имя-группы-переадресации]
  [redirect [301:|302:]новый-адрес]
} else {
  ...
}

 

Имеется специальная группа пользователей default, в которую входят пользователи, не вошедшие ни в одну из остальных групп или вошедшие в группу, не имеющую ACL; здесь же задаются правило переадресации для групп клиентов, не имеющих собственных правил переадресации.

Имеется следующие встроенные группы URL

  • any - соответствует любому URL (эквивалент ".*")

  • all - синоним any

  • none - эквивалент !any

  • in-addr - "^[^:/]+://[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}($|[:/])"

 

Директива redirect (если URL блокируется фильтром, то какой-нибудь redirect должен быть обязательно определён) позволяет производить подстановку переменных (в поставке имеется шаблон squidGuard.cgi для создания красивых страниц с объяснением):

  • %a - IP адрес клиента

  • %n - имя хоста клиента

  • %i - имя пользователя согласно ident

  • %s - имя группы клиентов

  • %t - имя группы URL

  • %u - URL

  • %p - REQUEST_URI

 

Первый же сайт, на который я зашёл (rambler.ru), оказался в списках ads и adult.

Приемы конфигурации

Простейшие случаи иерархии. Основной squid с консервативными настройками и вспомогательный с агрессивными настройками (антибаннер ;).

Консервативный:

  • ICP выключен

  • никаких соседей

  • maximum_object_size побольше

  • большой объем кеша на диске

  • стандартные (почти) настройки refresh_pattern

  • transparent proxy

Агрессивный:

  • ICP выключен

  • cache_peer основной parent 3128 3130 no-query default # если не нашел объект в своем кеше, то обращаться к parent, а не к источнику
    prefer_direct off

  • hierarchy_stoplist - пустой

  • maximum_object_size побольше

  • очень небольшой объем кеша на диске (пробовал поставить нулевой размер и cache_peer ... proxy-only, но возникают проблемы при обработке ошибок)

  • собственно агрессивная настройка:

    • redirect

    • refresh

    • acl, http_access, deny_info

Закрыть доступ к какой-то информации для клиентов

badobjects - это произвольное имя ACL; ERR_ACCESS_DENIED - имя файла в /usr/lib/squid/errors/English или в подобном месте, вместо этого файла можно поставить для каждой ситуации свой файл; воздействие http_access зависит от места, в которое его поставить; если squid получает от parent TCP_DENIED, то он лезет напрямую:

  • acl badobjects url_regex регулярное-выражение

  • http_access deny badobjects

  • deny_info ERR_ACCESS_DENIED badobjects

Шаблон для борьбы с RealPlayer

http://[^/]+/SmpDsBhgRl

Как удалить объект из кеша

В squid.conf:

acl PURGE method purge
acl localhost src 127.0.0.1
http_access allow purge localhost
http_access deny purge

Теперь для каждого удаляемого объекта: client -m PURGE URI

Далее >>>

 

© Krio, Xbyte, BooM
2004-2012

id-sign