ACCESS CONTROLS Фильтрация трафика может осуществляться средствами squid с помощью ACL и директив http_access.

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

В squid.conf в разделе ACCESS CONTROLS добавляем несколько строк:

# ACCESS CONTROLS
# -----------------------------------------------------------------------------
# Определяем рабочее время: с понедельника по пятницу с 9 до 17.
acl WORK_TIME_MAIN time MTWHF 9:00-17:00
# Определяем дополнительное рабочее время: с понедельника по пятницу с 8 до 18.
acl WORK_TIME_EXTD time MTWHF 8:00-18:00
#       Просто "хорошие" сайты -- для "обхода" фильтров
acl GOOD_URL-sites      url_regex -i "/usr/local/etc/squid/lst/address-allow"

###     Запрещенные расширения
##      Audio-video
acl NOT_LOAD_audio-video urlpath_regex -i "/usr/local/etc/squid/lst/ext-media-deny"
##      Aрхивы
acl NOT_LOAD_archivefile urlpath_regex -i "/usr/local/etc/squid/lst/ext-arc-deny"

# Запрещаем аудио-видео с 8:00 до 18:00
http_access deny NOT_LOAD_audio-video                 WORK_TIME_EXTD

# Запрещаем закачку архивов (кроме "хороших" сайтов) с 9:00 до 17:00
http_access deny NOT_LOAD_archivefile !MONA_URL-sites WORK_TIME_MAIN 

Создаем файлы-списки ACL. В address-allow содержались строки

referat.*\.zip$
и т.д. и т.п.

В ext-media-deny:

\/.*\.avi$
\/.*\.mp3$
\/.*\.divx$

В ext-arc-deny:

\/.*\.zip$
\/.*\.rar$
\/.*\.arj$

Недостатки такой системы:

К "плюсам" можно отнести:

У меня эта схема исправно проработала более двух лет.


Технология фильтрации Запросы от клиента обрабатываются в следующей последовательности:

  1. SQUID проверяет все ACL-запреты на совпадение с полученным URL_от_клиента. Если есть совпадение, то пользователь получает сообщение, описанное выше, с кодом TCP_DENIED/403. Все. Если же совпадений нет, и включен редиректор, то переходим к п. 2).
  2. Редиректор, обрабатывает данные, полученные от squid-a, и если у него нет "претензий", squid-у возвращается пустая строка. Если же "претензии" есть, редиректор возвращает сквиду URL_от_редиректора.
  3. SQUID, получив пустую строку, продолжает работать с URL_от_клиента и клиент получает то, что "попросил". В противном случае, клиент получит то, что ему "разрешил" редиректор, т.е. URL_от_редиректора.

Примечание. В access.log в любом случае записыватся URL_от_клиента!!! Определить что же именно получил клиент, можно анализируя логи редиректора, или, если access.log ведется стандартным способом, по IP-адресу хоста, на который ссылается URL_от_редиректора. Т.е. проверить откуда пришел ответ на самом деле.

Вот только это была именно "фильтрация", а не редиректинг. ПОЭТОМУ вернемся к редиректорам.


Форматы access.log Стандартный формат. Задается в squid.conf директивой:

emulate_httpd_log off

Что пишется (пример):

  1) 11086437012.162 - время окончания запроса, в мсек 
  2) 16237           - время запроса, в мсек 
  3) 10.100.1.7      - IP адрес клиента 
  4) TCP_MISS/200    - тип / код возврата http 
  5) 4450            - размер, байт 
  6) GET             - метод 
  7) http://www.yadro.ru/show/51/banner/37.gif - URL
  8) user7           - логин (если есть) или "-" 
  9) DIRECT/www.yadro.ru — иерархия / хост, откуда пришел ответ 
 10) image/gif       - MIME тип/подтип 

Эмуляция httpd. Включается там же, в squid.conf директивой:

emulate_httpd_log on

Что пишется (пример):

  1) 10.100.1.7      - IP-адрес клиента
  2) user7           - логин (если есть) или "-"
  3) -               -
  4-5) [05/Jun/2004:15:08:49 +0300] - [местные_дата:время часовой_пояс]
  6-8) "GET http://www.news.dn.ua/Images/kursi.gif HTTP/1.1" - "метод URL протокол"
  9) 200             - код возврата http
 10) 3242            - размер, байт
 11) TCP_MISS:FIRST_UP_PARENT - тип_http:иерархия 

Как видно из примера, в первом случае мы получаем больше информации , а во втором "читабельное" время. Кому что нужнее...