Настройка фильтрации сайтов через прокси

Для настройки фильтрации сайтов в Calculate Directory Server можно использовать пакет SquidGuard.

SquidGuard — это программа для переадресации("редиректор"), с которой взаимодействует прокси-сервер squid. Прокси сервер передает запрос на SquidGuard, тот в соответствии со своими фильтрами принимает решение требуется перенаправление или нет и затем возвращает результат прокси-серверу.

Настройка прокси-сервера Squid

Настройка производится следующим образом. Для начала нам необходим работающий прокси-сервер squid, базовый рабочий конфигурационный файл /etc/squid/squid.conf выглядит следующим образом:

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

acl localnet src 192.168.5.0/8  # RFC1918 internal network

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
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 Safe_ports port 901         # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager

http_access allow purge localhost
http_access deny purge

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet
http_access allow localhost

http_access deny all

http_port 8080

hierarchy_stoplist cgi-bin ?

access_log /var/log/squid/access.log squid

coredump_dir /var/cache/squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

Установка необходимых пакетов

Теперь нам необходим пакет net-proxy/squidguard — именно он будет выполнять фильтрацию сайтов по черным спискам и редирект. Для того чтобы поставить его выполним следующую команду:

emerge -a net-proxy/squidguard

Команда выведет, что мы собираемся ставить — если нас все устраивает, то соглашаемся и ждем завершения.

Также нам нужны черные списки для фильтров. Для этого поставим следующие пакеты: net-proxy/squidguard-shallalist и net-proxy/squidguard-digincore.

В первом содержится большое количество списков по категориям, во втором список для фильтрации ресурсов 18+.

Описание категорий списков shallalist можно найти на следующей странице .

Подключение SquidGuard к Squid и настройка фильтрации

Приступим к настройке.

Для использования редиректора нам надо добавить в /etc/squid/squid.conf следующие параметры:

url_rewrite_program /usr/bin/squidGuard
url_rewrite_children 10

Первый параметр указывает путь к программе-редиректору.
Второй — количество одновременных потоков редиректора.

Теперь нам следует настроить SquidGuard.

Приблизительное содержание файла /etc/squidGuard/squidGuard.conf:

dbhome /var/lib/squidguard
logdir /var/log/squidGuard

src it {
        ip 192.168.5.40-192.168.5.70
}

dest adv{
        domainlist BL/adv/domains
        urllist BL/adv/urls
        redirect http://localhost.localdomain/block.gif
}

dest scnet{
        domainlist BL/socialnet/domains
        urllist BL/socialnet/urls
}

dest wmail{
        domainlist BL/webmail/domains
        urllist BL/webmail/urls
}

dest downl{
        domainlist BL/downloads/domains
        urllist BL/downloads/urls
}

dest digincore{
    domainlist digincore-general/domains
}

acl {
        it {
                pass !adv !porn all
                redirect 302:http://localhost.localdomain/block.html
        }

        default {
                pass !adv !scnet !wmail !downl !porn !digincore all
                redirect 302:http://localhost.localdomain/block.html
        }

}

Параметр dbhome указывает на директорию с черными списками.
logdir — папка сохранения логов.
Далее идут описания клиентов и фильтров.

src it {
    ip 192.168.5.40-192.168.5.70
}

Данная секция описывает группу компьютеров отдела it, с диапазоном ip-адресов 192.168.5.40-192.168.5.70

Секции фильтров выглядят, например, следующим образом:

dest scnet{
        domainlist BL/socialnet/domains
        urllist BL/socialnet/urls
}

Данный фильтр scnet фильтрует ресурсы социальных сетей.
Параметр domainlist указывает на список фильтруемых доменов.
urllist — список конкретных веб-страниц для фильтрации.
Также возможен параметр expressionlist для указания списка фильтрации по регулярным выражениям.

Теперь имея одну привилегированную группу компьютеров и несколько фильтров мы можем настроить ограничения доступа.
Например:

acl {
        it {
                pass !adv !digincore all
                redirect 302:http://localhost.localdomain/block.html
        }

        default {
                pass !adv !scnet !wmail !downl !digincore all
                redirect 302:http://localhost.localdomain/block.html
        }

}

Группе компьютеров it мы показываем все кроме ресурсов из списков adv (реклама, баннеры) и digincore (черный список ресурсов 18+), при попытке доступа к запрещенному ресурсу мы перенаправляем на страницу http://localhost.localdomain/block.html
Для все остальных мы показываем все кроме ресурсов входящих в фильтры adv (реклама), scnet (соц. сети), wmail (почта), downl (файлообменники), digincore (18+) и при запросе к запрещенному также перенаправляем на страницу http://localhost.localdomain/block.html

Спасибо!