Настройка перенаправления в squidGuard 1.4.

Настройка перенаправления в squidGuard 1.4.

Если в вашей сети установлена связка Squid+squidGuard для URL-фильтрации на основе блэклистов (см. Настройка URL-фильтраций на локальном компьютере (Squid+SquidGuard)Настройка iptables на сервере локальной сети), перед вами встает несколько вопросов:

  • Как обрабатывать запросы к заблокированным блэклистами доменам?
  • Если перенаправлять их на какой-либо домен, то как предоставить пользователям возможность обратной связи (например, при помощи удобной отсылки запроса на исключение домена из блэклиста)?

На эти вопросы отвечает эта статья.

Сформулируем задачу:

если пользователь из защищаемой сети, запрашивает домен, находящийся в блэклисте, его запрос должен быть перенаправлен на специальный поддомен blocked.mysite.com, на котором размещена страница блокировки.

Приступим к решению:

Для перенаправления заблокированного ресурса на страницу блокировки (например, blocked.mysite.com) необходимо проделать следующие шаги:

  1. внести в белый список squidGuard (while list) домен страницы блокировки;
  2. настроить список контроля доступа (acl) с указанием, куда будет происходить редирект;
  3. создать (или отредактировать) промежуточный файл /var/www/blocked.php

 Итак, приступим:

Настройка белого списка (white list):

  1. в домашней директории баз squidGuard (в файле конфигурации она хранится в переменной dbhome) создаем файл со списком ресурсов, которые мы хотим посещать независимо от блокируемого списка доменов и вносим в него:

    blocked.mysite.com

    Прим.: так же необходимо ввести список ip-адресов из локальной сети, потому что если в настройках squid3 выключена возможность обойти прокси введением ip-адреса ресуса (url_rewrite_bypass off), то вы не сможете попасть на компьютеры локальной сети.

  2. в файле конфигурации squidGuard (/etc/squid/squidGuard.conf) настраиваем ресурс, в который мы пропишем путь до только что созданного файла белого списка:

    dest white_dest {
        domainlist digincore/white
    }

Хинт: в URL-фильтрации является весьма полезной практикой использование не только блэклистов, но и блокирование URL по наличию "жестких слов" в этом случае вышеописанные действия по помещению домена в белый список являются необходимыми.

Настраиваем перенаправление заблокированного ресурса на страницу блокировки.

в конфигурационном файле squidGuard необходимо настроить список контроля доступа (acl), в котором мы укажем, какие из уже созданных нами ресурсов проверять по  блэклисту, а какие нет. В нем же указывается путь до страницы, на которую мы хотим перенаправлять запросы на заблокированные домены:

#

# ACL RULES:
#
acl {
   default {
      pass white_dest !digincore_bl !in-addr all
      redirect http://localhost/blocked.php?u=%u
   }
}

Как видно из примера, squidGuard теперь будет пропускать все домены из белого списка (white в параметре pass) и блокировать содержание доменов, находящихся в нашем блэклисте (!digincore_bl). Также, ему указано блокировать доступ по ip-адресу (!in-addr). В самом конце разрешается доступ ко всем остальным доменам (all).

Ниже в параметре redirect указываем путь, куда мы хотим перенаправить запросы к заблокированному контенту. Здесь можно указать любой ресурс на ваше усмотрение, в нашем случае указан файл /var/www/blocked.php с входящим параметром в который мы передаем url (про параметр %u подробнее смотрите на на http://www.squidguard.org/Doc/redirect.html) на который пытается зайти пользователь.

Cоздаем файл /var/www/blocked.php со следующим содержанием:

 <?php 
       header("Location:  http://blocked.mysite.com/?url=".$_GET['u']);
  ?>

Что проделывает данный скрипт: он получает введенный в качестве параметра запроса url ($_GET['u']) и подставляет его в качестве параметра в страницу финального назначения (http://blocked.mysite.com/?url=), куда и происходит редирект.

Перезапускаем squidGuard и squid3: 

squidGuard -d -C all
/etc/init.d/squid3 restart

Прим.: Вышеописанные манипуляции необходимы для того, чтобы страница финального редиректа отображалась корректно в браузере пользователя. При прямом редиректе, т.е. если в настройках acl вместо 'redirect http://localhost/blocked.php?u=%u' указать 'redirect http://blocked.mysite.com/?domain=%u', то в адресной строке браузера по прежнему будет находится изначально запрашиваемый адрес сайта, а не blocked.mysite.com, что приведет к некорректному отображению картинок и непредсказуемой работе функционала страницы.

Если же мы используем для редиректа промежуточный файл, браузеру будет предоставлен новый адрес и отображение финальной страницы будет корректным. Например, при попытке зайти на ресурс sex.com, в адресной строке браузера появится следующая ссылка http://blocked.mysite.com/?url=http://sex.com/

Ну и в завершение. Для коммерческих пользователей мы предоставляем код страницы блокировки с каптчей и возможностью указав емайл, получить ответ о результатах проверки нашими экспертами заблокированного сайта. Разместив подобное решение на своем домене, заказчик получает возможность решить задачу поддержки качества фильтрующего решения посредством обработки запросов своих пользователей на исключение сайта из блэклистов.